1. 程式人生 > 實用技巧 >解決重複執行Tensorflow程式GPU記憶體佔用的小白方法

解決重複執行Tensorflow程式GPU記憶體佔用的小白方法

作為一個剛入門CV的新手,最近在執行一個生成人臉影象的程式時遇到了問題,程式是可以執行的,但是執行兩次後就會出錯,具體如下:

ResourceExhaustedError: 2 root error(s) found.
  (0) Resource exhausted: OOM when allocating tensor with shape[1,3,3,512,512] and type float on /job:localhost/replica:0/task:0/device:GPU:0 by allocator GPU_0_bfc
     [[{{node G_synthesis_5/_Run/G_synthesis/64x64/Conv0_up/Square}}]]
Hint: If you want to see a list of allocated tensors when OOM happens, add report_tensor_allocations_upon_oom to RunOptions 
for current allocation info. [[G_synthesis_5/_Run/saturate_cast/_4577]] Hint: If you want to see a list of allocated tensors when OOM happens, add report_tensor_allocations_upon_oom to RunOptions for current allocation info. (1) Resource exhausted: OOM when allocating tensor with shape[1,3,3,512,512] and
type float on /job:localhost/replica:0/task:0/device:GPU:0 by allocator GPU_0_bfc [[{{node G_synthesis_5/_Run/G_synthesis/64x64/Conv0_up/Square}}]] Hint: If you want to see a list of allocated tensors when OOM happens, add report_tensor_allocations_upon_oom to RunOptions for current allocation info. 0 successful operations. 0 derived errors ignored.

先介紹下我的執行環境:

  • Win 10
  • Spyder
  • Tensorflow-GPU == 1.14.0

查到的原因是GPU視訊記憶體不夠了。

第一次執行,專用GPU記憶體:0 ===> 1.2,第二次執行:1.2 ===> 1.6,第三次就沒有辦法運行了,由於自己的電腦是渣渣顯示卡,視訊記憶體太小,而我的程式是需要不斷改變引數重複執行的,但網上查了一遍說視訊記憶體是不會執行一次就釋放資源的,所以我不得不每執行兩次就重啟Spyder這樣來釋放視訊記憶體。也嘗試過執行一次後就殺掉顯示卡中的這個程式,但結果是直接導致Spyder核心連線中斷,結果還是重啟。

最後,靈機一動,直接在控制檯重啟核心就可以釋放掉程式以及所佔視訊記憶體資源,這樣就不用重啟麻煩了。

如果是一段連續程式視訊記憶體不夠,那就要麼換大一點視訊記憶體的顯示卡,或者設定每次佔用GPU資源的值了。這個可以看看其他博主的部落格。

方法不高階,但挺實用,如果有更好的方法,歡迎留言評論。