zacharywhitley opened a new issue, #20065:
URL: https://github.com/apache/tvm/issues/20065
## Summary
`BinaryBase.base_impl` in the Relax ONNX frontend crashes when both
operands are `PrimValue`s from shape arithmetic. The numpy fallback
returns a TIR `PrimExpr`, then `.item()` is called on it.
## Environment
TVM `0.25.0.post1` (pip), macOS arm64, Python 3.11.
## Reproducer
Model: `owensong/Inflect-Nano-v2` on Hugging Face (Apache-2.0). The
original (un-simplified) encoder has a `Sub` on two shape-derived
`PrimValue`s.
```python
import onnx
from tvm.relax.frontend.onnx import from_onnx
model = onnx.load("encoder.onnx") # do NOT run onnxsim
mod = from_onnx(model, keep_params_in_input=False)
```
## Failure
```
AttributeError: 'Sub' object has no attribute 'item'
```
At
[`python/tvm/relax/frontend/onnx/onnx_frontend.py:475-493`](https://github.com/apache/tvm/blob/main/python/tvm/relax/frontend/onnx/onnx_frontend.py).
`_to_numpy` wraps two `PrimValue`s as 0-d object arrays; numpy dispatch
returns a bare `PrimExpr` (symbolic, not numeric); fall-through calls
`.item()` which the `PrimExpr` doesn't implement.
## Suggested patch
Detect when the numpy op returned a `PrimExpr` and wrap it back into
a `PrimValue` rather than calling `.item()`.
```diff
--- a/python/tvm/relax/frontend/onnx/onnx_frontend.py
+++ b/python/tvm/relax/frontend/onnx/onnx_frontend.py
@@ BinaryBase.base_impl
- return output.item()
+ if isinstance(output, tvm.tir.PrimExpr):
+ return relax.PrimValue(output)
+ return output.item()
```
## User workaround
`onnxsim` with concrete input shapes constant-folds most `Shape → Gather
→ Sub` patterns away. Works when input shapes can be pinned; not
viable for genuinely dynamic dimensions.
## Discovered by
Compiling Inflect nano encoder from
[cognition](https://github.com/tegmentum/cognition). See sibling
reports for related structural bugs in the same frontend (bug 3 in
particular has no user workaround).
--
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]