我正在尝试重构应用程序,并通过比较输出对旧版本进行测试。在使用相同输入的第一个pytorch转换层中,使用CPU时我得到相同的输出。但是,在GPU上使用cuda时,某些单元上的输出张量在小数点后第五位不同。有什么办法可以消除这种差异?我已经在设置:
random.seed(seed)
np.random.seed(seed)
torch.manual_seed(seed)
torch.cuda.manual_seed(seed)
torch.backends.cudnn.deterministic = True
答案 0 :(得分:2)
答案 1 :(得分:0)
使用torch.backends.cudnn.benchmark = False
答案 2 :(得分:0)
如果要在Pytorch中获得确定性结果,请参考此功能。
def set_deterministic(seed=42):
random.seed(seed)
np.random.seed(seed)
torch.manual_seed(seed)
torch.cuda.manual_seed(seed)
torch.cuda.manual_seed_all(seed)
torch.backends.cudnn.deterministic = True
torch.backends.cudnn.benchmark = False
torch.backends.cudnn.enabled = False
seed = 42 # any number
set_deterministic(seed=seed)
但是,torch.backends.cudnn.enabled = False选项可能会降低代码速度,因为它会禁用cudnn。