2016-11-28 17 views
12

私はPythonとKerasを使用しています(現在Theanoバックエンドを使用していますが、私は切り替えても問題ありません)。私は並列に複数の情報源をロードして処理するニューラルネットワークを持っています。現在、私は別々のプロセスでそれぞれを実行していて、ファイルからネットワークの独自のコピーをロードします。これはRAMの浪費のようですので、すべてのスレッドが使用するネットワークの1つのインスタンスで1つのマルチスレッドプロセスを持つ方が効率的だと考えていました。しかし、Kerasがどちらのバックエンドでもスレッドセーフであるかどうかは疑問です。異なるスレッドで同時に2つの異なる入力に.predict(x)を実行すると、競合状態またはその他の問題が発生しますか?Kerasスレッドセーフですか?

ありがとう

答えて

6

はい、少し注意を払うと、Kerasはスレッドセーフです。

実際、強化学習では、Asynchronous Advantage Actor Critics (A3C)というアルゴリズムがあります。各エージェントは、同じ神経ネットワークを使用して、特定の状態で何をすべきかを伝えます。言い換えれば、各スレッドは、問題のように同時にmodel.predictを呼び出します。 Kerasを使用した実装例はhereです。あなたがコードに見えた場合

ただし、このラインに特別な注意を払う必要があります: model._make_predict_function() # have to initialize before threading

これはKerasドキュメントで言及されることはありませんが、その必要が、それは同時に動作させるために。要するに、_make_predict_functionpredict関数をコンパイルする関数です。マルチスレッド設定では、predictをコンパイルするためにこの関数を手動で呼び出す必要があります。そうしないと、初めて実行するまではpredict関数はコンパイルされません。詳細な説明はhereです。

私は今までKerasでのマルチスレッドに関する他の問題に出会っていません。

関連する問題