代码之家  ›  专栏  ›  技术社区  ›  Bram Vanroy

PyTorch的再现性和性能

  •  1
  • Bram Vanroy  · 技术社区  · 5 年前

    这个 documentation

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

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

    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)
    
    0 回复  |  直到 5 年前
        1
  •  9
  •   ndrwnaguib Nikkolai Fernandez    5 年前

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


    关于你的代码片段,我做的是精确的种子,它在100+DL实验中一直工作良好(在再现性方面)。

        2
  •  1
  •   Shai    5 年前

    这里的“性能”指的是运行时