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

   ### Expected behavior
   
   The Relax ONNX frontend should import a valid ONNX Gather whose indices are 
produced by Shape.
   
   ### Actual behavior
   
   The script constructs a valid ONNX model. `onnx.checker.check_model` and 
ONNX Runtime session construction succeed. `from_onnx` fails while converting 
`Gather`:
   
   ```text
   Error converting operator Gather, with inputs: [data, R.shape([2, 3])]
   Traceback (most recent call last):
     ...
     File ".../python/tvm/relax/frontend/onnx/onnx_frontend.py", line 1353, in 
_impl_v13
       indices_dtype = indices.ty.dtype.dtype
   AttributeError: 'ShapeType' object has no attribute 'dtype'
   ```
   
   ### Environment
   
   * OS: macOS 15.6 (Darwin 24.6.0, arm64)
   * Python: 3.12.2
   * TVM: c7b458e946bc4266915da582457476bdcd9705ae (tag v0.26.0; package 
reports 0.26.dev0)
   * ONNX: 1.17.0
   * ONNX Runtime: 1.21.1
   * Frontend: `tvm.relax.frontend.onnx.from_onnx`
   
   ### Steps to reproduce
   
   The following self-contained script constructs the model:
   
   ```python
   #!/usr/bin/env python3
   """Reproduce the Relax ONNX ShapeType/Gather import failure."""
   
   import onnx
   import onnxruntime as ort
   from onnx import TensorProto, helper
   from tvm.relax.frontend.onnx import from_onnx
   
   
   def main() -> None:
       data = helper.make_tensor_value_info("data", TensorProto.FLOAT, [4])
       shape_source = helper.make_tensor_value_info(
           "shape_source", TensorProto.FLOAT, [2, 3]
       )
       out = helper.make_tensor_value_info("out", TensorProto.FLOAT, [2])
       graph = helper.make_graph(
           [
               helper.make_node("Shape", ["shape_source"], ["indices"]),
               helper.make_node("Gather", ["data", "indices"], ["out"], axis=0),
           ],
           "shape_as_gather_indices",
           [data, shape_source],
           [out],
       )
       model = helper.make_model(graph, opset_imports=[helper.make_opsetid("", 
18)])
   
       onnx.checker.check_model(model)
       ort.InferenceSession(model.SerializeToString(), 
providers=["CPUExecutionProvider"])
       from_onnx(model, opset=18, keep_params_in_input=True)
   
   
   if __name__ == "__main__":
       main()
   ```
   
   ### Analysis
   
   `Shape` is represented as `ShapeType`, but the `Gather` importer reads 
`indices.ty.dtype.dtype`, assuming `TensorType`. The failure occurs during ONNX 
import.
   
   ### Triage
   
   * needs-triage
   


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


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to