编译函数中的 [dynamo] `random.seed ()' 在第一个(编译)调用中被忽略——来自不同的RNG状态的第一个调用返回值
作者: cuiliaomei-beep创建于 2026年9月15日更新于 2026年9月17日
标签triagedmodule: correctness (silent)oncall: pt2module: dynamobot-triaged
描述错误:`random.seed(k)` 在编译函数内部不起作用,在第一次调用时,eager 返回随机值,而编译函数则在编译调用时返回未随机化流中的值,在第二次调用时返回随机化值(在 torch 2.14.0 和 nightly 版本中,在 Windows 和 Linux 上)。使用单次调用检查可重现性的用户会发现不一致,在重新运行时不一致消失,这很容易被误认为是不稳定性。由于 seed 更新了 Dynamo 的跟踪时间复制的 RNG,而第一次调用中返回的值来自于活动的 RNG,而未在编译调用中重新随机化,因此结果取决于调用是编译还是重放。当编译函数调用 `random.seed(k)`,然后调用 `random.random()` / `randint` / `randrange` / `uniform` 时,编译函数的 **第一个** 调用返回的值不来自于随机化流;从第二个调用开始,值是正确的。eager 每次都返回随机化值。
内容来源: pytorch/pytorch