You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何设置所有随机种子后torch.randn仍无法复现结果?

解决torch.randn(1)结果无法复现的问题

关键修复步骤

  • 每次生成随机数前必须重置种子
    Jupyter Notebook里单元格的执行顺序容易打乱,或者多次运行后随机状态已经被修改。别只设置一次种子,要在每次调用torch.randn(1)之前重新初始化所有种子。示例代码:

    seed = 42
    # 每次生成随机数前都跑这段初始化
    torch.manual_seed(seed)
    torch.cuda.manual_seed_all(seed)
    np.random.seed(seed)
    torch.backends.cudnn.deterministic = True
    torch.use_deterministic_algorithms(True)
    torch.backends.cudnn.benchmark = False
    
    # 生成并打印随机数
    print(torch.randn(1))
    
  • 排查CUDA环境的确定性配置
    哪怕你生成的是CPU张量,CUDA环境的设置也可能影响随机性。确保torch.use_deterministic_algorithms(True)已经开启,同时注意别让其他后台代码偷偷修改随机状态。

  • 先在CPU上验证(排除CUDA干扰)
    可以先强制用CPU生成随机数,看看能不能复现:

    seed = 42
    torch.manual_seed(seed)
    # 指定CPU设备
    print(torch.randn(1, device='cpu'))
    

    如果CPU上能固定输出,说明问题出在CUDA状态管理,这时候要保证每次运行都彻底重置CUDA的随机状态。

  • Jupyter环境的特殊处理
    Jupyter内核会保留之前的运行状态,要是你之前跑过其他带随机数的代码,内核里的随机状态已经变了。可以试试:

    • 重启Jupyter内核,只运行包含种子设置和torch.randn(1)的单元格
    • 别把种子设置和随机数调用拆在不同单元格,尽量放在同一个单元格里执行

验证效果

按上面的步骤来,seed设为42时,同一PyTorch版本下,CPU上的输出会固定成tensor([0.3367])(不同版本数值可能略有差异,但同一版本下绝对固定),CUDA设备上的输出也会对应固定值。

内容的提问来源于stack exchange,提问作者amew

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 07:13:22