pytorch之torch.backends.cudnn.benchmark=True——使用 GPU 来加速网络的训练
文章目錄
- 簡介
- 適用場(chǎng)景
簡介
import torch torch.backends.cudnn.enabled = True torch.backend.cudnn.benchmark=TruecuDNN使用非確定性算法,并且可以使用torch.backends.cudnn.enabled = False來進(jìn)行禁用
如果設(shè)置為torch.backends.cudnn.enabled =True,說明設(shè)置為使用使用非確定性算法
然后再設(shè)置:
torch.backends.cudnn.benchmark = True
所以我們經(jīng)常看見在代碼開始出兩者同時(shí)設(shè)置:
torch.backends.cudnn.enabled = True torch.backends.cudnn.benchmark = True適用場(chǎng)景
大部分情況下:
設(shè)置這個(gè) flag 可以讓內(nèi)置的 cuDNN 的 auto-tuner 自動(dòng)尋找最適合當(dāng)前配置的高效算法,來達(dá)到優(yōu)化運(yùn)行效率的問題。
設(shè)置?torch.backends.cudnn.benchmark=True?將會(huì)讓程序在開始時(shí)花費(fèi)一點(diǎn)額外時(shí)間,為整個(gè)網(wǎng)絡(luò)的每個(gè)卷積層搜索最適合它的卷積實(shí)現(xiàn)算法,進(jìn)而實(shí)現(xiàn)網(wǎng)絡(luò)的加速。
一般來講,應(yīng)該遵循以下準(zhǔn)則:
如果網(wǎng)絡(luò)的輸入數(shù)據(jù)維度或類型上變化不大,網(wǎng)絡(luò)結(jié)構(gòu)固定(不是動(dòng)態(tài)變化的),網(wǎng)絡(luò)的輸入形狀(包括 batch size,圖片大小尺寸,輸入的通道)是不變的,設(shè)置 torch.backends.cudnn.benchmark = true 可以增加運(yùn)行效率;
benchmark模式會(huì)提升計(jì)算速度,但是由于計(jì)算中有隨機(jī)性,每次網(wǎng)絡(luò)前饋結(jié)果略有差異。如果想要避免這種結(jié)果波動(dòng),設(shè)置:torch.backends.cudnn.deterministic = True保證實(shí)驗(yàn)的可重復(fù)性。
反之,如果網(wǎng)絡(luò)的輸入數(shù)據(jù)在每次 iteration 都變化的話,(例如,卷積層的設(shè)置一直變化、某些層僅在滿足某些條件時(shí)才被“激活”,或者循環(huán)中的層可以重復(fù)不同的次數(shù)),會(huì)導(dǎo)致 cnDNN 每次都會(huì)去尋找一遍最優(yōu)配置,這樣反而會(huì)耗費(fèi)更多的時(shí)間,降低運(yùn)行效率。
總結(jié)
以上是生活随笔為你收集整理的pytorch之torch.backends.cudnn.benchmark=True——使用 GPU 来加速网络的训练的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 取消电脑默认u盘启动怎么办 电脑开机不想
- 下一篇: 【pytorch】model.train