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")

Reply via email to