Deep Learning Containers (DLC) を使用すると、分散型または単一ノードのトレーニングジョブを迅速に作成できます。Kubernetes 上に構築された DLC は、手動でマシンを購入してランタイム環境を設定する必要がなく、既存のワークフローを変更することなく使用できます。このトピックでは、MNIST の手書き認識タスクを例に、DLC を使用して単一ノード、単一 GPU のトレーニングと、複数ノード、複数 GPU の分散トレーニングを行う方法を説明します。
MNIST の手書き認識は、ディープラーニングにおける古典的な入門タスクです。その目的は、10 種類の手書き数字 (0 から 9) を認識する機械学習モデルを構築することです。

前提条件
Alibaba Cloud アカウントを使用して Platform for AI (PAI) をアクティブ化し、ワークスペースを作成します。PAI コンソールにログインします。左上のコーナーでリージョンを選択します。その後、必要な権限を付与し、プロダクトをアクティブ化します。
課金
このトピックの例では、パブリックリソースを使用して DLC ジョブを作成します。課金方法は従量課金です。課金ルールの詳細については、「Deep Learning Containers (DLC) の課金」をご参照ください。
単一ノード、単一 GPU トレーニング
データセットの作成
データセットには、モデルトレーニングのためのコード、データ、および結果が保存されます。このトピックでは、Object Storage Service (OSS) データセットを例として使用します。
PAI コンソールの左側のナビゲーションウィンドウで、[データセット] > [カスタムデータセット] > [データセットの作成] をクリックします。
データセットのパラメーターを設定します。主要なパラメーターは以下の通りです。その他のパラメーターはデフォルト値を使用できます。
[名前]: 例:
dataset_mnist。[ストレージタイプ]: [Alibaba Cloud Object Storage Service (OSS)]。
[OSS パス]:
アイコンをクリックし、[バケット] を選択し、dlc_mnistなどの新しいフォルダーを作成します。OSS をアクティブ化していない場合、または現在のリージョンで利用可能なバケットがない場合は、以下の手順に従って OSS をアクティブ化し、バケットを作成します:
[確認] をクリックしてデータセットを作成します。
トレーニングコードとデータをアップロードします。
mnist_train.py をクリックして、提供されているトレーニングコードをダウンロードします。プロセスを簡略化するため、コードは実行時にデータセットの dataSet フォルダーにトレーニングデータを自動的にダウンロードするように設定されています。
本番環境で使用する場合は、事前にコードとトレーニングデータを PAI データセットにアップロードできます。
コードをアップロードします。データセットの詳細ページで、[データの表示] をクリックして OSS コンソールを開きます。次に、[オブジェクトのアップロード] > [ファイルの選択] > [オブジェクトのアップロード] をクリックして、トレーニングコードを OSS にアップロードします。

DLC ジョブの作成
PAI コンソールの左側のナビゲーションウィンドウで、[Deep Learning Containers (DLC)] > [ジョブの作成] をクリックします。

DLC ジョブのパラメーターを設定します。主要なパラメーターは以下の通りです。その他のパラメーターはデフォルト値を使用できます。すべてのパラメーターの詳細については、「トレーニングジョブの作成」をご参照ください。
[イメージ設定]: [イメージアドレス] を選択し、ご利用の [リージョン] のイメージ URL を入力します。

リージョン
イメージ URL
中国 (北京)
dsw-registry-vpc.cn-beijing.cr.aliyuncs.com/pai/modelscope:1.28.0-pytorch2.3.1tensorflow2.16.1-gpu-py311-cu121-ubuntu22.04
中国 (上海)
dsw-registry-vpc.cn-shanghai.cr.aliyuncs.com/pai/modelscope:1.28.0-pytorch2.3.1tensorflow2.16.1-gpu-py311-cu121-ubuntu22.04
中国 (杭州)
dsw-registry-vpc.cn-hangzhou.cr.aliyuncs.com/pai/modelscope:1.28.0-pytorch2.3.1tensorflow2.16.1-gpu-py311-cu121-ubuntu22.04
その他のリージョン
リージョン ID を検索し、イメージ URL の <Region ID> を置き換えて完全なリンクを取得します:
dsw-registry-vpc.<Region ID>.cr.aliyuncs.com/pai/modelscope:1.28.0-pytorch2.3.1tensorflow2.16.1-gpu-py311-cu121-ubuntu22.04
このイメージは、「インタラクティブモデリング (DSW) のクイックスタート」の環境と互換性があることが確認されています。PAI を使用したモデリングの典型的なワークフローは、まず DSW で環境を検証してコードを開発し、次に DLC を使用してトレーニングを行うことです。
[データセットのマウント]: [カスタムデータセット] を選択し、前のステップで作成したデータセットを選択します。デフォルトの [マウントパス] は
/mnt/dataです。起動コマンド:
python /mnt/data/mnist_train.pyこの起動コマンドは、DSW またはローカルで実行する場合と同じです。ただし、
mnist_train.pyは/mnt/data/にマウントされるため、コードパスを/mnt/data/mnist_train.pyに更新する必要があります。[ソース]: [パブリックリソース] を選択します。[リソースタイプ] には、
ecs.gn7i-c8g1.2xlargeを選択します。このインスタンス仕様が在庫切れの場合は、別の GPU インスタンスを選択できます。
[確認] をクリックしてジョブを作成します。ジョブの完了には約 15 分かかります。ログをクリックすると、トレーニングプロセスをモニターできます。

ジョブが完了すると、最適なモデルのチェックポイントと TensorBoard のログが、マウントされたデータセットの
outputパスに保存されます。
(オプション) TensorBoard の表示
TensorBoard 可視化ツールを使用して、損失曲線を表示し、トレーニングの詳細を理解できます。
DLC ジョブで TensorBoard を使用するには、データセットを設定する必要があります。
DLC ジョブの詳細ページで、[TensorBoard] タブをクリックし、次に [TensorBoard の作成] をクリックします。

[設定タイプ] を [タスクごと] に設定します。[サマリーパス] には、トレーニングコードでサマリーが保存されるパス
/mnt/data/output/runs/を入力します。[確認] をクリックして開始します。これはコードスニペット
writer = SummaryWriter('/mnt/data/output/runs/mnist_experiment')[TensorBoard の表示] をクリックして、トレーニングデータセット (train_loss) と検証セット (validation_loss) の損失曲線を表示します。

トレーニング済みモデルのデプロイ
詳細については、「EAS を使用してモデルをオンラインサービスとしてデプロイする」をご参照ください。
単一ノード複数 GPU または複数ノード複数 GPU の分散トレーニング
単一 GPU のビデオメモリがトレーニングのニーズに不十分な場合、またはトレーニングプロセスを高速化したい場合は、単一ノード複数 GPU または複数ノード複数 GPU の分散トレーニングジョブを作成できます。
このトピックでは、それぞれ 1 つの GPU を持つ 2 つのインスタンスの例を使用します。この例は、単一ノード複数 GPU または複数ノード複数 GPU トレーニングの他の構成にも適用されます。
データセットの作成
単一ノード、単一 GPU トレーニング中にすでにデータセットを作成している場合は、mnist_train_distributed.py コードをダウンロードしてアップロードするだけで済みます。そうでない場合は、まずデータセットを作成し、次にコードをアップロードする必要があります。
DLC ジョブの作成
PAI コンソールの左側のナビゲーションウィンドウで、[Deep Learning Containers (DLC)] > [ジョブの作成] をクリックします。

DLC ジョブのパラメーターを設定します。主要なパラメーターは以下の通りです。その他のパラメーターはデフォルト値を使用できます。すべてのパラメーターの詳細については、「トレーニングジョブの作成」をご参照ください。
[イメージ設定]: [イメージアドレス] を選択し、ご利用の [リージョン] のイメージ URL を入力します。

リージョン
イメージ URL
中国 (北京)
dsw-registry-vpc.cn-beijing.cr.aliyuncs.com/pai/modelscope:1.28.0-pytorch2.3.1tensorflow2.16.1-gpu-py311-cu121-ubuntu22.04
中国 (上海)
dsw-registry-vpc.cn-shanghai.cr.aliyuncs.com/pai/modelscope:1.28.0-pytorch2.3.1tensorflow2.16.1-gpu-py311-cu121-ubuntu22.04
中国 (杭州)
dsw-registry-vpc.cn-hangzhou.cr.aliyuncs.com/pai/modelscope:1.28.0-pytorch2.3.1tensorflow2.16.1-gpu-py311-cu121-ubuntu22.04
その他のリージョン
リージョン ID を検索し、イメージ URL の <Region ID> を置き換えて完全なリンクを取得します:
dsw-registry-vpc.<Region ID>.cr.aliyuncs.com/pai/modelscope:1.28.0-pytorch2.3.1tensorflow2.16.1-gpu-py311-cu121-ubuntu22.04
このイメージは、「インタラクティブモデリング (DSW) のクイックスタート」の環境と互換性があることが確認されています。PAI を使用したモデリングの典型的なワークフローは、まず DSW で環境とコードを検証し、次に DLC を使用してトレーニングを行うことです。
[データセットのマウント]: [カスタムデータセット] を選択し、前のステップで作成したデータセットを選択します。デフォルトの [マウントパス] は
/mnt/dataです。[起動コマンド]:
torchrun --nproc_per_node=1 --nnodes=${WORLD_SIZE} --node_rank=${RANK} --master_addr=${MASTER_ADDR} --master_port=${MASTER_PORT} /mnt/data/mnist_train_distributed.pyDLC は、
MASTER_ADDR、WORLD_SIZE環境変数$VARIABLE_NAME[ソース]: [パブリックリソース] を選択します。[数量] を 2 に設定します。[リソースタイプ] には、
ecs.gn7i-c8g1.2xlargeを選択します。このインスタンス仕様が在庫切れの場合は、別の GPU インスタンスを選択できます。
[確認] をクリックしてジョブを作成します。ジョブの実行には約 10 分かかります。ジョブの実行中、[概要] ページで両方のインスタンスのトレーニング [ログ] を表示できます。

ジョブが完了すると、最適なモデルのチェックポイントと TensorBoard のログが、マウントされたデータセットの
output_distributedパスに保存されます。
(オプション) TensorBoard の表示
TensorBoard 可視化ツールを使用して、損失曲線を表示し、トレーニングの詳細を理解できます。
DLC ジョブで TensorBoard を使用するには、データセットを設定する必要があります。
DLC ジョブの詳細ページで、[TensorBoard] タブをクリックし、次に [TensorBoard の作成] をクリックします。

[設定タイプ] を [タスクごと] に設定します。[サマリーパス] には、トレーニングコードでサマリーが保存されるパス
/mnt/data/output_distributed/runsを入力します。[確認] をクリックして開始します。これはコードスニペット
writer = SummaryWriter('/mnt/data/output_distributed/runs/mnist_experiment')[TensorBoard の表示] をクリックして、トレーニングデータセット (train_loss) と検証セット (validation_loss) の損失曲線を表示します。

トレーニング済みモデルのデプロイ
詳細については、「EAS を使用してモデルをオンラインサービスとしてデプロイする」をご参照ください。
関連ドキュメント
DLC の特徴の詳細については、「Deep Learning Containers (DLC)」をご参照ください。
