"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が(手動モデルの並列化とは対照的に)データの並列化を意図しているのかどうか疑問に思っています。
それは –
@YaroslavBulatovかなりのマニュアルですので、基本的に分散TensorFlowはかなり低レベルで、すべての計算が明示的に特定のタスクに配置されたときの状況を狙っていますか? – yeputons