pytorch 深度學習訓練過程gpu內存溢出問題


Pytorch GPU運算過程中會出現:“cuda runtime error(2): out of memory”這樣的錯誤。通常,這種錯誤是由於在循環中使用全局變量當做累加器,且累加梯度信息的緣故,用官方的說法就是:"accumulate history across your training loop"。在默認情況下,開啟梯度計算的Tensor變量是會在GPU保持他的歷史數據的,所以在編程或者調試過程中應該盡力避免在循環中累加梯度信息。

代碼:
total_loss=0
for i in range(10000):
optimizer.zero_grad()
output=model(input)
loss=criterion(output)
loss.backward()
optimizer.step()
total_loss+=loss
#這里total_loss是跨越循環的變量,起着累加的作用,
#loss變量是帶有梯度的tensor,會保持歷史梯度信息,在循環過程中會不斷積累梯度信息到tota_loss,占用內存

以上例子的修正方法是在循環中的最后一句修改為:total_loss+=float(loss),利用類型變換解除梯度信息,這樣,多次累加不會累加梯度信息。


免責聲明!

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



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