J'ai créé une classe wrapper qui initialise un modèle keras.models.Sequential
et dispose de quelques méthodes pour démarrer le processus d'entraînement et suivre les progrès. J'instancie cette classe dans mon fichier main
et effectue le processus de formation. Des trucs assez banals.Comment contrôler la mémoire lors de l'utilisation de Keras avec backend tensorflow?
Ma question est:
Comment libérer toute la mémoire GPU allouée par tensorflow
. J'ai essayé ce qui suit à pas de chance:
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)
Même après la session a été fermée et remise à None
, nvidia-smi
ne reflète pas une réduction de l'utilisation de la mémoire. Des idées?
Idée
Serait-il utile d'ajouter une méthode __exit__
à ma classe NeuralNet
et instancier comme:
with NeuralNet() as nn:
nn.train(1000, 1)
Comment dois-je libérer les ressources du modèle keras dans cette méthode ?
Environnement de test
J'utilise ipython Notebook sur une Ubuntu 14.04 avec 3 GTX 960 GPU.
Référence:
- https://github.com/fchollet/keras/issues/2102
- https://groups.google.com/forum/#!topic/keras-users/MFUEY9P1sc8
se demandait si vous avez trouvé une solution à cela! Je ne peux pas sembler trouver un moyen d'avoir tensorflow (via keras) libérer la mémoire sans quitter le processus python –
Nope. Il s'est éloigné de Keras. En utilisant juste tensorflow avec des graphiques et des sessions. – Chintak
Avez-vous essayé K.clear_session() – 0xF