v2.14.1: [MPS] Fix Jacobi SVD convergence for small columns (#199086)
PyTorch 发布 v2.14.1,其中包含针对 MPS 后端 Jacobi SVD 的修复(PR #199063,cherry-pick 自 commit d16cb38)。描述指出:当两列范数乘积低于 float32 epsilon 时,MPS Jacobi SVD 会跳过旋转,即使两列强相关;对 #196112 中的病态输入会产生非正交 U 和被放大的小奇异值。修复对小的非零列改用相对相关性判据,并保留零空间补全(禁用后秩亏输入的正交性误差为 1)。测试在 test_linalg.py 中新增 float32、float64、complex64、complex128 的设备通用覆盖(MPS 上为 float32 与 complex64),检查正交性、重构、奇异值与数值秩,且不使用固定种子。同一变更在 trunk 上被 pytorch-auto-revert 自动回滚。
Development
- First Reportciflow/mps/199086: [MPS] Fix Jacobi SVD convergence for small columns (#199063)PyTorch Core
- Industry Responsev2.14.1: [MPS] Fix Jacobi SVD convergence for small columns (#199086)PyTorch Core
- Industry Responsev2.14.1-rc2: [MPS] Fix Jacobi SVD convergence for small columns (#199086)PyTorch Core
- Industry Responsetrunk/e9cbdb93e7527e23377e8e3aca8055f0858d8c7f: Revert "[MPS] Fix Jacobi SVD convergence for small columns (#199063)"PyTorch Core
- Industry Responsetrunk/35d22a1a2c36bc86b5a9bfbf7e625b369a77ff51: [MPS] Fix Jacobi SVD convergence for small columns (#199063)PyTorch Core
- Current Assessment这是框架级数值稳定性维护,而非能力发布。它反映 MPS 后端在数值线性代数上仍在补齐与 CPU/CUDA 的一致性,也反映自动回滚机制在保护主干稳定性上的作用。对依赖 MPS 做训练或推理的团队,短期应避免依赖该版本中此路径的行为。Agent Pulse · analysis
PyTorch v2.14.1 包含一项 MPS 后端 Jacobi SVD 收敛修复(#199063),针对 #196112 中列范数乘积低于 float32 epsilon 时跳过旋转导致的非正交 U 与小奇异值放大问题,改为对小的非零列使用相对相关性判据,并保留零空间补全。测试覆盖 float32、float64、complex64、complex128 的正交性、重构、奇异值与数值秩,不使用固定种子。证据同时显示该提交在 trunk 上被自动回滚,说明该修复在合入后曾出现需要撤销的情况。
从描述看,问题根源是旋转跳过判据使用绝对量级阈值而非相对相关性,在病态矩阵上牺牲了正交性。修复方向合理,但同一提交被自动回滚,提示该改动可能引入其他测试或平台回归;在 MPS 上做 SVD 相关数值计算的工程师应关注后续是否重新合入及回滚原因。
这是框架级数值稳定性维护,而非能力发布。它反映 MPS 后端在数值线性代数上仍在补齐与 CPU/CUDA 的一致性,也反映自动回滚机制在保护主干稳定性上的作用。对依赖 MPS 做训练或推理的团队,短期应避免依赖该版本中此路径的行为。
对使用 Apple 芯片做本地训练或数值计算的团队,SVD 正交性错误可能静默影响降维、正则化与求解器结果,属于难以察觉的正确性风险。在修复稳定前,建议在 MPS 上对 SVD 结果做重构误差与正交性自检,或回退到 CPU 路径。
可验证的下一信号:PyTorch 仓库中 #199063 是否以新 PR 重新合入,以及回滚 commit e9cbdb93 对应的失败测试或平台信息是否公开;若重新合入,观察 test_linalg.py 中 MPS 覆盖是否保留。