我有一个问题,在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内存仍已满。