GPU内存未释放张量流

时间:2018-09-25 18:35:34

标签: tensorflow memory-leaks

我有一个问题,在Python中关闭张量流会话后,我的GPU内存没有释放。这三行足以引起问题:

import tensorflow as tf 
sess=tf.Session() 
sess.close()

第三行之后不释放内存。我在很多论坛上走来走去,尝试了各种建议,但是没有任何效果对我有用。有关详细信息,请参见此处底部的我的评论:

https://github.com/tensorflow/tensorflow/issues/19731

在这里,我记录了我要杀死进程并释放内存的方式,但这对长时间运行和自动化的进程没有用。非常感谢您尝试尝试任何其他建议。我正在使用Windows。

编辑:我现在找到了一个解决方案,至少可以让我做我想做的事情。我仍然不能能够释放内存,但是我可以“重用”它。该代码具有以下结构:

import tensorflow as tf
from keras import backend as K
cfg=K.tf.ConfigProto()
#cfg.gpu_options.allow_growth=True #this is optional
cfg.gpu_options.per_process_gpu_memory_fraction = 0.8 #you can use any percentage here

#upload your data and define your model (2 layers in this case) here    

for i in range(len(neuron1)):
    for j in range(len(neuron2)):
        K.set_session(K.tf.Session(config=cfg))
        #train your NN for i,j

脚本第一次进入循环时,仍会分配GPU内存(在上面的示例中为80%),因此很混乱,但是此代码似乎仍然以某种方式重用了相同的内存。我认为K.set_session(K.tf.Session(config=cfg))会以某种方式破坏或重置旧会话,从而至少在此上下文中允许“重新使用”内存。请注意,我使用sess.close()K.clear_session()或显式重置默认图形。这仍然对我不起作用。完成循环后,GPU内存仍已满。

1 个答案:

答案 0 :(得分:0)

请参阅this讨论。您可以重用已分配的内存,但是如果要释放内存,则必须退出Python解释器本身。

相关问题