torch.backends.cudnn.deterministic与torch.backends.cudnn.benchmark 代码解释
这两行代码是用来调整PyTorch中使用的CuDNN(NVIDIA的CUDA深度学习加速库)的行为,以下行为二选一
1. 保证确定性
# 保证确定性
# 当在CuDNN后端运行时,需要进一步设置两个选项以【确保确定性】
torch.backends.cudnn.deterministic = True
# 关闭CuDNN的自动优化,保证每次运行结果一致
torch.backends.cudnn.benchmark = False
2.保证计算效率
- torch.backends.cudnn.deterministic = False 表示允许CuDNN使用非确定性的算法来增加训练速度。在默认的非确定性模式下,多次执行相同的程序可能会因为内部并行计算的差异而产生略微不同的结果。这对于调试和需要结果完全可复现的场景不适用,但对于追求最高训练效率的情况是有益的。
- torch.backends.cudnn.benchmark = True 则开启了一种性能优化模式,CuDNN会在首次运行时对卷积层等操作的不同实现进行 benchmarking(性能测试),并选择最快的一个实现方案。这意味着后续具有相同层结构的操作将使用这个最优方案,从而提高运行速度。注意,这在模型初次运行时会稍微增加一些耗时,但之后的迭代将享受加速效果。此设置对于训练相对固定的网络结构特别有帮助,可以提升训练效率,但可能引入不可复现性,因为它依赖于硬件状态和首次运行时的数据。
# 保证计算效率
# 允许CuDNN使用非确定性的算法来增加训练速度,对于调试和需要结果完全可复现的场景不适用,但对于追求最高训练效率的情况是有益的
torch.backends.cudnn.deterministic = False
# 在每个卷积操作中自动寻找最适合当前配置的高效算法,从而提高计算速度【提高计算效率】
# 开启了一种性能优化模式,CuDNN会在首次运行时对卷积层等操作的不同实现进行 benchmarking(性能测试),并选择最快的一个实现方案
torch.backends.cudnn.benchmark = True