模型訓練過程中記憶體占用不斷增加,訓練到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 整合...