GPU顯存老是溢出的問題

最近在跑實驗的時候,遇到模型訓練到一定step,GPU memory溢出的問題,剛開始想調batch size,從96->48->24,一方面還是會溢出,另一方面訓練的時間會成倍數地增加,目前用的是6張GPU進行訓練,即DUDA_VISIABLE_DEVICES = 0,1,2,3,4,5

解決思路:
第一個問題是爲什麼模型會跑着跑着中途顯存溢出?

顯存佔用主要存在於數據輸入,模型參數,中間變量以及pytorch自身消耗,模型參數根據不同的優化器可能會有倍數增加,因爲涉及到梯度回傳,比如adam最終內存消耗一般是參數的4倍。

關於顯存溢出:https://www.jianshu.com/p/28581e8ee6c7
顯存去哪兒了?http://www.aibbt.com/a/44242.html?from=groupmessage

監測顯存變化:watch -n 1 nvidia-smi

優化方式
(1)model裏面不過多引入中間變量
(2)臨時變量及時del
(3)小心自己模型裏面寫的for循環,對於不依賴於i的操作,提至循環外
(4)部分語句
hidden_tmp = (hidden @ self.weight_W_a).unsqueeze(1).repeat(1,steps,1) 變爲
hidden_tmp = (hidden @ self.weight_W_a)[:,None,:]
(5)對於改動LSTM,for循環裏面調用nn.LSTMCell rather than nn.LSTM

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章