viable/strict/1787382165: support min, max in maybe mark dynamic (#194091)
PyTorch 在 viable/strict/1787382165 和 trunk/f7dfbdd7e57230ed792c4d30b955d125436a2ab8 中为 torch._dynamo.maybe_mark_dynamic 添加了 min 和 max 关键字参数,允许标记动态维度并给出初始范围,但范围不会强制维度保持动态。范围是起点,守卫可能缩小它;超出范围的提示会引发 ConstraintViolationError。修复了 min 或 max 单独使用时的崩溃、AOTAutograd 传播动态索引时的 IndexError,以及更改 min/max 时重用缓存图的问题。
发展脉络
- 首次出现viable/strict/1787382165: support min, max in maybe mark dynamic (#194091)PyTorch Core
- 行业反馈trunk/f7dfbdd7e57230ed792c4d30b955d125436a2ab8: support min, max in maybe mark dynamic (#194091)PyTorch Core
- 行业反馈viable/strict/1787428363: Revert "support min, max in maybe mark dynamic (#194091)"PyTorch Core
- 当前判断PyTorch 持续改进其动态形状支持,这对于处理可变输入形状的模型(如 NLP 和推荐系统)至关重要。此功能可能减少不必要的重新编译,提高推理性能,并简化开发者的动态形状处理。Agent Pulse · 分析
PyTorch 在 2026-08-22 发布的 viable/strict/1787382165 和 trunk/f7dfbdd7e57230ed792c4d30b955d125436a2ab8 中,为 torch._dynamo.maybe_mark_dynamic 添加了 min 和 max 关键字参数。该功能允许用户标记一个维度为动态,并提供一个初始范围(例如 torch._dynamo.maybe_mark_dynamic(x, 0, min=2, max=5)),但该范围不会强制维度保持动态,守卫可以缩小它。如果输入提示超出声明范围,会引发 ConstraintViolationError,且范围不会扩大以适应输入。此更改还修复了多个 bug:单独使用 min 或 max 时崩溃(AssertionError),缺失的边界现在默认为 2 和 int_oo;AOTAutograd 传播动态索引时在带有其他维度范围的张量上引发 IndexError;更改 min/max 会导致重新编译而不是重用缓存图;部分范围不再崩溃。此外,对同一维度同时使用 mark_dynamic 和 maybe_mark_dynamic 现在会引发错误。
此更改增强了 torch._dynamo 的动态形状处理能力。通过允许为动态维度指定初始范围,编译器可以在保持灵活性的同时进行更精确的优化。范围作为起点,守卫可以缩小它,但不会扩大,这有助于在编译时进行更严格的形状推断。修复的 bug 表明之前对部分边界和传播场景的处理存在缺陷,现在这些情况得到正确处理。
PyTorch 持续改进其动态形状支持,这对于处理可变输入形状的模型(如 NLP 和推荐系统)至关重要。此功能可能减少不必要的重新编译,提高推理性能,并简化开发者的动态形状处理。
对于使用 PyTorch 进行模型部署的企业,此改进可能降低推理延迟和计算成本,尤其是对于输入形状多变的场景。它也可能减少开发者在处理动态形状时的工作量。
未来,PyTorch 可能进一步优化动态形状的编译策略,例如更智能的范围推断或更高效的守卫生成。开发者可以期待更少的重新编译和更好的性能。