このドキュメントでは、分散 PyTorch トレーニング ジョブを作成する方法を説明します。分散トレーニング ジョブを作成すると、AI Platform Training は、分散 PyTorch トレーニングをサポートする環境変数を使用して、仮想マシン(VM)インスタンスのクラスタ(ノードとも呼ばれる)でコードを実行します。これにより、トレーニング ジョブをスケーリングして大量のデータを処理できるようになります。
このガイドでは、PyTorch スタートガイドで説明されているように、トレーニングに事前に構築された PyTorch コンテナを使用することを前提としています。分散トレーニングに PyTorch コードを適応させるには、最小限の変更が必要です。
トレーニング クラスタ構造の指定
分散 PyTorch トレーニングでは、1 つのマスター ワーカーノードと 1 つ以上のワーカーノードを使用するようにジョブを構成します。これらのロールは、次のように動作します。
- マスター ワーカー: ランクが 0 の VM。このノードはクラスタ内のノード間の接続を設定します。
- ワーカー: クラスタ内の残りのノード。各ノードは、トレーニング アプリケーション コードで指定されているように、トレーニングの一部を実行します。
トレーニング クラスタのマスター ワーカー ノードとワーカーノードを指定する方法については、マシンタイプまたはスケール階層の指定をご覧ください。
コンテナ イメージの指定
トレーニング ジョブを作成するときに、マスター ワーカーの Docker コンテナのイメージを trainingInput.masterConfig.imageUri
フィールドで使用するように指定し、各ワーカーの Docker コンテナのイメージを trainingInput.workerConfig.imageUri
フィールドで使用するように指定します。事前に構築された PyTorch コンテナのリストをご覧ください。
gcloud ai-platform jobs submit training
コマンドを使用してトレーニング ジョブを作成する場合、--master-image-uri
フラグと --worker-image-uri
フラグを使用してこれらのフィールドを指定できます。
ただし、trainingInput.workerConfig.imageUri
フィールドを指定しない場合、値はデフォルトの trainingInput.masterConfig.imageUri
になります。多くの場合、すべてのノードで同じ事前に構築された PyTorch コンテナを使用します。
トレーニング コードの更新
トレーニング アプリケーションで次のコードを追加して、トレーニング クラスタを初期化します。
import torch
torch.distributed.init_process_group(
backend='BACKEND',
init_method='env://'
)
BACKEND は、サポートされている分散トレーニング バックエンドのいずれかに置き換えます(次のセクションを参照)。init_method='env://'
キーワード引数は、環境変数を使用してクラスタ内の通信を初期化するよう PyTorch に指示します。詳しくは、このガイドの環境変数セクションをご覧ください。
また、torch.nn.parallel.DistributedDataParallel
クラスを使用するようにトレーニング コードを更新します。たとえば、コード内に model
という PyTorch モジュールを作成した場合は、次の行を追加します。
model = torch.nn.parallel.DistributedDataParallel(model)
分散トレーニングの構成の詳細については、PyTorch のドキュメントの分散トレーニング ガイドをご覧ください。
分散トレーニングのバックエンド
AI Platform Training では、分散 PyTorch のトレーニング用に次のバックエンドがサポートされます。
gloo
: CPU トレーニング ジョブで推奨nccl
: GPU トレーニング ジョブで推奨
バックエンドの違いをご覧ください。
環境変数
分散 PyTorch トレーニング ジョブを作成すると、AI Platform Training は各ノードに次の環境変数を設定します。
WORLD_SIZE
: クラスタ内のノードの合計数。この変数の値は、すべてのノードで同じです。RANK
: 各ノードの一意の識別子。マスター ワーカーでは、この識別子は0
に設定されます。各ワーカーでは、1
からWORLD_SIZE - 1
までの異なる値に設定されます。MASTER_ADDR
: マスター ワーカー ノードのホスト名。この変数の値は、すべてのノードで同じです。MASTER_PORT
: マスター ワーカー ノードが通信するポート。この変数の値は、すべてのノードで同じです。
PyTorch ではこれらの環境変数を使用してクラスタを初期化します。
次のステップ
- PyTorch スタートガイドのチュートリアルで、AI Platform Training の PyTorch を使用したトレーニングについて学ぶ。
- PyTorch のドキュメントの分散トレーニング ガイドで、分散型 PyTorch トレーニングの全般について学ぶ。