torch.backends.cudnn.benchmark
在训练DL model的时候,pytrorch框架中会经常使用cudnn.benchmark=Ture来加速网络的训练,那为什么pytorch官方不设置默认开启而是需要人为手动开启呢?
个人理解
设置torch.backends.cudnn.benchmark=True 会让网络在开始之前花费一点额外的时间,为整个网络的每个卷积层搜索最适合的卷积实现算法,进而实现网络的加速。适用于网络结构固定的(NAS就不适用了!!),这是因为实现神经网络中卷积、池化有很多种实现方法,最简单地方法去实现卷积操作肯定是堆叠for了,但是这种过于无脑,时间复杂度太高了,据不完全统计实现卷积的方法有80余种!!!
Pytorch太强了
在网络训练之前,就先测试那种卷积实现方法最快最适合当前设备,决定好每层最快的算法之后,再运行整个网络,这样的效率就会提升很多很多!但是前提得是,网络结构固定!!!不然就像NAS一直频繁变换网络结构,导致torch一直在找最优的卷积实现方法,得不偿失!这就是为什么要人为手动开启了!