参考博客:
https://blog.csdn.net/weixin_43402775/article/details/114319493
https://blog.csdn.net/Ibelievesunshine/article/details/99471258
代码形式如下:
torch.backends.cudnn.benchmark = True
作用:
设置 torch.backends.cudnn.benchmark=True 将会让程序在开始时花费一点额外时间,为整个网络的每个卷积层搜索最适合它的卷积实现算法,进而实现网络的加速。
设置这个 flag 可以让内置的 cuDNN 的 auto-tuner 自动寻找最适合当前配置的高效算法,来达到优化运行效率的问题
注意事项1:
适用场景是网络结构固定(不是动态变化的),网络的输入形状(包括 batch size,图片大小,输入的通道)是不变的,其实也就是一般情况下都比较适用。反之,如果卷积层的设置一直变化,网络的输入数据在每次 iteration 都变化的话,会导致 cnDNN 每次都会去寻找一遍最优配置,这样反而会降低运行效率。
注意事项2:
Benchmark模式会提升计算速度,但是由于计算中有随机性,每次网络前馈结果略有差异。如果想要避免这种结果波动,设置:
torch.backends.cudnn.deterministic = True
设置为True,说明设置为使用使用非确定性算法:
torch.backends.cudnn.enabled = True
整体使用:
在模型的开始之前添加:
import torch.backends.cudnn as cudnn
cudnn.deterministic = True
cudnn.benchmark = True
torch.backends.cudnn.enabled = True