keras.models.Sequential
モデルを初期化するラッパークラスを作成しました。トレーニングプロセスを開始し、進捗状況を監視するための2つのメソッドがあります。私はmain
ファイルでこのクラスをインスタンス化し、トレーニングプロセスを実行します。かなり世俗的なもの。テンソルフローバックエンドでKerasを使用しているときにメモリを制御する方法は?
マイ質問は次のとおりです。
tensorflow
によって割り当てられたすべてのGPUのメモリを解放する方法。私は運を試してみました次:セッションが終了し、None
にリセットされた後でも
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)
を、nvidia-smi
は、メモリ使用量の減少を反映していません。何か案は?
アイデア
私のNeuralNet
クラスに__exit__
メソッドを追加して、それをインスタンス化する意味があります:私はこの方法でkerasモデルのリソースを解放する必要がありますどのように
with NeuralNet() as nn:
nn.train(1000, 1)
?
テスト環境
私は3つのGTX 960基のGPUでのUbuntu 14.04上でiPythonノートブックを使用しています。
参考:私のために、次の作品は、すべての実行のための私のJupyterノートにKeras層の状態を再初期化する
- https://github.com/fchollet/keras/issues/2102
- https://groups.google.com/forum/#!topic/keras-users/MFUEY9P1sc8
あなたがこれに対する解決策を見つけたのかどうか疑問に思っていました。テンソルフロー(ケラ経由で)がPythonプロセスを終了せずにメモリを解放する方法を見つけることができないようです。 –
いいえ。ケラスから離れました。グラフとセッションでテンソルフローのみを使用する。 – Chintak
K.clear_session()を試しましたか? – 0xF