2017-01-25 1 views
0

"Distributed TensorFlow" how-toを受け取り、"MNIST For ML Beginners"チュートリアルに適用しようとしました。私は(8つのコアがPCである)3人のTensorFlow労働者がローカルノードを開始し、このライン交換でトレーニングスクリプトを実行した次に明示的に指定されていない場合、TensorFlowクラスタはどのようにマシン間で負荷を分散しますか?

sess = tf.InteractiveSession() 

を:

12346はどこのポートである
sess = tf.InteractiveSession("grpc://localhost:12345") 

ノード0はリッスンしています(マスター・セッションはノード0に作成されています)。計算を実行する場所を明示的に指定しなかったことに注意してください。それはいくつかのCPUを消費します -

htopの出力を見ると、私は仕事が実際のクラスタで実行されていることがわかります。ただし、コンシューマはノード0のみであり、残りのノードは動作しません。マスターセッションを作成する場所としてノード1を選択すると、ピクチャが変更されます。ノード0(CPU負荷で判断)で作業の〜2/3のみが実行されますが、残りの1/3はノード1で実行されます私がノード2をマスターとして選択した場合、その1/3の作業はノード2で実行されます。2つのプロセスを並列に実行すると、ノード1をマスター、ノード2をマスターとしてマスター1、ノード2いくつかの負荷がかかりますが、ノード0はもっと多くロードされます(200%vs 60%vs 60%CPUなど)。

は、これまでのところ、それは、分散TensorFlowの「デフォルト」の動作のように見える今、自動的に作業を並列化のための素晴らしいではありません。私はその振る舞いと分散型TensorFlowが(手動モデルの並列化とは対照的に)データの並列化を意図しているのかどうか疑問に思っています。

+1

それは –

+0

@YaroslavBulatovかなりのマニュアルですので、基本的に分散TensorFlowはかなり低レベルで、すべての計算が明示的に特定のタスクに配置されたときの状況を狙っていますか? – yeputons

答えて

0

TFは、データの並列化に適しています。あなたが大量のデータを調べる必要がある場合、そのデータは複数のGPUに配布されます。

重みの並列化にも最適です。 tf.train.replica_device_setterを使用すると、より良いIOのために複数のデバイスに重みが分散されます。

さて、それはあなたが単一モデル内で並列化を求めているようです。 TFは、同じモデルの計算を複数のデバイスに配布する最良の方法が何であるか分からないため、自動的に行うことは困難です。それはあまりにも多くの要素に依存するだろう。あなたのデバイス間の接続はどれくらい速いのですか?

+0

単一モデル内で一連の読み取り専用計算を並列化する簡単な方法はありますか? Usecase:予測要求のストリームと固定された訓練モデルがあります。 – yeputons

+0

AFAIK、唯一の方法は固定バッチサイズでモデルを初期化することです。シーケンスからキューにサンプルを渡すことができます。キューが前述のバッチサイズに達すると、1回のフォワードパスを実行します。 – guinny

関連する問題