如何解決pytorch訓(xùn)練過(guò)程中CPU內(nèi)存溢出問(wèn)題
pytorch訓(xùn)練過(guò)程中CPU內(nèi)存溢出問(wèn)題
期待了一晚上的結(jié)果,早上起來(lái)竟然發(fā)現(xiàn)CPU內(nèi)存溢出導(dǎo)致程序奔潰了,今天郁悶了一天。。。
經(jīng)查詢(xún),內(nèi)存溢出的常見(jiàn)原因有:
- loss求和未加item()
- num_workers過(guò)大
- 大量使用list轉(zhuǎn)tensor
排查過(guò)程
找了好多原因,感覺(jué)上面的比較貼近,但是改了一堆,內(nèi)存還是蹭蹭往上漲。
后來(lái)調(diào)用了memory_profiler這個(gè)包,發(fā)現(xiàn)了
我的程序中上面這部分每輪都加了70多m,可能是這個(gè)循環(huán)導(dǎo)致的(另外排查了好多程序都不說(shuō)了。。。)
然后我把這個(gè)循環(huán)改成了下面這樣
觀察每組數(shù)據(jù)的memory占用,發(fā)現(xiàn)了很神奇的現(xiàn)象:
第一組數(shù)據(jù)沒(méi)怎么占內(nèi)存,后面重復(fù)調(diào)用同一個(gè)數(shù)據(jù)的時(shí)候內(nèi)存就開(kāi)始暴漲,到現(xiàn)在也沒(méi)整明白為什么會(huì)這樣。。
解決方法
后來(lái)調(diào)用了
from einops import rearrange
把數(shù)組維度修改了一下,再一起送進(jìn)網(wǎng)絡(luò)
可算解決了
pytorch內(nèi)存溢出,Ubuntu進(jìn)程killed問(wèn)題
pytorch顯存越來(lái)越多的一個(gè)原因
optimizer.zero_grad() loss.backward() optimizer.step() train_loss += loss
參考了別人的代碼發(fā)現(xiàn)那句loss一般是這樣寫(xiě)
loss_sum += loss.data[0]
這是因?yàn)檩敵龅膌oss的數(shù)據(jù)類(lèi)型是Variable。而PyTorch的動(dòng)態(tài)圖機(jī)制就是通過(guò)Variable來(lái)構(gòu)建圖。
主要是使用Variable計(jì)算的時(shí)候,會(huì)記錄下新產(chǎn)生的Variable的運(yùn)算符號(hào),在反向傳播求導(dǎo)的時(shí)候進(jìn)行使用。
如果這里直接將loss加起來(lái),系統(tǒng)會(huì)認(rèn)為這里也是計(jì)算圖的一部分,也就是說(shuō)網(wǎng)絡(luò)會(huì)一直延伸變大那么消耗的顯存也就越來(lái)越大。
用Tensor計(jì)算要寫(xiě)成:
train_loss += loss.item()
correct_total += torch.eq(predict, label_batch).sum().item() train_loss += loss.item()
當(dāng)需要將模型中變量提取出來(lái)參與計(jì)算時(shí),需要使用** .item()**
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
關(guān)于django 1.10 CSRF驗(yàn)證失敗的解決方法
今天小編就為大家分享一篇關(guān)于django 1.10 CSRF驗(yàn)證失敗的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08Python設(shè)計(jì)模式之代理模式實(shí)例
這篇文章主要介紹了設(shè)計(jì)模式中的代理模式Python實(shí)例,需要的朋友可以參考下2014-04-04python爬蟲(chóng)beautifulsoup庫(kù)使用操作教程全解(python爬蟲(chóng)基礎(chǔ)入門(mén))
這篇文章主要介紹了python爬蟲(chóng)beautifulsoup庫(kù)使用操作全解(python爬蟲(chóng)基礎(chǔ)入門(mén)),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02python 使用turtule繪制遞歸圖形(螺旋、二叉樹(shù)、謝爾賓斯基三角形)
這篇文章主要介紹了python 使用turtule繪制遞歸圖形(螺旋、二叉樹(shù)、謝爾賓斯基三角形) ,需要的朋友可以參考下2019-05-05python操作ini類(lèi)型配置文件的實(shí)例教程
這篇文章主要給大家介紹了關(guān)于python操作ini類(lèi)型配置文件的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10使用llama?Index幫你訓(xùn)練pdf的示例詳解
這篇文章主要為大家介紹了使用llama?Index?幫你訓(xùn)練pdf,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03python利用socketserver實(shí)現(xiàn)并發(fā)套接字功能
這篇文章主要為大家詳細(xì)介紹了python利用socketserver實(shí)現(xiàn)并發(fā)套接字功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01python使用PIL把透明背景圖片轉(zhuǎn)成白色背景的示例代碼
當(dāng)我們?cè)诓杉恍﹫D片的時(shí)候,這些圖片的背景經(jīng)常是透明的,但是如何把透明背景轉(zhuǎn)成白色背景呢,接下來(lái)就給大家解決這個(gè)問(wèn)題,本文主要介紹了python使用PIL把透明背景圖片轉(zhuǎn)成白色背景,需要的朋友可以參考下2023-08-08