viable/strict/1787248611: fix-193938-align-randn bug (#194118)
PyTorch 修复了当 torch._inductor.config.align_random_eager=True 时,CUDA 上 torch.randn 和 torch.randn_like 被错误地通过 ops.rand_eager 降级的问题。该修复将 eager-aligned 降级限制为 mode == "rand",使 randn 和 randn_like 继续使用现有的 normal random 降级路径。回归测试验证了生成的代码不使用 triton_helpers.rand_eager_kernel,且输出具有标准正态特征。
Development
- First Reportviable/strict/1787248611: fix-193938-align-randn bug (#194118)PyTorch Core
- Current Assessment此修复表明 PyTorch 团队持续关注编译器的正确性,特别是随机数生成等数值敏感操作。对于依赖 PyTorch 进行科学计算或机器学习的用户,此类修复有助于避免因编译器优化导致的数值错误。这也反映了开源框架在快速迭代中需要严格测试来保证质量。Agent Pulse · analysis
PyTorch 在 2026 年 8 月 20 日发布了一个修复,针对 issue #193938。当启用 torch._inductor.config.align_random_eager=True 时,编译的 torch.randn 和 torch.randn_like 在 CUDA 上被错误地通过 ops.rand_eager 降级,该操作产生均匀分布 [0,1) 的值。FX 随机替换仅对 rand 使用 eager-aligned seed/offset 路径,但 inductor_random() 在启用 align_random_eager 时对所有 CUDA 随机模式应用了相应的降级。此更改将 eager-aligned 降级限制为 mode == "rand",使 randn 和 randn_like 继续通过现有的 normal random 降级路径,而不是均匀的 rand_eager 内核。回归测试覆盖了 torch.randn 和 torch.randn_like 在 align_random_eager=True 下的情况,并验证生成的代码不使用 triton_helpers.rand_eager_kernel,且输出具有标准正态特征。测试计划包括本地编译检查,但 CUDA/Inductor 运行时测试未在本地运行,因为环境没有 CUDA GPU。
此修复揭示了 PyTorch Inductor 中随机数生成降级路径的一个微妙问题:当启用 align_random_eager 时,所有 CUDA 随机模式都被错误地映射到均匀分布内核,导致 randn 产生错误分布。修复通过限制 eager-aligned 降级仅适用于 rand 模式,确保 randn 和 randn_like 使用正确的 normal 分布内核。这提示在编译器优化中,模式匹配必须精确,否则会引入静默错误。
此修复表明 PyTorch 团队持续关注编译器的正确性,特别是随机数生成等数值敏感操作。对于依赖 PyTorch 进行科学计算或机器学习的用户,此类修复有助于避免因编译器优化导致的数值错误。这也反映了开源框架在快速迭代中需要严格测试来保证质量。
此修复提高了 PyTorch 编译器的可靠性,减少了因随机数生成错误导致的模型训练或推理结果偏差。对于使用 PyTorch 的生产环境,这有助于避免潜在的数值错误,降低调试成本,提升模型质量。
未来,PyTorch 可能会进一步改进 align_random_eager 的实现,确保所有随机操作在 eager 和编译模式下行为一致。也可能增加更多针对随机数生成的测试,以覆盖更多模式和硬件。