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

は、

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

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

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

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

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

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

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

API マッピング

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

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

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

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

CLUSTER_SPEC について

Cloud ML Engine はすべてのレプリカで、環境変数 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 での分散トレーニングは、Cloud ML Engine ランタイム バージョンで実行されるトレーニング コードと同じく、Cloud ML Engine のカスタム コンテナでも同じように機能します。いずれの場合も、Cloud ML Engine によって TF_CONFIG に値が代入されます。カスタム コンテナを使用して TensorFlow で分散トレーニングを実行する場合は、Cloud ML Engine によって TF_CONFIGCLUSTER_SPEC の両方に値が代入されます。

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

詳細と例については、Cloud ML Engine 上の分散トレーニングに TF_CONFIG を使用する方法をご覧ください。

次のステップ

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

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