2016-04-11 15 views
7

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:

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

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 –

+0

No. Spostato lontano da Keras. Usando solo tensorflow con grafici e sessioni. – Chintak

+0

Hai provato K.clear_session() – 0xF

risposta

1

le seguenti opere per me per reinizializzare lo stato di strati Keras nel mio taccuino Jupyter per ogni corsa:

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

Inoltre, il grafico è denominato e ripristinato ogni volta che notebook viene eseguito utilizzando:

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

Nota: io sto ancora cercando di avvolgere la mia testa intorno ai concetti di Keras e tensorflow (credo che sono descritti poco nella documentazione ed esempi), ma i lavori di cui sopra.

+0

La cancellazione di una sessione mantiene tutti i modelli esistenti e i relativi pesi? –

+0

I pesi vengono cancellati, i grafici vengono mantenuti, scusa per la risposta tardiva. In qualche modo non ho ricevuto le notifiche ... – xor007

Problemi correlati