chu*_*eok 10 deterministic reproducible-research pytorch
我的网络包括“torch.nn.MaxPool3d”,根据 PyTorch 文档(版本 1.7 - https://pytorch.org/docs/stable/ generated/torch.set_definistic.html#torch),当 cudnn 确定性标志打开时,它会抛出运行时错误.set_确定性),但是,当我在代码开头插入代码“torch.backends.cudnn.确定性 = True”时,没有运行时错误。为什么该代码不抛出运行时错误?我想知道该代码是否能保证我的训练过程的确定性计算。
小智 16
torch.backends.cudnn.deterministic=True 仅适用于 CUDA 卷积运算,不适用于其他操作。因此,不,它不能保证您的训练过程是确定性的,因为您也在使用torch.nn.MaxPool3d,其后向函数对于 CUDA 来说是不确定的。
torch.set_deterministic()另一方面,影响此处列出的所有正常非确定性操作(请注意,已在 1.8 中set_deterministic重命名为): https://pytorch.org/docs/stable/ generated/torch.use_definistic_algorithms.html?highlight=use_definistic# torch.use_确定性_算法use_deterministic_algorithms
正如文档所述,某些列出的操作没有确定性的实现。所以如果torch.use_deterministic_algorithms(True)设置了,他们会抛出错误。
如果您需要使用像 之类的非确定性操作torch.nn.MaxPool3d,那么目前您的训练过程无法实现确定性,除非您自己编写自定义确定性实现。或者您可以打开一个 GitHub 问题,请求确定性实现:https://github.com/pytorch/pytorch/issues
此外,您可能想查看此页面:https://pytorch.org/docs/stable/notes/randomness.html