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

   I simply used relay.frontend.from_onnx to import an ONNX model from PyTorch. 
   The code works fine when freeze_params is set to True (default). 
   
   When I was trying to separate weights from other constants, the same issue 
as #11783 occurred. 
   
   
   Here is the traceback:
   
   ```
       mod, params = relay.frontend.from_onnx(graph_def, freeze_params=False)
     File "python/tvm/relay/frontend/onnx.py", line 5816, in from_onnx
       mod, params = g.from_onnx(graph, opset)
     File "python/tvm/relay/frontend/onnx.py", line 5486, in from_onnx
       self._construct_nodes(graph)
     File "python/tvm/relay/frontend/onnx.py", line 5598, in _construct_nodes
       op = self._convert_operator(op_name, inputs, attr, self.opset)
     File "python/tvm/relay/frontend/onnx.py", line 5709, in _convert_operator
       sym = convert_map[op_name](inputs, attrs, self._params)
     File "python/tvm/relay/frontend/onnx.py", line 2732, in _impl_v8
       shape = fold_constant(expand_shape(in_shape, shape))
     File "python/tvm/relay/frontend/onnx.py", line 2701, in expand_shape
       if in_dims < new_dims:
     File "python/tvm/tir/expr.py", line 185, in __bool__
       return self.__nonzero__()
     File "python/tvm/tir/expr.py", line 180, in __nonzero__
       "Cannot use and / or / not operator to Expr, hint: "
   ValueError: Cannot use and / or / not operator to Expr, hint: use 
tvm.tir.all / tvm.tir.any instea
   ```
   
   onnx.py:2701:
   ```
   def expand_shape(in_shape, shape):
       """A function expands the shape when the rank is lower than that of the 
given
       intput. Also it replaces the extent of the shape with the corresponding 
extent
       of the intput when it is 1.
       """
       in_dims = infer_shape(in_shape)[0] 
       new_dims = infer_shape(shape)[0] 
   ```
   
   The value "shape" in `infer_shape` is
   ```
   free_var %onnx::ConstantOfShape_139: Tensor[(1), int64];
   dyn.full(1, %onnx::ConstantOfShape_139, shape=None, dtype="int64")
   ```
   And I got in_dims = `3` and new_dims = `?`
   
   It seems that the "freeze_params=False" prevented the input of 
"ConstantOfShape" op to be used in inferring shape. 
   Well, it is actually reasonable considering that when I directly used ONNX 
`infer_shapes`, I also got `float32[20,12,unk__0]`
   
   
   
   ### Environment
   
   Both on TVM 0.9.0 branch and main branch.
   PyTorch 1.12.0. 
   ONNX 1.12.0.
   A "ConstantOfShape" op following by an Expand op is needed to reproduce the 
error.
   
   


-- 
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: commits-unsubscr...@tvm.apache.org.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to