oviazlo opened a new issue, #12844:
URL: https://github.com/apache/tvm/issues/12844

   Potentially, there is an issue with implementation of PyTorch 
`aten::fill_()` operator in the PyTorch frontend. 
   
   I have found this bug when I was trying to run 
[gallery/how_to/deploy_models/deploy_object_detection_pytorch.py](https://github.com/apache/tvm/blob/main/gallery/how_to/deploy_models/deploy_object_detection_pytorch.py)
 example with Torch 1.12.0 (see my post in Discuss Forum: [[frontend][pytorch] 
TVM compatibility with Torch 
1.12.0](https://discuss.tvm.apache.org/t/frontend-pytorch-tvm-compatibility-with-torch-1-12-0/13508)).
 In this example, Mask R-CNN model is used. After some debugging, I have found 
out that execution was failing when parsing these two lines:
   
   ``` bash
    
/opt/homebrew/Caskroom/miniforge/base/envs/tvm_test/lib/python3.8/site-packages/torchvision/models/detection/anchor_utils.py:121:0
 
      %2004 : Long(requires_grad=0, device=cpu) = aten::div(%1999, %other.1, 
%43), scope:  
    __module.model/__module.model.rpn/__module.model.rpn.anchor_generator #  
    
/opt/homebrew/Caskroom/miniforge/base/envs/tvm_test/lib/python3.8/site-packages/torch/_tensor.py:674:0
 
      %stride_height.1 : Long(requires_grad=0, device=cpu) = aten::fill_(%2003, 
%2004), scope:  
    __module.model/__module.model.rpn/__module.model.rpn.anchor_generator #  
   ```
   This is why I have prepared a simple unit test example that highlight this 
problem. The problem is present when one uses Torch 1.11.0 as well.
   
   ### Expected behavior
   
   Unit tests to run successfully. 
   Pytorch `aten::fill_()` operator consumes 0-size value tensor in all three 
tests. Pytorch and TVM output of this operator has to be identical.
   
   ### Actual behavior
   
   The first two tests (tests are listed in "Steps to reproduce") works fine. 
However, the third tests fail with an error:
   
   ``` bash
   =================================== FAILURES 
===================================
   ______________________________ test_fill_with_div 
______________________________
   tests/python/frontend/pytorch/test_forward.py:276: in test_fill_with_div
       verify_model_with_input(test_func, [torch.rand([1, 3, 10, 10]).float()])
   tests/python/frontend/pytorch/test_forward.py:242: in verify_model_with_input
       mod, params = relay.frontend.from_pytorch(trace, input_shapes, 
custom_convert_map)
   python/tvm/relay/frontend/pytorch.py:4564: in from_pytorch
       outputs = 
converter.convert_operators(_get_operator_nodes(graph.nodes()), outputs, 
ret_name)
   python/tvm/relay/frontend/pytorch.py:3938: in convert_operators
       relay_out = relay_op(
   python/tvm/relay/frontend/pytorch.py:812: in fill_
       return self.full_impl(self.infer_shape(data), fill_value, input_types[0])
   python/tvm/relay/frontend/pytorch.py:679: in full_impl
       out = _op.full(_expr.const(fill_value, dtype=dtype), size, dtype=dtype)
   python/tvm/relay/expr.py:517: in const
       raise ValueError("value has to be scalar or NDArray")
   E   ValueError: value has to be scalar or NDArray
   ----------------------------- Captured stderr call 
-----------------------------
   ```
   
   ### Environment
   
   TVM version:           v0.10.dev (c83ee08c102f3)
   Architecture:           arm64
   System Version:      macOS 12.5.1 (21G83)
   Kernel Version:      Darwin 21.6.0
   
   ### Steps to reproduce
   
   Add tests listed below to the 
`tests/python/frontend/pytorch/test_forward.py` script and run it.
   
   ``` python
   # works fine
   def test_fill():
       def test_func(x):
           return x.fill_(3)
   
       verify_model_with_input(test_func, [torch.rand([1, 3, 10, 10]).float()])
   
   # works fine
   def test_fill_zero_dim_value_tensor():
       def test_func(x):
           return x.fill_(torch.tensor(3))
   
       verify_model_with_input(test_func, [torch.rand([1, 3, 10, 10]).float()])
   
   # FAILURE
   def test_fill_with_div():
       def test_func(x):
           y = torch.div(torch.tensor(6.), torch.tensor(2.))
           return x.fill_(y)
   
       verify_model_with_input(test_func, [torch.rand([1, 3, 10, 10]).float()])
   ```
   


-- 
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.

To unsubscribe, e-mail: [email protected]

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

Reply via email to