欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何解決pytorch訓(xùn)練過程中CPU內(nèi)存溢出問題

 更新時間:2023年09月08日 09:15:59   作者:yyyyyyhx  
這篇文章主要介紹了如何解決pytorch訓(xùn)練過程中CPU內(nèi)存溢出問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

pytorch訓(xùn)練過程中CPU內(nèi)存溢出問題

期待了一晚上的結(jié)果,早上起來竟然發(fā)現(xiàn)CPU內(nèi)存溢出導(dǎo)致程序奔潰了,今天郁悶了一天。。。

經(jīng)查詢,內(nèi)存溢出的常見原因有:

  • loss求和未加item()
  • num_workers過大
  • 大量使用list轉(zhuǎn)tensor

排查過程

找了好多原因,感覺上面的比較貼近,但是改了一堆,內(nèi)存還是蹭蹭往上漲。

后來調(diào)用了memory_profiler這個包,發(fā)現(xiàn)了

我的程序中上面這部分每輪都加了70多m,可能是這個循環(huán)導(dǎo)致的(另外排查了好多程序都不說了。。。)

然后我把這個循環(huán)改成了下面這樣

觀察每組數(shù)據(jù)的memory占用,發(fā)現(xiàn)了很神奇的現(xiàn)象:

第一組數(shù)據(jù)沒怎么占內(nèi)存,后面重復(fù)調(diào)用同一個數(shù)據(jù)的時候內(nèi)存就開始暴漲,到現(xiàn)在也沒整明白為什么會這樣。。

解決方法

后來調(diào)用了

from einops import rearrange

把數(shù)組維度修改了一下,再一起送進(jìn)網(wǎng)絡(luò)

可算解決了

pytorch內(nèi)存溢出,Ubuntu進(jìn)程killed問題

pytorch顯存越來越多的一個原因

optimizer.zero_grad()
loss.backward()
optimizer.step()
train_loss += loss

參考了別人的代碼發(fā)現(xiàn)那句loss一般是這樣寫

loss_sum += loss.data[0]

這是因為輸出的loss的數(shù)據(jù)類型是Variable。而PyTorch的動態(tài)圖機制就是通過Variable來構(gòu)建圖。

主要是使用Variable計算的時候,會記錄下新產(chǎn)生的Variable的運算符號,在反向傳播求導(dǎo)的時候進(jìn)行使用。

如果這里直接將loss加起來,系統(tǒng)會認(rèn)為這里也是計算圖的一部分,也就是說網(wǎng)絡(luò)會一直延伸變大那么消耗的顯存也就越來越大。

用Tensor計算要寫成:

train_loss += loss.item()
correct_total += torch.eq(predict, label_batch).sum().item()
train_loss += loss.item()

當(dāng)需要將模型中變量提取出來參與計算時,需要使用** .item()**

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論