Память GPU не освобождается тензорным потоком - PullRequest
0 голосов
/ 25 сентября 2018

У меня проблема с тем, что моя память 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 все еще заполнена.

1 Ответ

0 голосов
/ 27 сентября 2018

См. это обсуждение.Вы можете повторно использовать выделенную память, но если вы хотите освободить память, вам придется выйти из самого интерпретатора Python.

...