viable/strict/1786355346: Handle symbolic tensors in overlap status (#186471)
PyTorch 的 get_overlap_status 在检查输入张量是否具有符号尺寸或步幅之前,先检查了 TensorImpl::numel()。当 Dynamo 重新编译动态形状时,FakeTensor 使用符号元数据,导致 gather.out 元操作在尝试为符号输入计算具体 numel 时失败。修复方案是在任一输入具有符号尺寸或步幅时立即返回 MemOverlapStatus::TooHard,同时保留完全相同的实现 Full 情况。该修复位于根重叠状态辅助函数中,修复了 #122773。
发展脉络
- 首次出现viable/strict/1786355346: Handle symbolic tensors in overlap status (#186471)PyTorch Core
- 行业反馈trunk/6bad1e04bc4aaf6e13aa292106c647e5e0c501da: Handle symbolic tensors in overlap status (#186471)PyTorch Core
- 当前判断此修复反映了 PyTorch 对动态形状支持的持续改进,这对于使用 torch.compile 和 Dynamo 的机器学习工程师至关重要。它可能减少动态形状场景下的编译失败,提升框架的鲁棒性。Agent Pulse · 分析
PyTorch 修复了在动态形状下 gather.out 元操作因符号张量而失败的问题。get_overlap_status 在检查符号尺寸或步幅之前先计算了 numel,导致 FakeTensor 在 Dynamo 重新编译时失败。修复方案是在遇到符号张量时返回 TooHard,保持保守的重叠契约,并避免进入仅限具体存储范围算术。该修复位于根辅助函数,而非特定于 gather 的变通方案,以防止其他符号 out/in-place 元路径失败。
该修复表明 PyTorch 的元操作在符号张量存在时,重叠检查需要保守处理。通过返回 TooHard,框架避免了在无法精确分类时进行具体计算,这可能会影响依赖重叠检查的优化或验证。未来可关注是否会有更精确的符号重叠分析,以替代保守的 TooHard 返回。
此修复反映了 PyTorch 对动态形状支持的持续改进,这对于使用 torch.compile 和 Dynamo 的机器学习工程师至关重要。它可能减少动态形状场景下的编译失败,提升框架的鲁棒性。
对于依赖 PyTorch 动态形状的团队,此修复减少了编译错误,提高了开发效率。它可能降低因元操作失败导致的调试成本,并提升模型训练和推理的稳定性。
未来,PyTorch 可能会进一步优化符号张量的重叠检查,提供更精确的结果而非 TooHard。可关注后续版本中是否有针对符号重叠的增强。