torch.backends.cudnn.benchmark
torch.backends.cudnn.benchmark
是一个 PyTorch 配置选项,用于控制是否使用 cuDNN 的自动调优器来为当前的 GPU 和网络结构选择最快的卷积算法。cuDNN 是一个 GPU-accelerated 库,用于深度神经网络中的原始操作。
当 torch.backends.cudnn.benchmark
设置为 True
时,PyTorch 将会为每个新的网络配置运行一个基准测试,以找出最快的卷积算法。这可以显著提高执行速度,尤其是对于大型网络和/或在多次运行相同网络的情况下。然而,这也可能增加第一次运行网络的时间,因为需要进行基准测试。
在大多数情况下,将 torch.backends.cudnn.benchmark
设置为 True
是有益的。但是,如果你的网络结构在每次运行时都在变化,或者你的输入尺寸在每次运行时都在变化,那么基准测试的结果可能就不会那么有用了,这种情况下可能将其设置为 False
会更为合适。
注意:在某些情况下,尽管 torch.backends.cudnn.benchmark
设置为 True
,但 cuDNN 可能仍然无法找到比默认算法更快的算法。这可能是因为你的网络或输入尺寸太小,以至于无法从算法优化中获益。在这种情况下,将 torch.backends.cudnn.benchmark
设置为 False
可能会更好。
torch.backends.cudnn.deterministic = True
当 torch.backends.cudnn.deterministic
设置为 True
时,PyTorch 会使用 cuDNN 的确定性卷积算法。这意味着每次运行相同的输入和网络结构时,卷积操作的结果都会是一样的,确保了计算的确定性。
这个设置在某些情况下是很有用的,比如在调试模型或者需要可重复的实验结果时。然而,它可能会牺牲一些执行速度,因为确定性卷积算法可能不是最快的。
如果你不需要确保每次运行的结果是完全一样的,或者更关心执行速度,那么可以将 torch.backends.cudnn.deterministic
设置为 False
,这样 PyTorch 就可以使用可能更快的非确定性卷积算法。
注意:即使 torch.backends.cudnn.deterministic
设置为 True
,如果你的网络或输入数据在每次运行时都在变化,那么整体的网络输出仍然可能会有所不同。
你可以通过以下代码来设置这个选项:
import torch
torch.backends.cudnn.deterministic = True
这样设置之后,每次使用相同的网络结构和输入数据运行代码时,你都应该得到相同的结果。这对于确保实验的一致性和可重复性是有帮助的。