Platform for AI (PAI) の Deep Learning Containers (DLC) は、MPIJob タイプの分散トレーニングジョブをサポートしています。本ガイドでは、コードソースの準備からトレーニングログの監視まで、mpirun または DeepSpeed (pdsh) を使用して MPIJob を送信する手順を説明します。
前提条件
開始する前に、以下を確認してください。
-
DLC がアクティブ化され、デフォルトのワークスペースが作成されていること。詳細については、「PAI のアクティブ化とデフォルトワークスペースの作成」をご参照ください。
-
Lingjun リソースが購入され、リソースクォータが作成されていること。詳細については、「リソースクォータの作成」をご参照ください。
制限事項
Lingjun リソースを使用する場合、MPIJob トレーニングジョブは China (Ulanqab) リージョンでのみサポートされます。
仕組み
MPIJob は、ランチャーと 1 つ以上のワーカーという 2 つのロールを使用します。ランチャーはすべてのノードでトレーニングプロセスを開始し、ワーカーは分散計算を実行します。DLC は hostfile を自動生成し、ノード間通信を構成するため、ノード間の SSH を手動で設定する必要はありません。
DLC はランチャーの環境変数を事前構成します。必要に応じて、起動コマンドでこれらのデフォルト値を上書きできます。詳細については、「システム環境変数」をご参照ください。
起動方法の選択
DLC は、MPIJob トレーニングを起動する 2 つの方法をサポートしています。
| 方法 | 起動メカニズム | ユースケース |
|---|---|---|
| mpirun | kubexec (DLC 管理) | 標準的な MPI 分散トレーニング |
| DeepSpeed (pdsh) | pdsh | DeepSpeed パイプライン並列処理トレーニング |
両方の方法は同じリソース構成を使用します。唯一の違いは起動コマンドです。
ステップ 1:コードソースの準備
公式の DeepSpeed サンプルリポジトリを使用してコードソースを作成します。
-
DLC コンソールで [Code Builds] に移動し、以下のパラメータで新しいコードソースを作成します。その他のパラメータはデフォルトのままにします。詳細については、「コード構成」をご参照ください。
パラメータ 値 [Name] deepspeed-examples[Git repository] https://github.com/microsoft/DeepSpeedExamples.git
ステップ 2:分散トレーニングジョブの送信
オプション 1:mpirun
-
PAI コンソールで、リージョンとワークスペースを選択し、[ディープラーニングコンテナー (DLC)] をクリックします。
-
DLC ページで、[ジョブの作成] をクリックします。
-
[ジョブの作成] ページで、次のパラメーターを設定します。その他のパラメーターについては、「トレーニングジョブの作成」をご参照ください。 [起動コマンド:]
[リソースタイプ] と [ドライバー設定] は、ワークスペースが Lingjun リソースと汎用リソースの両方をサポートしている場合にのみ表示されます。
環境情報
パラメータ 値 [Image URL] dsw-registry-vpc.<RegionID>.cr.aliyuncs.com/pai-common/deepspeed-training:23.08-gpu-py310-cu122-ubuntu22.04—<RegionID>をリージョン ID に置き換えます。China (Ulanqab) の場合はcn-wulanchabuを使用します。その他のリージョン ID については、「リージョンとゾーン」をご参照ください。[Startup command] 以下を参照 [Code Builds] [Online configuration]Mount path を選択して、作成したコードソースを選択します。 はデフォルトのままにします。 リソース情報
パラメータ 値 [Resource type] Lingjun AI コンピューティングサービス [Source] Resource Quota [Resource quota] 作成した Lingjun リソースクォータを選択します。 [Framework] MPI [Number of nodes] 2 [vCPUs] 4 [GPUs] 1 [Memory (GiB)] 8 [Shared memory (GiB)] 8 [Driver settings] 535.54.03(上記のテストイメージに推奨)cd /root/code/DeepSpeedExamples/training/cifar/ # -np 2: 2 つのプロセスを起動 (ノードごとに 1 つ) # -bind-to none -map-by slot: 各スロットで利用可能なすべての CPU コアを使用 # -x LD_LIBRARY_PATH -x PATH: これらの環境変数をワーカーノードに転送 # -mca pml ob1 -mca btl ^openib: ポイントツーポイントメッセージングに InfiniBand の代わりに TCP を使用 mpirun -np 2 --allow-run-as-root \ -bind-to none -map-by slot \ -x LD_LIBRARY_PATH -x PATH \ -mca pml ob1 -mca btl ^openib \ python /root/code/DeepSpeedExamples/training/cifar/cifar10_tutorial.py -
[OK] をクリックします。
オプション 2:DeepSpeed (pdsh)
上記の mpirun コマンドの代わりに、この起動コマンドを使用します。その他のパラメータはすべて同じです。
cd /root/code/DeepSpeedExamples/training/pipeline_parallelism
# --hostfile: DLC がすべてのノードアドレスを含むこのファイルを自動生成
# -p 2: パイプラインステージの数
# --steps 200: トレーニングステップの合計数
deepspeed --hostfile /etc/mpi/hostfile train.py \
--deepspeed_config=ds_config.json \
-p 2 \
--steps=200
DeepSpeed でカスタムイメージを使用するには、必要な MPI および DeepSpeed ライブラリをイメージにインストールします。DockerHub の公式 DeepSpeed イメージには、これらのライブラリが事前にインストールされています。
ステップ 3:ジョブの詳細とログの表示
-
ジョブを投入した後、[Deep Learning Containers (DLC)] ページでジョブ名をクリックします。
-
ジョブの詳細ページで、基本情報と実行ステータスを確認します。
-
ページの下部にある[インスタンス]セクションで、タイプが[ランチャー]のインスタンスを見つけ、[操作]列の[ログ]をクリックします。

システム環境変数
DLC は、ランチャーロールに対して以下の環境変数を事前構成します。環境で異なる設定が必要な場合は、起動コマンドでこれらを上書きしてください。
| 環境変数 | 説明 | デフォルト値 | 適用対象 |
|---|---|---|---|
OMPI_MCA_btl_tcp_if_include |
ランチャーとワーカー間の通信に使用するネットワークインターフェイスコントローラー (NIC)。複数の NIC を指定する場合はカンマで区切ります。 | eth0 |
mpirun |
OMPI_MCA_orte_default_hostfile |
mpirun コマンドのホストファイルパス。DLC がこのファイルを自動生成します。 | /etc/mpi/hostfile |
|
OMPI_MCA_plm_rsh_agent |
ランチャーがリモートノードでワーカープロセスを起動するために使用する方法。 | /etc/mpi/kubexec.sh |
|
PDSH_RCMD_TYPE |
pdsh のリモートコマンドタイプ。 | ssh |
DeepSpeed (pdsh) |
上書きが必要な場合: ノード間通信に eth0 以外の NIC (例: eth1 やボンディングインターフェイス) を使用する場合は、 OMPI_MCA_btl_tcp_if_include を上書きします。クラスターが SSH 以外のリモート実行方法を必要とする場合は、 PDSH_RCMD_TYPE を上書きします。