有可能使cuda具有确定性吗?

时间:2018-10-18 12:51:16

标签: python gpu pytorch

我正在尝试重构应用程序,并通过比较输出对旧版本进行测试。在使用相同输入的第一个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

3 个答案:

答案 0 :(得分:2)

即使将种子设置为相等,

cpu和gpu也不会产生相同的结果。 请参阅thisthis

答案 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。