2016-12-20 64 views
1

完畢後的記憶要限制使用內存我讀How to prevent tensorflow from allocating the totality of a GPU memory?,並試圖將此代碼:解除分配蟒蛇tensorflow工作簿執行

# Assume that you have 12GB of GPU memory and want to allocate ~4GB: 
gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.333) 
sess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options)) 

這些命令沒有釋放內存,但內存卻沒有代碼完成後取消分配。此問題描述: https://github.com/tensorflow/tensorflow/issues/3701建議的修復程序是更新驅動程序 「將GPU驅動程序從352.79升級到367.35(最新的)後,問題消失。 「 不幸的是,我無法更新到最新版本的驅動程序。此問題是否已解決?

我還考慮將可用內存限制在碼頭容器中。 閱讀https://devblogs.nvidia.com/parallelforall/nvidia-docker-gpu-server-application-deployment-made-easy/狀態「容器可以被限制爲系統上有限的一組資源(例如一個CPU內核和1GB內存)」,但內核目前不支持這個,在這裏我嘗試向新的docker實例添加1GB的內存:

nvidia-docker run -m 1024m -d -it -p 8889:8889 -v /users/user1234/jupyter:/notebooks --name tensorflow-gpu-1GB tensorflow/tensorflow:latest-cpu 

但這並不可能出現如收到警告: 警告:您的內核不支持互換極限能力,內存的限制沒有交換」

tensorflow python工作簿完成後是否有命令釋放內存?

Update 

殺死/重新啓動筆記本電腦後,將取消分配內存。但如何在筆記本內完成後釋放內存。

+0

但是關閉(終止/終止)筆記本內核後內存是否保持分配? Oo – sygi

+0

@sygi請參閱更新 –

+1

我懷疑這是不可能的。像內存分配器這樣的結構是process-global('process_state.h'),並且查看'common_runtime/bfc_allocator.cc',看起來像釋放例程保存分配的內存以備將來使用 –

回答

0

IPython的和jupyter筆記本將不會釋放內存,除非你對你的對象使用delxdel

https://ipython.org/ipython-doc/3/interactive/magics.html

%XDEL: 刪除一個變量,試圖從任何地方清除它是IPython中的機械有引用它。默認情況下,它使用用戶命名空間中的命名對象的標識來刪除其他名稱下的引用。該對象也從輸出歷史記錄中刪除。

+0

謝謝但變量內存沒有使用del或xdel清除,因此根據@Yaroslav Bulatov評論看來是不可能的 –