Deep Learning Containers (DLC) を使用すると、手動でマシンをプロビジョニングしたり環境を構成したりすることなく、シングルノードまたは分散トレーニングジョブを迅速に作成できます。このチュートリアルでは、MNIST 手書き数字認識タスクを使用して、シングルノード・シングル GPU とマルチノード・マルチ GPU の両方のトレーニングにおけるエンドツーエンドのプロセスを説明します。
MNIST 手書き数字認識は、ディープラーニングにおける古典的な入門タスクです。目標は、10 種類の手書き数字 (0 から 9) を認識する機械学習モデルを構築することです。
1. 前提条件
メインアカウントを使用して PAI を有効化し、ワークスペースを作成します。PAI コンソールにログインし、左上隅でリージョンを選択してから、プロンプトに従って権限を付与し、サービスを有効化します。
2. 課金
このチュートリアルの例では、パブリックリソースを使用して DLC ジョブを作成し、従量課金制で課金されます。詳細については、「Deep Learning Containers (DLC) の課金」をご参照ください。
3. シングルノード・シングル GPU トレーニング
3.1 データセットの作成
データセットには、トレーニングコード、データ、モデルアーティファクトが保存されます。このセクションでは、Alibaba Cloud Object Storage Service (OSS) に基づくデータセットの使用方法について説明します。
PAI コンソールの左側のナビゲーションウィンドウで、データセット > カスタムデータセット > データセットの作成 を選択します。
次の主要なパラメーターを設定し、その他のパラメーターはデフォルト値のままにします。
名前:たとえば、
dataset_mnistと入力します。ストレージクラス:Object Storage Service (OSS) を選択します。
OSS パス:フォルダアイコン
をクリックし、バケットを選択して、dlc_mnistなどの新しいディレクトリを作成します。OSS を有効化していない場合、または現在のリージョンで利用可能なバケットがない場合は、次の手順に従って OSS を有効化し、バケットを作成します。
[確認] をクリックしてデータセットを作成します。
トレーニングコードとデータをアップロードします。
提供されているトレーニングスクリプト mnist_train.py をダウンロードします。プロセスを簡略化するため、このスクリプトは実行時にトレーニングデータをデータセットの dataSet ディレクトリに自動的にダウンロードします。
ご自身のプロジェクトでは、コードとトレーニングデータを事前に PAI データセットにアップロードできます。
コードをアップロードします。データセットの詳細ページで、データを表示 をクリックして OSS コンソールに移動します。次に、オブジェクト > ファイルの選択 > アップロード をクリックして、トレーニングスクリプトを OSS にアップロードします。
3.2 DLC ジョブの作成
PAI コンソールの左側のナビゲーションウィンドウで、コンテナトレーニング (DLC) > タスクの作成 を選択します。
次の主要なパラメーターを設定し、その他のパラメーターはデフォルト値のままにします。パラメーターの完全なリストについては、「トレーニングジョブの作成」をご参照ください。
イメージの構成:イメージアドレス を選択し、ご利用の リージョン に適したイメージアドレスを入力します。
コンソールの上部のナビゲーションバーで、[リージョン] セレクターを使用して、現在のリージョン (例:中国 (杭州)) を確認します。
リージョン
イメージアドレス
中国 (北京)
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 を検索し、イメージアドレスの <Region ID> を置き換えて完全な URL を取得します。
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 インスタンスタイプを選択できます。
OK をクリックしてジョブを作成します。ジョブの実行には約 15 分かかります。実行中に、[ログ] をクリックしてトレーニングの進捗を確認できます。
トレーニングログから、MNIST モデルがエポック 18 で 9886/10000 (約 99%) の検証精度に達したことがわかります。ジョブのステータスが[成功]に変更されると、ログに最終出力
Training complete. writer.close()が表示されます。ジョブが完了すると、DLC は最適なモデルチェックポイントと TensorBoard ログを、マウントされたデータセットの
outputパスに保存します。OSS バケットの
dlc_mnist/ディレクトリには、トレーニングデータ用のdataSet/サブディレクトリ、モデルアーティファクト用のoutput/サブディレクトリ、およびmnist_train.pyスクリプトが含まれるようになります。
3.3 (オプション) TensorBoard での表示
TensorBoard の可視化ツールを使用して損失曲線を表示し、トレーニングプロセスをより深く理解できます。
DLC ジョブで TensorBoard を使用するには、データセットを設定する必要があります。
DLC job の詳細ページで、Tensorboard タブをクリックして、Tensorboardの新規作成 をクリックします。
構成タイプ を タスク別 に設定します。Summary 目次 には、トレーニングコードで SummaryWriter がデータを保存するパス
/mnt/data/output/runs/を入力します。OK をクリックして開始します。これは、次のコードスニペットに対応します:
writer = SummaryWriter('/mnt/data/output/runs/mnist_experiment')Tensorboard の表示 をクリックして、train_loss 曲線 (トレーニングセットの損失) と validation_loss 曲線 (検証データセットの損失) を確認します。

3.4 トレーニング済みモデルのデプロイ
詳細については、「V. EAS を使用したモデルサービスのデプロイ」をご参照ください。
4. 複数 GPU での分散トレーニング
単一の GPU のメモリがモデルに対して不足している場合や、トレーニングを高速化したい場合は、マルチ GPU またはマルチノードの分散トレーニングジョブを作成します。
このセクションでは、それぞれが単一の GPU を持つ 2 つのインスタンスを例として使用します。他のマルチ GPU およびマルチノード構成にも同じ手順が適用されます。
4.1 データセットとスクリプトの準備
「3. シングルノード・シングル GPU トレーニング」セクションで既にデータセットを作成している場合は、mnist_train_distributed.py をダウンロードしてアップロードするだけです。そうでない場合は、まず「3.1 データセットの作成」を行い、その後コードをアップロードします。
4.2 分散 DLC ジョブの作成
PAI コンソールの左側のナビゲーションウィンドウで、分散トレーニング (DLC) > タスクの作成 を選択します。
次の主要なパラメーターを設定し、その他のパラメーターはデフォルト値のままにします。パラメーターの完全なリストについては、「トレーニングジョブの作成」をご参照ください。
イメージの構成:イメージアドレス を選択し、ご利用の リージョン に適したイメージアドレスを入力します。
リージョン
イメージアドレス
中国 (北京)
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 を検索し、イメージアドレスの <Region ID> を置き換えて完全な URL を取得します。
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 インスタンスタイプを選択できます。
OK をクリックしてジョブを作成します。ジョブの実行には約 10 分かかります。実行中に、概要 ページで両方のインスタンスのトレーニング ログ を表示できます。
ジョブが完了すると、DLC は最適なモデルチェックポイントと TensorBoard ログを、マウントされたデータセットの
output_distributedパスに保存します。
4.3 (オプション) TensorBoard での表示
TensorBoard の可視化ツールを使用して損失曲線を表示し、トレーニングプロセスをより深く理解できます。
DLC ジョブで TensorBoard を使用するには、データセットを設定する必要があります。
DLC ジョブの詳細ページで、TensorBoard タブをクリックし、Tensorboardの新規作成 をクリックします。
構成タイプ を タスク別 に設定します。Summary 目次 には、トレーニングコードがサマリーファイルを保存するパス
/mnt/data/output_distributed/runsを入力します。OK をクリックして開始します。これは、コードスニペット
writer = SummaryWriter('/mnt/data/output_distributed/runs/mnist_experiment')Tensorboard の表示 をクリックして、train_loss 曲線 (トレーニングセットの損失) と validation_loss 曲線 (検証データセットの損失) を確認します。

4.4 トレーニング済みモデルのデプロイ
詳細については、「V. EAS を使用したモデルサービスのデプロイ」をご参照ください。
5. 関連情報
DLC の機能に関する詳細については、「Deep Learning Containers (DLC)」をご参照ください。