Pytorch學習0.01:cudnn.benchmark= True的設置


設置這個 flag 可以讓內置的 cuDNN 的 auto-tuner 自動尋找最適合當前配置的高效算法,來達到優化運行效率的問題。

應該遵循以下准則:

如果網絡的輸入數據維度或類型上變化不大,也就是每次訓練的圖像尺寸都是一樣的時候,設置 torch.backends.cudnn.benchmark = true 可以增加運行效率;
如果網絡的輸入數據在每次 iteration 都變化的話,會導致 cnDNN 每次都會去尋找一遍最優配置,這樣反而會降低運行效率。

torch.backends.cudnn.benchmark = true

不知道為什么好多人寫dropout和batchnormalization,這個只要稍微理解他們的原理就明白肯定要對train的值進行判斷的,train值的功能目前也僅限於這兩個層,對於別的層來說,train(True)和train(False)是沒有任何區別的。而輸入變量的volatile這個確實是個小坑,不光能加快速度,還可以大大減小內存開銷。

有幾條小技巧分享一下:

  1. torch.backends.cudnn.benchmark = True 在程序剛開始加這條語句可以提升一點訓練速度,沒什么額外開銷。我一般都會加有時候可能是因為每次迭代都會引入點臨時變量,會導致訓練速度越來越慢,基本呈線性增長。

2.開發人員還不清楚原因,但如果周期性的使用torch.cuda.empty_cache()的話就可以解決這個問題。這個命令是清除沒用的臨時變量的。torchvision.transforms里的各種坑,等有空再說。

作者:功長真金
鏈接:https://www.zhihu.com/question/67209417/answer/303290223
來源:知乎


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM