You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tvm.apache.org by GitBox <gi...@apache.org> on 2020/09/10 11:01:00 UTC

[GitHub] [incubator-tvm] j-paulus opened a new issue #6441: ONNX strided slice ignoring stride argument

j-paulus opened a new issue #6441:
URL: https://github.com/apache/incubator-tvm/issues/6441


   If strided slice is used in a model, the stride argument is ignored and the result is wrong. 
   
   I encountered the problem when trying to compile an ONNX model created by pytorch conversion. Similar problem was present in the pytorch frontend (#6414), and was fixed by #6418.
   
   Possibly related issue #6316.
   
   Code to reproduce the problem:
   
   ```
   import torch
   import tvm
   from tvm import relay
   import onnx
   
   class TriggerBug(torch.nn.Module):
       def __init__(self):
           super(TriggerBug, self).__init__()
   
       def forward(self, x):
           return x[..., 0::2] + x[..., 1::2]
   
   x_in = torch.randn(1, 4)
   torch_model = TriggerBug()
   onnx_name = 'strided_slice.onnx'
   example_output = torch_model(x_in)
   # convert to ONNX
   torch.onnx.export(torch_model, (x_in,), onnx_name,
                     verbose=True,
                     example_outputs=example_output,
                     input_names=['x'],
                     output_names=['y'],
                     opset_version=10,
                     enable_onnx_checker=True)
   
   onnx_model = onnx.load(onnx_name)
   target = 'llvm'
   shape_dict = {'x': x_in.shape}
   mod, params = relay.frontend.from_onnx(onnx_model, shape_dict)
   
   with tvm.transform.PassContext(opt_level=1):
       intrp = relay.build_module.create_executor('graph', mod, tvm.cpu(0), target)
   
   ```
   
   The traceback:
   
   >   mod, params = relay.frontend.from_onnx(onnx_model, shape_dict)
   >   File "/Users/name/opt/anaconda3/envs/tvm/lib/python3.7/site-packages/tvm-0.7.dev1-py3.7-macosx-10.9-x86_64.egg/tvm/relay/frontend/onnx.py", line 2456, in from_onnx
   >     mod, params = g.from_onnx(graph, opset)
   >   File "/Users/name/opt/anaconda3/envs/tvm/lib/python3.7/site-packages/tvm-0.7.dev1-py3.7-macosx-10.9-x86_64.egg/tvm/relay/frontend/onnx.py", line 2302, in from_onnx
   >     return IRModule.from_expr(func), self._params
   >   File "/Users/name/opt/anaconda3/envs/tvm/lib/python3.7/site-packages/tvm-0.7.dev1-py3.7-macosx-10.9-x86_64.egg/tvm/ir/module.py", line 236, in from_expr
   >     return _ffi_api.Module_FromExpr(expr, funcs, defs)
   >   File "/Users/name/opt/anaconda3/envs/tvm/lib/python3.7/site-packages/tvm-0.7.dev1-py3.7-macosx-10.9-x86_64.egg/tvm/_ffi/_ctypes/packed_func.py", line 225, in __call__
   >     raise get_last_ffi_error()
   > tvm._ffi.base.TVMError: Traceback (most recent call last):
   >   [bt] (8) 9   libtvm.dylib                        0x0000000122684df8 TVMFuncCall + 72
   >   [bt] (7) 8   libtvm.dylib                        0x0000000121b8e452 std::__1::__function::__func<void tvm::runtime::TypedPackedFunc<tvm::IRModule (tvm::RelayExpr, tvm::Map<tvm::GlobalVar, tvm::BaseFunc, void, void>, tvm::Map<tvm::GlobalTypeVar, tvm::TypeData, void, void>)>::AssignTypedLambda<tvm::$_9>(tvm::$_9)::'lambda'(tvm::runtime::TVMArgs const&, tvm::runtime::TVMRetValue*), std::__1::allocator<void tvm::runtime::TypedPackedFunc<tvm::IRModule (tvm::RelayExpr, tvm::Map<tvm::GlobalVar, tvm::BaseFunc, void, void>, tvm::Map<tvm::GlobalTypeVar, tvm::TypeData, void, void>)>::AssignTypedLambda<tvm::$_9>(tvm::$_9)::'lambda'(tvm::runtime::TVMArgs const&, tvm::runtime::TVMRetValue*)>, void (tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*)>::operator()(tvm::runtime::TVMArgs&&, tvm::runtime::TVMRetValue*&&) + 610
   >   [bt] (6) 7   libtvm.dylib                        0x0000000121b7f810 tvm::IRModule::FromExpr(tvm::RelayExpr const&, tvm::Map<tvm::GlobalVar, tvm::BaseFunc, void, void> const&, tvm::Map<tvm::GlobalTypeVar, tvm::TypeData, void, void> const&) + 1040
   >   [bt] (5) 6   libtvm.dylib                        0x0000000121b7ca47 tvm::IRModuleNode::Add(tvm::GlobalVar const&, tvm::BaseFunc const&, bool) + 183
   >   [bt] (4) 5   libtvm.dylib                        0x0000000121b7c4ef tvm::RunTypeCheck(tvm::IRModule const&, tvm::GlobalVar const&, tvm::relay::Function) + 1103
   >   [bt] (3) 4   libtvm.dylib                        0x00000001224dca20 tvm::relay::InferType(tvm::relay::Function const&, tvm::IRModule const&, tvm::GlobalVar const&) + 544
   >   [bt] (2) 3   libtvm.dylib                        0x00000001224dbbc7 tvm::relay::TypeInferencer::Infer(tvm::RelayExpr) + 119
   >   [bt] (1) 2   libtvm.dylib                        0x0000000121b6d87c tvm::ErrorReporter::RenderErrors(tvm::IRModule const&, bool) + 5308
   >   [bt] (0) 1   libtvm.dylib                        0x00000001219917bf dmlc::LogMessageFatal::~LogMessageFatal() + 111
   >   File "/Users/name/code/python/tvm/src/ir/error.cc", line 132
   > TVMError: 
   > Error(s) have occurred. The program has been annotated with them:
   > 
   > In `main`: 
   > #[version = "0.0.5"]
   > fn (%x: Tensor[(1, 4), float32]) {
   >   %0 = strided_slice(%x, begin=[0, 0], end=[2147483647, 9223372036854775807], strides=[1]);
   >   %1 = strided_slice(%x, begin=[0, 1], end=[2147483647, 9223372036854775807], strides=[1]);
   >   add(%0, %1) Incompatible broadcast type TensorType([1, 4], float32) and TensorType([1, 3], float32); 
   > }
   
   The intermediate ONNX graph is:
   > graph(%x : Float(1:4, 4:1, requires_grad=0, device=cpu)):
   >   %1 : Tensor = onnx::Constant[value={1}]()
   >   %2 : Tensor = onnx::Constant[value={0}]()
   >   %3 : Tensor = onnx::Constant[value={9223372036854775807}]()
   >   %4 : Tensor = onnx::Constant[value={2}]()
   >   %5 : Float(1:4, 2:2, requires_grad=0, device=cpu) = onnx::Slice(%x, %2, %3, %1, %4)
   >   %6 : Tensor = onnx::Constant[value={1}]()
   >   %7 : Tensor = onnx::Constant[value={1}]()
   >   %8 : Tensor = onnx::Constant[value={9223372036854775807}]()
   >   %9 : Tensor = onnx::Constant[value={2}]()
   >   %10 : Float(1:4, 2:2, requires_grad=0, device=cpu) = onnx::Slice(%x, %7, %8, %6, %9)
   >   %y : Float(1:2, 2:1, requires_grad=0, device=cpu) = onnx::Add(%5, %10)
   >   return (%y)
   
   Here the stride length is correctly present.
   
   Versions:
   - pytorch: 1.7.0.dev20200908
   - TVM: 0.7.dev1 git revision 84fa626
   - onnx: 1.7.0
   
   If you are asking why am I going this route via ONNX and not use directly pytorch frontend: The compilation of my real model from pytorch does not currently work, but I have verified that the converted ONNX version works. I was hoping that the ONNX frontend could then compile the full model.


----------------------------------------------------------------
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:
users@infra.apache.org



[GitHub] [incubator-tvm] j-paulus commented on issue #6441: ONNX strided slice ignoring stride argument

Posted by GitBox <gi...@apache.org>.
j-paulus commented on issue #6441:
URL: https://github.com/apache/incubator-tvm/issues/6441#issuecomment-691911288


   Working! And apparently something else has been fixed in the last days as I am now able to transform my real model both from pytorch and ONNX. (With some warnings and very poor performance, but I need to take a closer look what is the matter there.)
   Many thanks for the quick fixes with all bugreports, @masahi 


----------------------------------------------------------------
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:
users@infra.apache.org



[GitHub] [incubator-tvm] tqchen commented on issue #6441: ONNX strided slice ignoring stride argument

Posted by GitBox <gi...@apache.org>.
tqchen commented on issue #6441:
URL: https://github.com/apache/incubator-tvm/issues/6441#issuecomment-690360234


   cc @jwfromm @masahi 


----------------------------------------------------------------
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:
users@infra.apache.org



[GitHub] [incubator-tvm] masahi commented on issue #6441: ONNX strided slice ignoring stride argument

Posted by GitBox <gi...@apache.org>.
masahi commented on issue #6441:
URL: https://github.com/apache/incubator-tvm/issues/6441#issuecomment-691587613


   @j-paulus should be fixed by https://github.com/apache/incubator-tvm/pull/6467
   Also happy to help with your rest of pytorch import problems.


----------------------------------------------------------------
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:
users@infra.apache.org



[GitHub] [incubator-tvm] tqchen closed issue #6441: ONNX strided slice ignoring stride argument

Posted by GitBox <gi...@apache.org>.
tqchen closed issue #6441:
URL: https://github.com/apache/incubator-tvm/issues/6441


   


----------------------------------------------------------------
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:
users@infra.apache.org