torch.backends.cudnn.benchmark有什么用?
针对网络模型固定、输入参数固定的场景,将上述变量设置为True可以增加训练效率。
cuDNN是英伟达为深度神经网络(DNN)设计的GPU加速库,针对卷积等操作进行了很多优化,Pytorch等深度学习框架会使用cuDNN加速。
卷积有多种实现方式,每种卷积算法都有特定的优势。一种简单的优化方式是针对神经网络中不同的层使用不同的卷积实现方式。决定了每层最快的实现方式后,在运行整个网络就会提升算法效率。
将上面的值设置为True,Pytorch就会针对模型的卷积层进行预先的优化,即针对每一层卷积都寻找最快的实现算法,进而提升整体效率。如此,便可在模型启动的时候额外增加一点预处理时间,而大幅度减少整体训练时间。
影响卷积运算速度的因素有
- 卷积层本身的参数,如卷积核尺寸,步长,填充,输出通道个数。
- 输入的参数,如输入的通道数,宽,高等
因此如果上面影响卷积速度的参数频繁的变化,则将torch.backends.cudnn.benchmark设置为True就不是明智的选择。因为在每次变化之后,算法都会重新预处理,预处理如果做太多次,也是很浪费时间的。
大部分的卷积神经网络的模型卷积层参数和输入参数都是固定的,因此可以利用上述方式提高效率。
代码加在哪里?
torch.backends.cudnn.benchmark=True
这行代码加在开头就好
参考
https://zhuanlan.zhihu.com/p/161534171