我正在運行一個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()
,所有結果都一樣。
更新,我試過'memory_profiler'它至少看到泄漏,而不是'heapy'看不到任何東西,我現在正在跟蹤它的過程。 https://pypi.python.org/pypi/memory_profiler –