j-paulus opened a new issue #6407:
URL: https://github.com/apache/incubator-tvm/issues/6407
When trying to compile a pytorch model that has a reshape() where one or
more of the sizes is a result from a computation, the computation is not
evaluated properly, but provided as-is to int() cast. And this fails.
A small example triggering the error:
```
import torch
from tvm import relay
class TriggerBug(torch.nn.Module):
def __init__(self):
super(TriggerBug, self).__init__()
def forward(self, x):
x_shape = x.shape
return x.reshape((x_shape[0] * x_shape[1], x_shape[2]))
x_in = torch.randn(2, 3, 4)
torch_model = TriggerBug()
traced_model = torch.jit.trace(torch_model, x_in)
input_name = 'x_in'
shape_list = [(input_name, x_in.shape)]
mod, params = relay.frontend.from_pytorch(traced_model, shape_list)
```
The result:
>
> Traceback (most recent call last):
> File "/Users/name/code/python/torch2tvm_reshape_bug.py", line 30, in
<module>
> mod, params = relay.frontend.from_pytorch(traced_model, shape_list)
> File
"/Users/name/opt/anaconda3/envs/env/lib/python3.8/site-packages/tvm-0.7.dev1-py3.8-macosx-10.9-x86_64.egg/tvm/relay/frontend/pytorch.py",
line 2825, in from_pytorch
> ret = convert_operators(_get_operator_nodes(graph.nodes()),
> File
"/Users/name/opt/anaconda3/envs/env/lib/python3.8/site-packages/tvm-0.7.dev1-py3.8-macosx-10.9-x86_64.egg/tvm/relay/frontend/pytorch.py",
line 2734, in convert_operators
> relay_out = relay_op(inputs, _get_input_types(op_node, outputs,
> File
"/Users/name/opt/anaconda3/envs/env/lib/python3.8/site-packages/tvm-0.7.dev1-py3.8-macosx-10.9-x86_64.egg/tvm/relay/frontend/pytorch.py",
line 1138, in _impl
> return _op.transform.reshape(data, new_shape)
> File
"/Users/name/opt/anaconda3/envs/env/lib/python3.8/site-packages/tvm-0.7.dev1-py3.8-macosx-10.9-x86_64.egg/tvm/relay/op/transform.py",
line 226, in reshape
> tempshape.append(int(shape))
> TypeError: int() argument must be a string, a bytes-like object or a
number, not 'Call'
The problem is that the contents of `newshape` is a list
`[CallNode(Op(multiply), [Constant(2), Constant(3)], (nullptr), []), 4]`, the
first element is of type `tvm.relay.expr.Call`, and this is not evaluated but
provided to the `int()` cast as-is.
TVM version 0.7.dev1 cloned from git on 03.09.2020.
----------------------------------------------------------------
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]