PyTorch中的重现性和性能

Bra*_*roy 5 python performance deterministic deep-learning pytorch

文档指出:

确定性模式可能会对性能产生影响,具体取决于您的模型。

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

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

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)
Run Code Online (Sandbox Code Playgroud)

And*_*uib 12

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


关于你的片段,我做了精确的播种,它在 100 多个 DL 实验中一直运行良好(在可重复性方面)。