2016-01-20 4 views
5

テンソルフローを使用して大きな画像を前処理しています。私は記憶が急速に崩壊しているという問題を抱えていました。私はPythonでマルチプロセッシングを使うようになったので、いつでもメモリが完全に解放されます。Tensorflow:セッションをPythonマルチプロセスに渡す

私はPythonのマルチプロセスキューを使用していますが、なんらかの理由で私の親プロセスからテンソルフローセッションを子供に渡すことができません。いくつかの高度なデバッグ手法(いくつかの行ごとに何かを印刷する)を使用すると、私はセッションを利用する行の中でPythonがアイドルになっていることに気付きました。問題がある可能性がどのような

def subprocess(some_image, sess, q): 
    with sess.as_default(): 
     # ... use sess and q ... 
     print "All good and well" #This is printed 
     some_image.eval() #Nothing happens here in console 
     print "Still all good and well" #This is not printed 

if __name__ == '__main__': 
    # ... some initial operations ... 
    some_image = read_some_image() 

    sess = tf.Session() 

    q = Queue() 
    q.put(something) 
    p = Process(target=subprocess, args=(some_image, sess, q)) 
    p.start() 
    p.join() 

私のコードは次のようになりますか? 多くの感謝!

+0

複数のセッションをマルチプロセッシングパッケージと並行して実行する方法を知りましたか? – MrRed

+0

私が正しく覚えていれば、マルチプロセッシングプールで必要なことをすることができました。私が望んでいたのは、複数の関数呼び出しで1つのセッションを共有することでしたが、それはできませんでした。最終的に私はメモリ使用量を低く抑えるために他の方法を選択しました – mathetes

答えて

2

tf.Session()のように、"state"を共有することはできません。 私は、各プロセスがそれ自身のセッションを必要とすると思います。

+0

まず最初に見えるようです。スクリプトが非常に遅く実行されているため、テンソルフローの作成セッションがパフォーマンスに影響を与えるかどうかはわかりません – mathetes

+0

マルチプロセッシングのプール機能を使用しませんか? – svrist

+0

私はそれを試してみましょう!私は実際にはこのpython事の初心者です – mathetes

1

あなたが必要とするのは、テンソルフローだけです。

  1. 親プロセスでグラフとセッションを作成します。グラフを作成する際に、演算子(特に変数)の一部をワーカーに配置します。
  2. 子プロセスを作成して実行する
関連する問題