Deep Learning Containers (DLC) of Platform for AI (PAI) は、機械学習のための柔軟で安定した使いやすい高性能なトレーニング環境を提供するオールインワンのクラウドネイティブ深層学習プラットフォームです。 このトピックでは、mpirunとDeepSpeedを使用して、DLCでMPIJobタイプの分散トレーニングジョブを送信する方法について説明します。
前提条件
DLCがアクティブになり、デフォルトのワークスペースが作成されます。 詳細については、「PAIの有効化とデフォルトワークスペースの作成」をご参照ください。
インテリジェントコンピューティングLingjunリソースはリソースグループで購入され、リソースクォータが作成されます。 詳細については、「Lingjun resource quotas」をご参照ください。
制限事項
中国 (Ulanqab) リージョンでのみ、Lingjunリソースを使用してMPIJobトレーニングジョブを送信できます。
MPIJobトレーニング求人
MPIJobタイプの分散トレーニングジョブを送信するには、次の手順を実行します。
手順1: コードソースの準備
公式のDeepSpeedの例を使用して、データセットを作成します。 必要なパラメーターを設定します。 次のセクションでは、主要なパラメーターについて説明します。 他のパラメーターについてはデフォルト値を使用します。 詳細については、「コードビルド」をご参照ください。
名前: データセットの名前。 この例では、deepspeed-examplesが使用されます。
Gitリポジトリ: https://github.com/microsoft/DeepSpeedExamples.git
ステップ2: 分散トレーニングジョブの送信
次のいずれかの方法を使用して、分散トレーニングジョブを送信できます。
mpirun
[ジョブの作成] ページに移動します。
PAIコンソールにログインします。
左側のナビゲーションウィンドウで、[ワークスペース] をクリックします。 管理するワークスペースを見つけて、ワークスペースIDをクリックします。
[ワークスペース] ページの左側のナビゲーションウィンドウで、 を選択します。 [分散トレーニングジョブ] ページで、[ジョブの作成] をクリックします。 [ジョブの作成] ページが表示されます。
[ジョブの作成] ページで、次のキーパラメーターを設定します。 詳細については、「トレーニングジョブの送信」をご参照ください。
ノードイメージ: この例では、テストイメージが提供され、MPIJobタイプの分散トレーニングジョブを送信するために使用されます。 [画像アドレス] をクリックし、フィールドに
[registry.cn-wulanchabu.aliyuncs.com/pai-dlc/deepspeed-training:23.08-gpu-py310-cu122-ubuntu22.04]
と入力します。Startup Command: 分散トレーニングジョブのすべてのノードで実行されるコマンド。 この例では、システム環境変数のデフォルト設定が使用されています。 コマンドで環境変数を設定して、デフォルトの設定を上書きできます。 詳細については、「システム環境変数」をご参照ください。
cd /root/code/DeepSpeedExamples/training/cifar/ # --np 2 Start two nodes. 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
リソースクォータ: 作成したリソースクォータを選択します。
フレームワーク: [MPIJob] を選択します。
ジョブリソース: ノードを2、vCPUを4、GPUを1、メモリ (GiB) を8、共有メモリ (GiB) を8に設定します。
ドライバー設定: 上記のテストイメージを使用する場合は、ドライバーのバージョンを535.54.03に設定することを推奨します。
[OK] をクリックします。
DeepSpeed (pdsh)
このメソッドを使用して分散トレーニングジョブを送信する場合は、Startup Commandに次のコードを使用します。 その他のパラメータの設定は、mpirunメソッドの設定と同じです。
cd /root/code/DeepSpeedExamples/training/pipeline_parallelism
deepspeed --hostfile /etc/mpi/hostfile train.py --deepspeed_config=ds_config.json -p 2 --steps=200
カスタムイメージを使用してDeepSpeedジョブを実行する場合は、イメージにMPIJobとDeepSpeedに必要なライブラリをインストールする必要があります。 DockerHubから公式のDeepSpeedイメージを取得することもできます。 MPIJobとDeepSpeedに必要なライブラリは、公式イメージにプリインストールされています。
この例では、システム環境変数のデフォルト設定が使用されています。 startupコマンドで環境変数を設定して、デフォルトの設定を上書きすることもできます。 詳細については、「システム環境変数」をご参照ください。
ステップ3: ジョブの詳細とログの表示
ジョブが送信されたら、[Deep Learning Containers (DLC)] ページでジョブの名前をクリックします。
ジョブの詳細ページで、ジョブの基本情報と実行ステータスを表示します。
ジョブの詳細ページの下部にある [インスタンス] セクションで、タイプがランチャーのインスタンスを見つけ、[操作] 列の [ログ] をクリックしてジョブの実行ステータスを表示します。
システム環境変数
MPI分散ジョブは、ランチャーとワーカーの2つの役割を使用します。 役割はトレーニング中に互いにコミュニケーションする必要があります。 デフォルトでは、DLCはランチャーロールの環境変数を構成します。 ビジネス要件に基づいて既定の設定を上書きするように環境変数を設定できます。 次の表に、環境変数を示します。
環境変数 | 説明 | デフォルト値 | シナリオ |
OMPI_MCA_btl_tcp_if_include | ランチャーとワーカーロール間の通信用のネットワークインターフェイスコントローラー (NIC) を指定します。 複数のNICはコンマ (,) で区切ります。 | eth0 | mpirunを使用してジョブを開始するのに適しています。 |
OMPI_MCA_orte_default_hostfile | mpirunコマンドのホストファイルを指定します。 ホストファイルはDLCで自動的に生成できます。 |
| |
OMPI_MCA_plm_rsh_agent | ランチャーロールのワーカージョブをリモートで開始する方法を指定します。 |
| |
PDSH_RCMD_TYPE | PDSHのリモートコマンドタイプ。 | ssh | DeepSpeedを使用してジョブを開始するのに適しています。 |