Repository navigation
[Fix][Relax] Raise error on non-unit dim ONNX Squeeze axis - #20188
Conversation
| return | ||
| for axis in _normalize_constant_axes(list(axes), rank, "Squeeze"): | ||
| extent = ty.shape.values[axis] | ||
| if isinstance(extent, tirx.IntImm) and int(extent.value) != 1: |
There was a problem hiding this comment.
This only rejects statically known non-unit extents, so the same ONNX violation remains for symbolic dimensions. For an input declared as (N, 3) with constant axes [0], running with shape (2, 3) correctly raises in ONNX Runtime, while TVM imports it and silently returns a (3,) view containing the first row. Please add a runtime check that selected extents equal 1, or reject the import when this cannot be proven, and add a symbolic-dimension regression test. The runtime-axes path needs the same validation.
There was a problem hiding this comment.
You're right, thank you. I went with the second approach because it's similar to how other parts in the frontend handle these cases.
There was a problem hiding this comment.
Thanks for handling symbolic dimensions. Runtime axes still bypass this check though, so invalid non-unit axes remain accepted. Please add a runtime assertion or reject non-constant axes during import, with a regression test.
There was a problem hiding this comment.
You're welcome.
Correct me if I'm worng, but regarding a runtime assertion I don't see assert_op used in any frontend and match_cast only used to bind symbolic vars, never to assert a value. The usual pattern is to reject an import when a value isn't a compile-time constant. Should I just do that here as well?
|
you can rebase the main since the lint issue is fixed |
a920415 to
e8afc7e
Compare
|
LGTM |
TVM's ONNX Squeeze converter accepted axes with non-unit dimensions instead of raising an error silently passing tensors through unchanged. This adds a check in the ONNX frontend that raises ValueError when a squeeze axis's statically known size isn't 1, matching the ONNX spec.
Fixes #20185
Edit: The code merged from #20147 was causing a linter error so Claude assisted me in reformatting the code