import sys import numpy as np def print_test_debug_info(testname, items_dict): filename = "debug_operator_onnxifi_" + testname + ".txt" np.set_printoptions(threshold=sys.maxsize) with open(filename, 'w') as f: for key, value in items_dict.items(): print(key, value) f.write("{}\n".format(key)) f.write("{}\n".format(value)) def print_net(net): for i in net.external_input: print("Input: {}".format(i)) for i in net.external_output: print("Output: {}".format(i)) for op in net.op: print("Op {}".format(op.type)) for x in op.input: print(" input: {}".format(x)) for y in op.output: print(" output: {}".format(y)) def _sigmoid(x): return 1. / (1. + np.exp(np.float64(-x))) def _tanh(x): return np.tanh(np.float64(x)) def _swish(x): return np.float64(x) * _sigmoid(x) def _gelu_by_sigmoid(x): return np.float64(x) / (1. + np.exp(np.float64(x) * 1.702)) def _acc_func(opname, x): if opname == "Swish": return _swish(x) elif opname == "Sigmoid": return _sigmoid(x) elif opname == "Tanh": return _tanh(x) elif opname == "Gelu": return _gelu_by_sigmoid(x) else: return x def _get_ulp16(x): abs_x = np.abs(x) mask = (abs_x > 2.**(-14)) abs_x = mask * abs_x + (1 - mask) * 2.**(-14) k = np.floor(np.log2(abs_x)) return 2.**(k - 10) def compute_ulp_error(opname, xvec, y_nnpi): y_acc = _acc_func(opname, np.float64(xvec)) scale = 1. / _get_ulp16(y_acc) return (y_nnpi - y_acc) * scale