masahi commented on a change in pull request #7562:
URL: https://github.com/apache/tvm/pull/7562#discussion_r586915168



##########
File path: python/tvm/relay/frontend/tensorflow.py
##########
@@ -1166,6 +1166,125 @@ def _impl(inputs, attr, params, mod):
     return _impl
 
 
+def _math_segment_sum():
+    def _impl(inputs, attr, params, mod):
+        assert len(inputs) == 2, "There should be 2 input tensors"
+        return get_relay_op("segment_sum")(inputs[0], inputs[1])
+
+    return _impl
+
+
+def _sparse_segment_sum():
+    def _impl(inputs, attr, params, mod):
+        assert len(inputs) == 3, "There should be 3 input tensors"
+        data = _op.take(inputs[0], inputs[1], axis=0)
+        return _op.segment_sum(data, inputs[2])
+

Review comment:
       By "fused" I meant we shouldn't materialize the result of `take`, which 
can be huge. In a fused implementation, we need to look up indices and 
accumulate the sum on the fly. This is why PT has `EmbeddingBag` op, see their 
doc https://pytorch.org/docs/stable/generated/torch.nn.EmbeddingBag.html.
   
   Yes, a complicated op like this will not likely be feasible if we rely only 
on Relay-level op fusion. We need a dedicated `sparse_segment_sum` TOPI/Relay 
op. 




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to