У меня проблема с тем, что моя память GPU не освобождается после закрытия сеанса тензорного потока в Python.Этих трех строк достаточно, чтобы вызвать проблему:
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 все еще заполнена.