2016-09-14 10 views
0

私はいくつかのプロセスをサーバー上で実行していますが、そのうちの1つはモデルをテンソルフローでトレーニングしています。定期的に、私はトレーナーに、現在のモデルを他のプロセスに送ることを望みます。私がこれを行う方法は、普通のSaverクラスで、ディスクからsaverestoreまでです。テンソルフローモデルをプロセス間で共有する

しかし、私はこの形式のIPCはむしろ非効率で、サーバー上でファイルシステムのロックアップを引き起こす可能性があると思います。変数をシリアル化する方法があれば、私はzmqブロードキャストパイプでそれを送ることができますが、私はこれをドキュメントで見つけられませんでした。

また、分散したテンソルフローがおそらくタスクまでありますが、それほど複雑なものは必要ないと思います。

+0

ディスクの代わりに/ tmpfsを使用してRAMに保存するとどうなりますか? –

+0

残念ながら、ジョブはRAMを共有しない複数の異なるノードに分散されているため、これはうまくいきません。 –

答えて

1

アーキテクチャを事前共有してから、好きなステップごとにtf.get_collection(tf.GraphKeys.VARIABLES)を使用して実行して値を取得すると、もう一方の側にvariable.assignを使用して適切な変数に値をロードできます。

+0

両側に同じ順序で変数を与えることが保証されますか? –

+0

get_collectionはテンソルオブジェクトを返します。その名前をフェッチするだけです。 'your_session.run(the_tensor_list)'を使用して関連する値を取得する必要があります。これは、テンソルをthe_tensor_listに置いた順序と同じです。あなたはprotobufなどで、必要に応じてすべてをシリアル化することができます – Julius

関連する問題