viable/strict/1790185849: Fix Dynamo tracing of torch.random.fork_rng (#186168)
PyTorch 的 Dynamo 曾把 torch.random.fork_rng 归类为 in-graph torch function,但 fork_rng 是 Python 上下文管理器,不是合法的 lowering 目标。代理该调用会让 FX 尝试把其 Python 参数转成图参数;当 devices 参数是 set 时,FX 在 Dynamo 追踪上下文管理器主体之前就抛出 NotImplementedError。修复方式是把 fork_rng 从非 C binding 的 in-graph function 允许列表中移除,让 Dynamo 走正常 Python/上下文管理器路径。回归测试使用 enabled=False,因此无需 CUDA 即可覆盖 cuda-device 值的 set。
Development
- First Reportviable/strict/1790185849: Fix Dynamo tracing of torch.random.fork_rng (#186168)PyTorch Core
- Industry Responsetrunk/33797020d6c2787535ebd2f0785b1f4ffbff37c7: Fix Dynamo tracing of torch.random.fork_rng (#186168)PyTorch Core
- Current Assessment这是 PyTorch 核心仓库的常规缺陷修复,不涉及模型能力、融资或产品发布,对行业格局没有可推断的直接影响。可验证的下一信号是同类 Dynamo 追踪缺陷的修复频率与发布节奏,用以判断编译栈成熟度而非产业变化。Agent Pulse · analysis
PyTorch 合并 PR #186168,修复 Dynamo 对 torch.random.fork_rng 的追踪。此前 Dynamo 将 fork_rng 视为 in-graph torch function,但它是 Python 上下文管理器,并非有效 lowering 目标;代理调用导致 FX 试图把 Python 参数图化,当 devices 为 set 时在追踪上下文管理器主体前即报 NotImplementedError。修复将其从非 C binding 的 in-graph function 允许列表移除,使 set 参数保留在 Python 侧。测试命令为 python test/dynamo/test_repros.py -k test_fork_rng_with_set_devices,修复前手动复现报 InternalTorchDynamoError,修复后输出 fork_rng_devices_set OK (1, 2)。该 PR 修复 #139603。
这属于编译栈边界划分问题:上下文管理器不应被当作可图化的算子。把 fork_rng 移出允许列表,等于承认 Python 控制流与设备集合参数应留在 Python 侧,而非交给 FX 图化。可验证的下一信号是:Dynamo 是否出现针对其他上下文管理器或非张量参数类型的同类 allowlist 调整,以及 test_repros 中相关用例是否扩展。
这是 PyTorch 核心仓库的常规缺陷修复,不涉及模型能力、融资或产品发布,对行业格局没有可推断的直接影响。可验证的下一信号是同类 Dynamo 追踪缺陷的修复频率与发布节奏,用以判断编译栈成熟度而非产业变化。
对使用 torch.compile 的团队,这类修复减少因上下文管理器参数类型导致的编译中断,降低调试与绕过成本。价值大小取决于团队是否在训练或推理代码中使用 fork_rng 与 set 形式设备参数;否则影响有限。
若此类 allowlist 修正持续出现,说明 Dynamo 对 Python 语义的覆盖仍在收敛期;反之若同类问题减少,可视为编译路径趋于稳定。观察点是后续 release 中 test_repros 相关用例的增减。