Apache TVM

Stars

面向深度学习模型的开源编译器栈,将来自 ONNX、PyTorch 等框架的计算图导入统一中间表示,并针对不同硬件完成图优化、算子生成与高性能部署。

ML COMPILER · ONNX SEMANTICS

同一个 0,在不同模式下代表不同形状

编译器不能只看到一个整数零;它还必须知道 ONNX 的 allowzero 规则,并且不能破坏 `-1` 原有的维度推断。

ONNX RESHAPETarget Shape[ 0 · −1 · N ]读取 allowzero 与字面值
allowzero = 00 → input_dim[i]规范化后常量折叠
allowzero = 1 · has 00 stays literal 0ShapeExpr 保留零维输出
no literal 0−1 keeps inference继续使用正常 Reshape 路径
语义冲突

ONNX 与 Relax 对 0 的解释不同

Relax ONNX 导入器没有正确区分 Reshape 的零值语义:默认模式下 `[0, 3]` 未先复制输入维度便进入 NumPy 常量折叠;`allowzero=1` 时又会触发 Relax 自身的零复制规则,无法保留字面零维。

边界识别

allowzero 只改变字面零语义

ONNX 的 `0` 同时受 `allowzero` 控制,而 `-1` 仍负责维度推断。特殊处理不能覆盖所有 `allowzero=1` 情况,否则没有字面零的 `[-1, 2]` 也会绕过正常推断并在运行期失败。

三路分发

复制、保留与推断各走其路

默认模式先把目标形状中的 `0` 规范化为对应输入维度再做常量折叠;仅当 `allowzero=1` 且目标形状确实含有字面零时构造 ShapeExpr,其余情况继续使用正常 Reshape 路径保留 `-1` 推断。

回归结果

零维输出与 −1 推断同时成立

同时覆盖默认零复制、真实零维输出与动态 `-1` 推断三条路径,使 ONNX 模型语义能够忠实落到 Relax;审查中发现的推断回退也被纳入回归覆盖。