https://pytorch.org/docs/stable/notes/randomness.html
不同的卡,不同平台 不能保证实验结果可重现,即使是相同的随机数种子
为了保证实验结果的确定性,需要采取几个步骤:
PyTorch中涉及两个伪随机数生成器,您需要手动设置随机数种子以使运行可重现。此外,您应该确保您的代码依赖于使用随机数的所有其他库也使用固定种子。
PyTorch
import torch
torch.manual_seed(0)
有一些PyTorch函数使用CUDA函数,这些函数可能是非确定性的来源。一类这样的CUDA函数是原子操作,特别是atomicAdd
,其中对于相同值的并行加法的顺序是未确定的,并且对于浮点变量,是结果中的变化源。在前向中使用atomicAdd
的PyTorch函数包括,。
许多操作具有向后使用atomicAdd
,特别是许多形式的池,填充和采样。目前没有简单的方法来避免这些功能中的非确定性。
CuDNN
在CuDNN后端运行时,必须设置另外两个选项:
torch.backends.cudnn.deterministic = True
torch.backends.cudnn.benchmark = False
确定性模式可能会对性能产生影响,具体取决于型号
NumPy
import numpy as np
np.random.seed(0)