viable/strict/1790538658: [MPS] Move addc{mul,div} value=0 non-finite test to OpInfo (#198753)
PyTorch PR #198753 将 MPS 专属测试 test_addc_ops_value_zero 迁移为 OpInfo 中的 sample:在 sample_inputs_addcmul_addcdiv 中加入 value=0 且 tensor1 含 NaN/Inf、tensor2 为零的样本,要求这些非有限值仍传播到输出(MPSGraph 曾把 value=0 短路为 self 的拷贝)。该样本仅在 requires_grad 为 False 时生成,因为 NaN 输出会让 gradcheck 的有限差分 Jacobian 变成 NaN 而无法比较。test_output_match 在不再请求梯度后可见该样本,test_python_ref 通过 reference_inputs 在所有设备上可见。PR 由 Claude Code 协助编写,已由 Isalia20 批准,依赖 #196924、#198743。
发展脉络
- 首次出现viable/strict/1790538658: [MPS] Move addc{mul,div} value=0 non-finite test to OpInfo (#198753)PyTorch Core
- 当前判断这是开源框架内部测试基础设施的常规演进,不构成产品、融资或市场层面的行业事件。可观察的行业含义仅限于:主流框架持续把后端差异收敛为统一算子契约,降低多硬件后端的维护成本。下一信号:PyTorch 是否在后续版本说明中把此类 OpInfo 迁移列为 MPS 稳定性改进项。Agent Pulse · 分析
PyTorch 仓库的 PR #198753 把原本只针对 MPS 后端的测试 test_addc_ops_value_zero 收敛为 OpInfo 通用样本:在 sample_inputs_addcmul_addcdiv 中新增 value=0、tensor1 含 NaN/Inf、tensor2 为零的输入,断言非有限值必须传播到输出,而不是被 MPSGraph 短路成 self 的拷贝。样本只在 requires_grad 为 False 时生成,原因是 NaN 输出会让 gradcheck 的有限差分 Jacobian 变为 NaN、永远无法相等;test_output_match 在不再请求梯度后能覆盖它,test_python_ref 则通过 reference_inputs 在所有设备上覆盖。PR 由 Claude Code 协助编写,经 Isalia20 批准,并依赖 #196924 与 #198743。
把后端特例测试上移到 OpInfo 样本,意味着算子语义(value=0 时非有限值仍需传播)被写成跨设备可复用的契约,而非某个后端的补丁。requires_grad=False 的门控说明测试框架对 NaN 与梯度校验的兼容性仍有约束,属于可验证的工程取舍。下一信号:该样本是否在后续 PR 中被扩展到 requires_grad=True 路径,或 MPSGraph 是否在 release note 中声明修复短路行为。
这是开源框架内部测试基础设施的常规演进,不构成产品、融资或市场层面的行业事件。可观察的行业含义仅限于:主流框架持续把后端差异收敛为统一算子契约,降低多硬件后端的维护成本。下一信号:PyTorch 是否在后续版本说明中把此类 OpInfo 迁移列为 MPS 稳定性改进项。
对使用 PyTorch MPS 后端做本地推理或训练的团队,这类测试收敛降低了跨设备数值行为不一致带来的隐性调试成本,但短期不改变任何采购或部署决策。可验证下一信号:MPS 相关 issue 中由 value=0 短路引发的报告是否减少。
若该样本稳定通过,MPS 上 addcmul/addcdiv 在 value=0 与非有限输入组合下的行为将与 CPU/CUDA 参考实现对齐。可验证下一信号:后续 PR 是否移除 MPS 侧遗留的特例测试,或是否出现针对该短路行为的回归报告。