2017-04-08 18 views
1

我正在運行一個tensorflow模型,它在處理大圖像時大約10分鐘耗盡60G的RAM。python heapy顯示不斷的內存使用情況,雖然60GB的RAM在10分鐘內耗盡

我已經運行Heapy試圖鎖定泄漏,但heapy只顯示90M的內存使用情況並保持不變。

我注意到這篇文章:Python process consuming increasing amounts of system memory, but heapy shows roughly constant usage

這建議,這個問題可能是蟒蛇(2.7此處)內存碎片。但這聽起來不像是對這種情況的合理解釋。

  • 我有2個python隊列。在一個我從磁盤讀取圖像,並使用一個線程將其 加載到raw隊列。
  • 在另一個線程中,我讀取了raw隊列,進行預處理,並將其加載到ready隊列中 。
  • 在我的主線程中,我從ready隊列中抽取8個圖像的批次並通過張量流訓練運行它們。
  • 對於8個圖像的批處理(每個〜25MB numpy矩陣),我應該在任何給定的時間在當前處理和兩個隊列之間至少保存24 * 25MB的內存。但heapy只顯示90M的消費。

所以heapy沒有看到至少600M的內存,我知道必須在任何特定的時刻舉行。

因此,如果heapy無法看到我知道的內存,我不能相信它看到泄漏的位置。以它泄漏的速度來看,這是批量圖像造成的虛擬確定性。

我在Python中使用threading模塊來啓動加載器和預處理器線程。我嘗試從線程代碼和主代碼中調用print h.heap(),所有結果都一樣。

+0

更新,我試過'memory_profiler'它至少看到泄漏,而不是'heapy'看不到任何東西,我現在正在跟蹤它的過程。 https://pypi.python.org/pypi/memory_profiler –

回答

0

我最後偶然發現了一個無限大的蟒蛇Queue。簡單的修復。怪異的heapy沒有顯示由隊列分配的內存。那麼,memory_profiler做到了,因此我追蹤了這個問題。

如果heapy說過:「嘿,這個對象使用的內存比你期望的要多,那肯定會是件好事。」