PyTorch 的重现性问题

问题描述 投票:0回答:2

我正在使用相同的种子运行一个脚本,我看到结果在连续运行中重现,但不知何故,使用相同的种子运行相同的脚本会在几天后更改输出。我只得到了短期的可重复性,这很奇怪。为了重现性,我的脚本已经包含以下语句:

torch.backends.cudnn.benchmark = False
torch.backends.cudnn.deterministic = True
torch.use_deterministic_algorithms(True)

random.seed(args.seed)
np.random.seed(args.seed)
torch.manual_seed(args.seed)

我还检查了 RandomSampler 为训练数据加载器创建的实例 id 序列,该序列是在运行期间维护的。还要在数据加载器中设置 num_workers=0。什么可能导致输出发生变化?

python nlp pytorch seed
2个回答
1
投票

PyTorch 实际上并不完全确定。这意味着,如果有足够的时间,使用设定的种子,一些 PyTorch 操作的行为将会有所不同,并且与之前的运行有所不同。这是由于算法、CUDA 和反向传播优化所致。

这是一本好书:https://pytorch.org/docs/stable/notes/randomness.html

上页列出了哪些操作是不确定的。 通常不鼓励您禁用它们的使用,但可以通过以下方式完成:

torch.use_deterministic_algorithms(mode=True)

这也可能会禁用可以使用的操作。


0
投票
torch.cuda.manual_seed(args.seed)
torch.cuda.manual_seed_all(args.seed)

尝试将这些添加到您当前的再现性设置中。

© www.soinside.com 2019 - 2024. All rights reserved.