PyTorch的可重复性问题

4

我正在运行一个具有相同种子的脚本,并且我发现连续运行的结果是重复的,但是在几天之后,使用相同的种子运行相同的脚本会改变输出结果。我只得到了短期的可重复性,这很奇怪。为了实现可重复性,我的脚本已经包含以下语句:

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)

我还检查了训练Dataloader使用的RandomSampler创建的实例ID序列,该序列在多次运行间是保持不变的。同时在数据加载器中设置num_workers=0。导致输出改变的可能原因是什么?
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)

尝试将这些添加到您当前的可重复性设置中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接