Ho creato una classe wrapper che inizializza un modello keras.models.Sequential
e ha un paio di metodi per avviare il processo di addestramento e monitorare lo stato di avanzamento. Istanzio questa classe nel mio file main
ed eseguo il processo di addestramento. Roba abbastanza mondana.Come controllare la memoria durante l'utilizzo di Keras con backoff tensorflow?
La mia domanda è:
come liberare tutta la memoria allocata da GPU tensorflow
. Ho provato quanto segue senza fortuna:
import keras.backend.tensorflow_backend as K
with K.get_session() as sess:
K.set_session(sess)
import tensorflow as tf
from neural_net import NeuralNet
with tf.device('/gpu:0'):
nn = NeuralNet('config', train_db_path, test_db_path)
nn.train(1000, 1)
print 'Done'
K._SESSION.close()
K.set_session(None)
Anche dopo che la sessione è stata chiusa e ripristinare None
, nvidia-smi
non riflette alcuna riduzione di utilizzo della memoria. Qualche idea?
Idea
sarebbe significativo per aggiungere un metodo __exit__
alla mia classe NeuralNet
e istanziare come:
with NeuralNet() as nn:
nn.train(1000, 1)
Come devo liberare le risorse del modello keras in questo metodo ?
ambiente di prova
sto usando ipython notebook su un'Ubuntu 14.04 con 3 GTX 960 GPU.
Riferimento:
- https://github.com/fchollet/keras/issues/2102
- https://groups.google.com/forum/#!topic/keras-users/MFUEY9P1sc8
chiedevo se hai trovato una soluzione a questo! Non riesco a trovare un modo per avere decine di flusso (tramite keras) rilasciare la memoria senza uscire dal processo Python –
No. Spostato lontano da Keras. Usando solo tensorflow con grafici e sessioni. – Chintak
Hai provato K.clear_session() – 0xF