This is an automated email from the ASF dual-hosted git repository.
andrewzhaoluo pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tvm.git
The following commit(s) were added to refs/heads/main by this push:
new 97ae25cf83 [FQ2I] Add log op to FQ2I (#10924)
97ae25cf83 is described below
commit 97ae25cf830d9fa8e04112f4f3deee6c0ef9d4e8
Author: Jocelyn S <[email protected]>
AuthorDate: Thu Apr 21 12:58:56 2022 -0400
[FQ2I] Add log op to FQ2I (#10924)
* unary op for resize2d and test
* renamed test
* added log in quantized form
* black'd some files
* changed suggested commentary
---
python/tvm/relay/qnn/op/legalizations.py | 1 +
python/tvm/relay/qnn/op/qnn.py | 35 ++++++++++++++++++++++
.../transform/fake_quantization_to_integer.py | 1 +
src/relay/qnn/op/unary_elementwise_op.cc | 5 ++++
.../test_pass_fake_quantization_to_integer.py | 3 ++
5 files changed, 45 insertions(+)
diff --git a/python/tvm/relay/qnn/op/legalizations.py
b/python/tvm/relay/qnn/op/legalizations.py
index 6a17a14eb6..d4176757a5 100644
--- a/python/tvm/relay/qnn/op/legalizations.py
+++ b/python/tvm/relay/qnn/op/legalizations.py
@@ -73,6 +73,7 @@ register_qnn_unary_op_legalize("qnn.exp", np.exp)
register_qnn_unary_op_legalize("qnn.erf", special.erf)
register_qnn_unary_op_legalize("qnn.sigmoid", lambda arr: 1 / (1 +
np.exp(-arr)))
register_qnn_unary_op_legalize("qnn.tanh", np.tanh)
+register_qnn_unary_op_legalize("qnn.log", np.log)
# Default to None. If overridden by target, this will not be run.
diff --git a/python/tvm/relay/qnn/op/qnn.py b/python/tvm/relay/qnn/op/qnn.py
index 10c2df68d4..63ae36c122 100644
--- a/python/tvm/relay/qnn/op/qnn.py
+++ b/python/tvm/relay/qnn/op/qnn.py
@@ -998,6 +998,41 @@ def sigmoid(x, scale, zero_point, output_scale,
output_zero_point):
)
+def log(x, scale, zero_point, output_scale, output_zero_point):
+ """Quantized log.
+
+ Parameters
+ ----------
+ x : relay.Expr
+ The quantized input tensor.
+
+ scale: relay.Expr
+ The scale of the quantized expr.
+
+ zero_point: relay.Expr
+ The zero point of quantized expr.
+
+ output_scale: relay.Expr
+ The scale of the output quantized expr.
+
+ output_zero_point: relay.Expr
+ The zero point of output quantized expr.
+
+ Returns
+ -------
+ result : relay.Expr
+ The computed result.
+
+ """
+ return _make.log(
+ x,
+ scale,
+ zero_point,
+ output_scale,
+ output_zero_point,
+ )
+
+
def subtract(
lhs,
rhs,
diff --git a/python/tvm/relay/transform/fake_quantization_to_integer.py
b/python/tvm/relay/transform/fake_quantization_to_integer.py
index 0099ccf8be..c809afce61 100644
--- a/python/tvm/relay/transform/fake_quantization_to_integer.py
+++ b/python/tvm/relay/transform/fake_quantization_to_integer.py
@@ -542,3 +542,4 @@ register_unary_qnn("exp", relay.qnn.op.exp)
register_unary_qnn("erf", relay.qnn.op.erf)
register_unary_qnn("sigmoid", relay.qnn.op.sigmoid)
register_unary_qnn("tanh", relay.qnn.op.tanh)
+register_unary_qnn("log", relay.qnn.op.log)
diff --git a/src/relay/qnn/op/unary_elementwise_op.cc
b/src/relay/qnn/op/unary_elementwise_op.cc
index ff259d9752..020ce17490 100644
--- a/src/relay/qnn/op/unary_elementwise_op.cc
+++ b/src/relay/qnn/op/unary_elementwise_op.cc
@@ -36,14 +36,19 @@
QNN_CREATE_UNARY_ELEMENTWISE_OP("exp").set_attr<FTVMLegalize>(
QNN_CREATE_UNARY_ELEMENTWISE_OP("sqrt").set_attr<FTVMLegalize>(
"FTVMQnnCanonicalize", QNN_UNARY_OP_DEFAULT_CANONICALIZATION(Sqrt));
+
QNN_CREATE_UNARY_ELEMENTWISE_OP("rsqrt").set_attr<FTVMLegalize>(
"FTVMQnnCanonicalize", QNN_UNARY_OP_DEFAULT_CANONICALIZATION(Rsqrt));
QNN_CREATE_UNARY_ELEMENTWISE_OP("erf").set_attr<FTVMLegalize>(
"FTVMQnnCanonicalize", QNN_UNARY_OP_DEFAULT_CANONICALIZATION(Erf));
+
QNN_CREATE_UNARY_ELEMENTWISE_OP("sigmoid").set_attr<FTVMLegalize>(
"FTVMQnnCanonicalize", QNN_UNARY_OP_DEFAULT_CANONICALIZATION(Sigmoid));
+QNN_CREATE_UNARY_ELEMENTWISE_OP("log").set_attr<FTVMLegalize>(
+ "FTVMQnnCanonicalize", QNN_UNARY_OP_DEFAULT_CANONICALIZATION(Log));
+
} // namespace qnn
} // namespace relay
} // namespace tvm
diff --git a/tests/python/relay/test_pass_fake_quantization_to_integer.py
b/tests/python/relay/test_pass_fake_quantization_to_integer.py
index a004de634d..5cfaa49665 100644
--- a/tests/python/relay/test_pass_fake_quantization_to_integer.py
+++ b/tests/python/relay/test_pass_fake_quantization_to_integer.py
@@ -347,6 +347,9 @@ class TestUnaryQNNOp:
def test_tanh(self):
self.helper_test_fake_quantize_unary_op(fp32_op=relay.tanh)
+ def test_log(self):
+ self.helper_test_fake_quantize_unary_op(fp32_op=relay.log)
+
def test_fake_quantize_reshape():
x = relay.var("x", shape=[1, 3, 224, 224], dtype="int8")