訓練中torch.backends.cudnn.benchmark的使用


訓練中torch.backends.cudnn.benchmark的使用

一般將torch.backends.cudnn.benchmark設為True就可以大大提升卷積神經網絡的運行速度

原因:將會讓程序在開始時花費一點額外時間,為整個網絡的每個卷積層搜索最適合它的卷積實現算法,進而實現網絡的加速

適用:適用場景是網絡結構固定(不是動態變化的),網絡的輸入形狀(包括 batch size,圖片大小,輸入的通道)是不變的

背景:

大多數主流深度學習框架都支持 cuDNN這個GPU加速庫,來為訓練加速。而卷積網絡的具體計算方法又有很多,所以使用torch.backends.cudnn.benchmark就可以在 PyTorch 中對模型里的卷積層進行預先的優化,也就是在每一個卷積層中測試 cuDNN 提供的所有卷積實現算法,然后選擇最快的那個。這樣在模型啟動的時候,只要額外多花一點點預處理時間,就可以較大幅度地減少訓練時間。

影響卷積運行的因素:

為什么我們可以提前選擇每層的算法,即使每次我們送入網絡訓練的圖片是不一樣的?即每次網絡的輸入都是變化的,那么我怎么確保提前選出來的最優算法同樣也適用於這個輸入呢?原因就是,對於給定輸入來說,其具體值的大小是不影響卷積的運行時間的,只有其尺寸才會影響。舉例來說,我們只要固定輸入大小都是 (8, 64, 224, 224),即 batch_size 為 8,輸入的通道為 64,寬和高為 224,那么卷積層的運行時間都是幾乎不變的,無論其中每個像素具體的值是 0.1 還是 1000.0。

所以當網絡的模型不會一直發生變化,且輸入的大小不會一直變化的話就可以使用torch.backends.cudnn.benchmark=True來加速訓練

參考:https://zhuanlan.zhihu.com/p/73711222


免責聲明!

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



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