記一次Pytorch記憶體洩露的排查與處理

2021-10-06 02:12:59 字數 664 閱讀 7328

模型訓練過程中記憶體占用不斷增加,訓練到30000輪左右已經占用到200g記憶體.

查詢了網上的一些記憶體洩漏排查方法,使用了memory_profiler objgraph  pympler這三個工具進行排查

參考鏈結如下:

pytorch超出記憶體

pytorch記憶體洩漏分析案例 | list轉tensor

memory_profiler的使用

python 記憶體監控模組之memory_profiler

python 使用objgraph 定位記憶體洩露

排查python記憶體洩露中幾個工具的使用

記一次python記憶體洩露的解決過程

pympler跟蹤記憶體洩漏

最終發現記憶體洩露可能的原因是通過pympler工具,在tker.print_diff()時發現網路訓練迴圈結束後,自定義的兩個loss層的自動回傳物件仍然未被釋放.

最終發現問題出在train_net.py中,loss += loss_iter語句,由於loss_iter是乙個具有autograd歷史的可微變數,因此loss直接加上loss_iter會導致autograd歷史不斷被儲存,記憶體未被釋放.

修改為loss += loss_iter.item()僅僅使用loss_iter數值後問題解決,執行程式在終端使用top命令與free -h命令發現記憶體不再增加了.

記CXF中的一次Non Heap記憶體洩露

最近遇到乙個webservice記憶體洩露的問題。使用jconsole連線後發現非堆記憶體和loaded classes在每次執行full gc後都會增長。classes增長的非常有規律,每次增加5000個左右。因為cxf中使用了jaxb,懷疑是jaxb被多次例項化造成的。然後使用mat,查詢dup...

記一次EventBus記憶體洩露導致的專案問題

今天遇到乙個很尷尬的問題,就是eventbus的使用過程中,在post乙個event後,於此同時,在接收event的方法中打斷點監控event的接收。這個時候我遇到很尷尬的問題,會重複接收到很多次的event事件 我當前所用的開發框架是支援將業務,資料更新,檢視更新從activity中抽離,在act...

記一次安裝Pytorch的經歷

參考 也許,你之後會遇到不同的專案,需要使用到不同版本的環境。比如這個專案要用到 pytorch 0.4,另乙個專案要用到 pytorch 1.0,如果你解除安裝了0.4版本,安裝了1.0版本。那麼下一次,你再碰到0.4版本,你就需要解除安裝1.0版本,安裝0.4版本。很折騰。anaconda 整合...