コンテナを使用した分散トレーニング

は、

このページでは、AI Platform 上での分散トレーニング構造をカスタム コンテナでサポートする方法を説明します。

カスタム コンテナでは、分散処理をサポートしている ML フレームワークを使用して分散トレーニングを行うことができます。ここで使用する用語は TensorFlow の分散モデルに基づいていますが、同様の分散構造を持つ ML フレームワークであれば、どの ML フレームワークでも使用できます。たとえば、MXNet での分散トレーニングではスケジューラ、ワーカー、サーバーを使用します。この構造は AI Platform カスタム コンテナの分散トレーニング構造と一致します。AI Platform ではマスター、ワーカー、パラメータ サーバーを使用します。

トレーニング クラスタの構造

AI Platform で分散トレーニング ジョブを実行する場合は、トレーニング クラスタで複数のマシン(ノード)を指定します。トレーニング サービスにより、指定したマシンタイプに応じてリソースが割り当てられます。特定のノード上で実行中のジョブは「レプリカ」と呼ばれます。分散 TensorFlow モデルに従って、トレーニング クラスタ内の各レプリカには分散トレーニングにおける役割またはタスクが 1 つ割り当てられます。

  • マスター: 1 つのレプリカのみが「マスター」として指定されます。このタスクは他のレプリカを管理し、ジョブ全体のステータスを報告します。

  • ワーカー: 1 つ以上のレプリカを「ワーカー」として指定できます。これらのレプリカに担当させる作業は、ジョブ構成で指定します。

  • パラメータ サーバー: 1 つ以上のレプリカを「パラメータ サーバー」として指定できます。これらのレプリカは、モデル パラメータを格納し、ワーカー間で共有されるモデルの状態を調整します。

API マッピング

トレーニング クラスタ内のマシンに割り当てることができる役割は、3 種類あります。これらの役割は、トレーニング ジョブの入力パラメータを表す TrainingInput で指定できる以下の 3 つのフィールドに対応します。

  • masterConfig.imageUri は、マスター上で実行されるコンテナ イメージの URI を表します。
  • workerConfig.imageUriparameterServerConfig.imageUri は、それぞれワーカー上、パラメータ サーバー上で実行されるコンテナ イメージの URI を表します。これらのフィールドに値が設定されていない場合、AI Platform は masterConfig.imageUri の値を使用します。

これらのフィールドの値は、それぞれに対応するフラグを使用して gcloud beta ai-platform jobs submit training で設定することもできます。

  • マスター構成には --master-image-uri を使用します。
  • ワーカー構成には --worker-image-uri を使用します。
  • パラメータ サーバー構成には --parameter-server-image-uri を使用します。

カスタム コンテナを使用する分散トレーニング ジョブを送信する方法の例をご覧ください。

CLUSTER_SPEC について

AI Platform はすべてのレプリカで、環境変数 CLUSTER_SPEC に値を代入します。これは、クラスタ全体がどのように設定されているかを示す環境変数です。TensorFlow の TF_CONFIG と同様に、CLUSTER_SPEC にはクラスタ内の各レプリカの詳細、たとえばインデックスと役割(マスター、ワーカー、またはパラメータ サーバー)に関する情報が記述されます。

TensorFlow で分散トレーニングを実行するときは、TF_CONFIG が解析されて tf.train.ClusterSpec が作成されます。同様に、他の ML フレームワークで分散トレーニングを実行するときは、CLUSTER_SPEC を解析して、フレームワークに必要なすべての環境変数や設定に値を代入する必要があります。

CLUSTER_SPEC の形式

CLUSTER_SPEC 環境変数は、次の形式の JSON 文字列です。

キー 説明
"cluster" カスタム コンテナのクラスタの説明。「TF_CONFIG」と同様に、このオブジェクトは TensorFlow クラスタ仕様として形式設定され、tf.train.ClusterSpec のコンストラクタに渡すことができます。
"task" コードが実行されている特定のノードのタスクを記述します。この情報を使用して、分散ジョブ内の特定のワーカー用のコードを記述できます。このエントリは、次のキーを持つ辞書です。
"type" このノードで実行されるタスクのタイプ。使用可能な値は、masterworkerps です。
"index" ゼロから開始するタスクのインデックス。ほとんどの分散トレーニング ジョブには単一のマスタータスク、1 つ以上のパラメータ サーバー、1 つ以上のワーカーがあります。
"trial" 現在実行中のハイパーパラメータ調整トライアルの ID。ジョブのハイパーパラメータ調整を構成する際に、トレーニングするトライアル数を設定します。この値により、コードで実行されているトライアルを識別できます。ID は、トライアル番号を含む文字列値で、1 から始まります。
"job" ジョブを開始したときに使用したジョブ パラメータ。ほとんどの場合、このエントリはコマンドライン引数を通じてアプリケーションに渡されるデータの複製であるため、無視できます。

TensorFlow との互換性

TensorFlow での分散トレーニングは、AI Platform ランタイム バージョンで実行されるトレーニング コードと同じく、AI Platform のカスタム コンテナでも同じように機能します。いずれの場合も、AI Platform によって TF_CONFIG に値が代入されます。カスタム コンテナを使用して TensorFlow で分散トレーニングを実行する場合は、AI Platform によって TF_CONFIGCLUSTER_SPEC の両方に値が代入されます。

TensorFlow Estimator API を使用する場合、TensorFlow は TF_CONFIG を解析して自動的にクラスタ仕様を作成します。Core API を使用する場合は、トレーニング アプリケーションの TF_CONFIG からクラスタ仕様を作成する必要があります。

AI Platform 上の分散トレーニングに TF_CONFIG を使用する方法の詳細と例をご覧ください。

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...