2016-04-11 2 views
7

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:

  1. https://github.com/fchollet/keras/issues/2102
  2. https://groups.google.com/forum/#!topic/keras-users/MFUEY9P1sc8
+1

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 –

+0

Nope. Il s'est éloigné de Keras. En utilisant juste tensorflow avec des graphiques et des sessions. – Chintak

+0

Avez-vous essayé K.clear_session() – 0xF

Répondre

1

Les œuvres suivantes pour moi réinitialisent l'état des couches KERAS dans mon carnet Jupyter pour chaque course:

from keras import backend as K 
K.clear_session() 
sess = tf.Session() 
K.set_session(sess) 

En outre, le graphique est nommé et réinitialisé à chaque fois que le ordinateur portable fonctionne à l'aide:

graphr = K.get_session().graph 
with graphr.as_default(): 
    #...graph building statements... 

Note: J'essaie toujours d'envelopper ma tête autour des concepts de Keras et tensorflow (je crois qu'ils sont décrits mal dans la documentation et des exemples), mais les travaux ci-dessus.

+0

Est-ce que l'effacement d'une session conserve tous les modèles existants et leurs poids? –

+0

Les poids sont effacés, les graphiques sont conservés, désolé pour une réponse tardive. D'une manière ou d'une autre, je n'ai pas reçu de notifications ... – xor007