[Relax][Frontend][Torch] `_squeeze` 不会验证 `dim`: 超出边界的元组维度会通过 `from_fx` 静默转换为 `squeeze(None)` (原生 PyTorch 会抛出 `IndexError`)
作者: siyiweigeHEW创建于 2026年9月11日更新于 2026年9月11日
预期行为 tvm.relax.frontend.torch._squeeze(Python/tvm/relax/frontend/torch/base_fx_graph_translator.py:2523-2543) 读取 PyTorch squeeze 调用的 dim/dims 参数,从列表/元组中删除超出范围的轴,并在过滤后的列表为空时回退到 dim=None:
Python if isinstance(dim, list | tuple) and len(dim) > 0: shape = self.shape_of(x) valid_dims = [] for d in dim: axis = d if d >= 0 else len(shape) + d if axis < len(shape): valid_dims.append(d) # 如果没有有效的维度,使用 None 来压缩所有大小为 1 的维度 dim = valid_dims if valid_dims else None return self.block_builder.emit(relax.op.squeeze(x, dim))
一个超出范围的 dim 应该被拒绝,并以一个清晰的前端级错误来匹配原生 PyTorch,该调用会引发 IndexError: Dimension out of range。它不应该被默默地丢弃,并重新解释为不同的操作。
内容来源: apache/tvm