Python 有可能使cuda成为确定性的吗?

Python 有可能使cuda成为确定性的吗?,python,gpu,pytorch,Python,Gpu,Pytorch,我试图重构一个应用程序,并通过比较输出来测试新版本和旧版本。在使用相同输入的第一个pytorch conv层,当使用CPU时,我得到相同的输出。但是,在GPU上使用cuda时,某些单元格的输出张量在小数点后5位不同。有没有办法消除这种差异?我已经准备好了: random.seed(seed) np.random.seed(seed) torch.manual_seed(seed) torch.cuda.manual_seed(seed) torch.backends.cudnn.determin

我试图重构一个应用程序,并通过比较输出来测试新版本和旧版本。在使用相同输入的第一个pytorch conv层,当使用CPU时,我得到相同的输出。但是,在GPU上使用cuda时,某些单元格的输出张量在小数点后5位不同。有没有办法消除这种差异?我已经准备好了:

random.seed(seed)
np.random.seed(seed)
torch.manual_seed(seed)
torch.cuda.manual_seed(seed)
torch.backends.cudnn.deterministic = True

即使种子设置相等,cpu和gpu也不能产生相同的结果。
请参阅和。

如果您想在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