使用 tcmalloc 分配器
為了提高記憶體分配效能,許多 TensorFlow 使用者經常使用 tcmalloc
而不是預設的 malloc()
實現,因為在分配和釋放大物件(例如許多張量)時,tcmalloc
受碎片的影響較小。已知一些記憶體密集型 TensorFlow 程式會使用預設的 malloc()
洩漏堆地址空間 (同時釋放它們使用的所有單個物件),但在切換到 tcmalloc
後執行得很好。此外,tcmalloc
還包括一個堆分析器 ,可以跟蹤可能發生的任何剩餘洩漏的位置。
tcmalloc
的安裝將取決於你的作業系統,但以下適用於 Ubuntu 14.04(可靠) (其中 script.py
是你的 TensorFlow Python 程式的名稱):
$ sudo apt-get install google-perftools4
$ LD_PRELOAD=/usr/lib/libtcmalloc.so.4 python script.py ...
如上所述,簡單地切換到 tcmalloc
可以解決許多明顯的洩漏問題。但是,如果記憶體使用量仍在增長,你可以使用堆分析器,如下所示:
$ LD_PRELOAD=/usr/lib/libtcmalloc.so.4 HEAPPROFILE=/tmp/profile python script.py ...
執行上述命令後,程式將定期將配置檔案寫入檔案系統。配置檔案序列將命名為:
/tmp/profile.0000.heap
/tmp/profile.0001.heap
/tmp/profile.0002.heap
- …
你可以使用 google-pprof
工具讀取配置檔案,該工具可以作為 google-perftools
軟體包的一部分安裝(例如,在 Ubuntu 14.04 上)。例如,要檢視上面收集的第三個快照:
$ google-pprof --gv `which python` /tmp/profile.0002.heap
執行上述命令將彈出 GraphViz 視窗,將配置檔案資訊顯示為有向圖。