私は、Imagenet の分散型 TF トレインの例を綿密にフォローしていました。
この例が 2 つの異なるワーカーで実行されている場合、データの分散がどのように行われるのか理解できませんか? 理論的には、さまざまなワーカーがデータのさまざまな部分を見る必要があります。また、パラメーター サーバーでパラメーターを渡すように指示するコードの部分はどれですか? マルチ GPU の例のように、「cpu:0」の明示的なセクションがあります。
私は、Imagenet の分散型 TF トレインの例を綿密にフォローしていました。
この例が 2 つの異なるワーカーで実行されている場合、データの分散がどのように行われるのか理解できませんか? 理論的には、さまざまなワーカーがデータのさまざまな部分を見る必要があります。また、パラメーター サーバーでパラメーターを渡すように指示するコードの部分はどれですか? マルチ GPU の例のように、「cpu:0」の明示的なセクションがあります。
異なるワーカーは、前処理された画像の単一のキューからミニ バッチ画像をデキューすることにより、データの異なる部分を確認します。詳しく説明すると、Imagenet モデルをトレーニングするための分散セットアップでは、入力画像は複数のスレッドによって前処理され、前処理された画像は単一のRandomShuffleQueue
. このファイルでを検索してtf.RandomShuffleQueue
、これがどのように行われるかを確認できます。複数のワーカーは「インセプション タワー」として編成され、各タワーは同じキューからイメージのミニ バッチをデキューし、入力の異なる部分を取得します。ここの写真は、質問の 2 番目の部分に答えています。このファイルで探します。そこにあるロジックは、slim.variables.VariableDeviceChooser
Variable
オブジェクトは、パラメーター サーバーとして機能するワーカーに均等に割り当てられます。実際のトレーニングを行う他のすべてのワーカーは、ステップの開始時に変数を取得し、ステップの終了時にそれらを更新します。