From 647390e0b31360540bbc9ae89dd0142ddca3f54b Mon Sep 17 00:00:00 2001 From: mbrookhart Date: Wed, 24 Feb 2021 12:44:41 -0700 Subject: [PATCH 1/2] fix datatype on Reciprocal op --- python/tvm/relay/frontend/onnx.py | 3 ++- tests/python/frontend/onnx/test_forward.py | 17 +++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/python/tvm/relay/frontend/onnx.py b/python/tvm/relay/frontend/onnx.py index 1e5dad46782c..1bf6ceb86f3e 100644 --- a/python/tvm/relay/frontend/onnx.py +++ b/python/tvm/relay/frontend/onnx.py @@ -839,7 +839,8 @@ class Reciprocal(OnnxOpConverter): @classmethod def _impl_v1(cls, inputs, attr, params): - return _expr.const(1.0) / inputs[0] + dtype = infer_type(inputs[0]).checked_type.dtype + return _expr.const(1.0, dtype=dtype) / inputs[0] class Flatten(OnnxOpConverter): diff --git a/tests/python/frontend/onnx/test_forward.py b/tests/python/frontend/onnx/test_forward.py index 9e5911791481..d783710ed5ec 100644 --- a/tests/python/frontend/onnx/test_forward.py +++ b/tests/python/frontend/onnx/test_forward.py @@ -1867,6 +1867,23 @@ def verify_unary_ops(op, x, rtol=1e-5, atol=1e-5): verify_unary_ops("Sigmoid", x) verify_unary_ops("Softsign", x) + def verify_unary_ops_fp16(op, x, rtol=1e-5, atol=1e-5): + z = helper.make_node(op, ["in1"], ["out"]) + graph = helper.make_graph( + [z], + "_test", + inputs=[ + helper.make_tensor_value_info("in1", TensorProto.FLOAT16, list(in_shape)), + ], + outputs=[helper.make_tensor_value_info("out", TensorProto.FLOAT16, list(out_shape))], + ) + model = helper.make_model(graph, producer_name="_test") + verify_with_ort_with_inputs(model, [x], rtol=rtol, atol=atol) + + dtype = "float16" + x = np.random.uniform(size=in_shape).astype(dtype) + verify_unary_ops_fp16("Reciprocal", x) + @tvm.testing.uses_gpu def test_leaky_relu(): From 8c2737cca3435007e9dadf69406b8e3ae58f2579 Mon Sep 17 00:00:00 2001 From: mbrookhart Date: Fri, 26 Feb 2021 09:23:16 -0700 Subject: [PATCH 2/2] clean up test case --- tests/python/frontend/onnx/test_forward.py | 28 ++++++---------------- 1 file changed, 7 insertions(+), 21 deletions(-) diff --git a/tests/python/frontend/onnx/test_forward.py b/tests/python/frontend/onnx/test_forward.py index d783710ed5ec..a9f16613f116 100644 --- a/tests/python/frontend/onnx/test_forward.py +++ b/tests/python/frontend/onnx/test_forward.py @@ -1830,23 +1830,26 @@ def test_unary_ops(): dtype = "float32" out_shape = in_shape - def verify_unary_ops(op, x, rtol=1e-5, atol=1e-5): + def verify_unary_ops(op, x, rtol=1e-5, atol=1e-5, dtype="float32"): + x = x.astype(dtype) + ONNX_DTYPE = mapping.NP_TYPE_TO_TENSOR_TYPE[np.dtype(dtype)] z = helper.make_node(op, ["in1"], ["out"]) graph = helper.make_graph( [z], "_test", inputs=[ - helper.make_tensor_value_info("in1", TensorProto.FLOAT, list(in_shape)), + helper.make_tensor_value_info("in1", ONNX_DTYPE, list(in_shape)), ], - outputs=[helper.make_tensor_value_info("out", TensorProto.FLOAT, list(out_shape))], + outputs=[helper.make_tensor_value_info("out", ONNX_DTYPE, list(out_shape))], ) model = helper.make_model(graph, producer_name="_test") verify_with_ort_with_inputs(model, [x], rtol=rtol, atol=atol) - x = np.random.uniform(size=in_shape).astype(dtype) + x = np.random.uniform(size=in_shape) verify_unary_ops("Neg", x) verify_unary_ops("Abs", x) verify_unary_ops("Reciprocal", x) + verify_unary_ops("Reciprocal", x, dtype="float16") verify_unary_ops("Sqrt", x) verify_unary_ops("Relu", x) verify_unary_ops("Exp", x) @@ -1867,23 +1870,6 @@ def verify_unary_ops(op, x, rtol=1e-5, atol=1e-5): verify_unary_ops("Sigmoid", x) verify_unary_ops("Softsign", x) - def verify_unary_ops_fp16(op, x, rtol=1e-5, atol=1e-5): - z = helper.make_node(op, ["in1"], ["out"]) - graph = helper.make_graph( - [z], - "_test", - inputs=[ - helper.make_tensor_value_info("in1", TensorProto.FLOAT16, list(in_shape)), - ], - outputs=[helper.make_tensor_value_info("out", TensorProto.FLOAT16, list(out_shape))], - ) - model = helper.make_model(graph, producer_name="_test") - verify_with_ort_with_inputs(model, [x], rtol=rtol, atol=atol) - - dtype = "float16" - x = np.random.uniform(size=in_shape).astype(dtype) - verify_unary_ops_fp16("Reciprocal", x) - @tvm.testing.uses_gpu def test_leaky_relu():