PyTorch中的可重复性和性能

19

文档中提到:

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

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

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

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)
2个回答

12

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


关于您的代码段,我采用完全相同的种子,已经在100多个深度学习实验中获得了良好的可重复性结果。


2
在这个上下文中,“performance”指的是运行时间。最初的回答是“performance”。

4
你有这方面的资料来源吗?你怎么确定这个呢? - Bram Vanroy
2
当启用不同训练会话之间的随机更改时,您显然不会得到完全相同的权重,因此也不会得到完全相同的损失/准确性。但是,这些差异微不足道(例如,请参见此处)。另一方面,要求完全相同的数值结果需要以完全相同的方式进行训练过程。这需要时间:固定并行计算的顺序不允许您享受负载平衡等优势。因此,在准确性/损失方面,您大致处于相同的位置,但需要更长的时间。 - Shai
2
有趣的是,这里提出了随机种子可能会产生巨大影响的说法。在这里,您将看到具有不同种子的相同模型具有10%的准确度差异。https://www.linkedin.com/posts/nlp-town_sentimentanalysis-camembert-xlm-activity-6605379961111007232-KJy3 - Bram Vanroy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接