PyTorch 中的再现性和性能

Reproducibility and performance in PyTorch

documentation 状态:

Deterministic mode can have a performance impact, depending on your model.

我的问题是,这里的性能是什么意思。处理速度或模型质量(即最小损失)?换句话说,当设置手动种子并使模型以确定性方式执行时,这是否会导致更长的训练时间直到找到最小损失,或者最小损失是否比模型不确定时更糟?

为了完整起见,我通过设置所有这些属性手动使模型具有确定性:

def set_seed(seed):
    torch.manual_seed(seed)
    torch.cuda.manual_seed_all(seed)
    torch.backends.cudnn.deterministic = True
    torch.backends.cudnn.benchmark = False
    np.random.seed(seed)
    random.seed(seed)
    os.environ['PYTHONHASHSEED'] = str(seed)

"performance" 在此上下文中指的是 run-time

性能指的是运行时间; CuDNN 有几种实现方式,当 cudnn.deterministic 设置为 true 时,您告诉 CuDNN 您只需要确定性实现(或者我们认为它们是什么)。简而言之,当您执行此操作时,您应该期望在 CPU 或 相同系统 上的 GPU 上获得 相同的结果当输入 相同的输入 时。为什么会影响性能? CuDNN 使用启发式方法来选择实现。所以,这实际上取决于您的模型,CuDNN 的行为方式;选择它是确定性的可能会影响 运行 时间,因为它们可能是,比方说,在 运行ning 的同一时间选择它们的更快方法。


关于您的代码片段,我进行了精确的播种,它在 100 多个 DL 实验中一直运行良好(就重现性而言)。