Deep Learning Containers (DLC) を使用すると、シングルノードまたは分散トレーニングジョブを迅速に作成して実行できます。Kubernetes 上に構築された DLC は、マシンの手動プロビジョニングやランタイム環境の設定の手間を省き、通常のワークフローを変更することなく迅速に開始できます。このチュートリアルでは、MNIST の手書き数字認識タスクを例に、DLC でシングルノード、シングル GPU トレーニングとマルチノード、マルチ GPU 分散トレーニングを実行する方法を説明します。
MNIST の手書き数字認識タスクは、深層学習で最も古典的な入門タスクの 1 つです。目標は、10 種類の手書き数字 (0 から 9) を認識するための機械学習モデルを構築することです。

前提条件
Alibaba Cloud アカウントを使用して PAI を有効化し、ワークスペースを作成します。PAI コンソールにログインし、左上隅でリージョンを選択し、プロンプトに従って権限を付与し、製品を有効化します。
課金
このチュートリアルの例では、パブリックリソースを使用して DLC ジョブを作成します。これらのジョブは従量課金制で請求されます。課金ルールの詳細については、「Deep Learning Containers (DLC) の課金」をご参照ください。
シングルノード、シングル GPU トレーニング
データセットの作成
データセットには、コード、データ、およびトレーニング結果が格納されます。このチュートリアルでは、Object Storage Service (OSS) のデータセットを例として使用します。
-
PAI コンソールの左側メニューで、Datasets > Custom Dataset > Create datasets を選択します。
-
データセットのパラメータを設定します。以下は主要なパラメータです。他のパラメータはデフォルト値のままでかまいません。
-
Name:例:
dataset_mnist。 -
Storage Type:OSS。
-
OSS Path:
アイコンをクリックし、バケットを選択して、dlc_mnistなどのディレクトリを作成します。OSS を有効化していない場合、または現在のリージョンで利用可能なバケットがない場合は、次の手順に従って OSS を有効化し、バケットを作成します。
[OK] をクリックしてデータセットを作成します。
-
-
トレーニングコードとデータをアップロードします。
-
コードをダウンロードします。このチュートリアルでは、必要なトレーニングスクリプトを提供しています。mnist_train.py をクリックしてダウンロードします。手作業を減らすため、スクリプトは実行時にトレーニングデータをデータセットの dataSet ディレクトリに自動的にダウンロードします。
本番環境で使用する場合は、事前にコードとトレーニングデータを PAI データセットにアップロードすることを推奨します。
-
コードをアップロードします。データセットの詳細ページで、View Data をクリックして OSS コンソールに移動します。次に、オブジェクト >ファイルの選択 > アップロード をクリックして、トレーニングスクリプトを OSS にアップロードします。
-
DLC ジョブの作成
-
PAI コンソールの左側メニューで、Deep Learning Containers (DLC) > Create Job を選択します。
-
DLC ジョブのパラメータを設定します。以下は主要なパラメータです。残りのパラメータはデフォルト値のままでかまいません。パラメータの完全なリストについては、「トレーニングジョブの作成」をご参照ください。
-
Image Configuration:Image Address を選択し、現在の Region に対応するイメージ URL を入力します。
コンソールの上部メニューの [Region] セレクターで、現在のリージョン (例:中国 (杭州)) を確認します。
リージョン
イメージ 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 の <リージョンID> を置き換えて、完全な URL を取得してください。
dsw-registry-vpc.<リージョンID>.cr.aliyuncs.com/pai/modelscope:1.28.0-pytorch2.3.1tensorflow2.16.1-gpu-py311-cu121-ubuntu22.04
このイメージは、「PAI-DSW を使用したインタラクティブモデリングのクイックスタート」で検証済みです。一般的な PAI ワークフローとして、PAI-DSW でコードを開発・検証してから、DLC を使用してトレーニングを行います。
-
Dataset Mount:Custom Dataset を選択し、前の手順で作成したデータセットを選択します。デフォルトの Mount Path は
/mnt/dataです。 -
Startup Command:
python /mnt/data/mnist_train.pyこの起動コマンドは、PAI-DSW やローカルで実行する場合と同じです。しかし、
mnist_train.pyが/mnt/data/にマウントされるようになったため、コマンド内のスクリリプトパスはマウント先を反映して/mnt/data/mnist_train.pyに更新されます。 -
Source:Public Resources を選択します。Resource Type には、
ecs.gn7i-c8g1.2xlargeを選択します。このインスタンスタイプが在庫切れの場合は、別の GPU インスタンスタイプを選択できます。
OK をクリックしてジョブを作成します。ジョブの完了には約 15 分かかります。実行中に、[Logs] をクリックしてトレーニングの進捗状況を確認できます。
トレーニングログでは、MNIST モデルはエポック 18 で 9886/10000 (約 99%) の検証精度を達成しました。ジョブのステータスは [Succeeded] で、最終的な出力は
Training complete. writer.close()です。ジョブが完了すると、最適なモデルチェックポイントと TensorBoard ログは、マウントされたデータセットの
outputパスに保存されます。OSS バケット内の
dlc_mnist/ディレクトリには、dataSet/サブディレクトリ (トレーニングデータ)、output/サブディレクトリ (モデル出力)、およびmnist_train.pyトレーニングスクリプトが含まれています。 -
TensorBoard の表示 (オプション)
TensorBoard 可視化ツールを使用して損失曲線を表示し、トレーニングプロセスの詳細を確認できます。
DLC ジョブで TensorBoard を使用するには、データセットを設定する必要があります。
-
DLC ジョブの詳細ページで、Tensorboard タブをクリックし、Create TensorBoard をクリックします。
-
Configuration Type を By Task に設定します。Summary Path には、トレーニングコードで指定されたサマリーパス
/mnt/data/output/runs/を入力します。OK をクリックして開始します。これは、コードスニペット
writer = SummaryWriter('/mnt/data/output/runs/mnist_experiment')に相当します。 -
View TensorBoard をクリックして、
Loss/train曲線 (トレーニングセットの損失を示す) とLoss/validation曲線 (検証セットの損失を示す) を表示します。
トレーニング済みモデルのデプロイ
詳細については、「PAI-EAS を使用してモデルをサービスとしてデプロイする」をご参照ください。
分散トレーニング
シングル GPU のビデオメモリではトレーニング要件に対して不十分な場合、またはトレーニングプロセスを高速化したい場合は、シングルノード、マルチ GPU またはマルチノード、マルチ GPU の分散トレーニングジョブを作成できます。
このチュートリアルでは、それぞれが 1 つの GPU を持つ 2 つのインスタンスの例を使用します。この例は、他のシングルノード、マルチ GPU またはマルチノード、マルチ GPU のトレーニング設定にも適用されます。
データセットの作成
シングルノード、シングル GPU トレーニング用にすでにデータセットを作成している場合は、mnist_train_distributed.py スクリプトをダウンロードしてアップロードするだけです。それ以外の場合は、まずデータセットを作成してからスクリプトをアップロードしてください。
DLC ジョブの作成
-
PAI コンソールの左側メニューで、Deep Learning Containers (DLC) > Create Job を選択します。
-
DLC ジョブのパラメータを設定します。以下は主要なパラメータです。残りのパラメータはデフォルト値のままでかまいません。パラメータの完全なリストについては、「トレーニングジョブの作成」をご参照ください。
-
Image Configuration:Image Address を選択し、現在の Region に対応するイメージ 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 の <リージョンID> を置き換えて、完全な URL を取得してください。
dsw-registry-vpc.<リージョンID>.cr.aliyuncs.com/pai/modelscope:1.28.0-pytorch2.3.1tensorflow2.16.1-gpu-py311-cu121-ubuntu22.04
このイメージは、「PAI-DSW を使用したインタラクティブモデリングのクイックスタート」で検証済みです。一般的な PAI ワークフローとして、PAI-DSW でコードを開発・検証してから、DLC を使用してトレーニングを行います。
-
Dataset Mount:Custom Dataset を選択し、前の手順で作成したデータセットを選択します。デフォルトの Mount Path は
/mnt/dataです。 -
Startup Command:
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形式を使用します。 -
Source には、Public Resources を選択します。Number of Nodes を 2 に設定します。Resource Type には、
ecs.gn7i-c8g1.2xlargeを選択します。このインスタンスタイプが在庫切れの場合は、別の GPU インスタンスタイプを選択できます。
Confirm をクリックしてジョブを作成します。ジョブの完了には約 10 分かかります。実行中に、Overview ページで両方のインスタンスの Log を表示できます。
ジョブが完了すると、最適なモデルチェックポイントと TensorBoard ログが、マウントされたデータセットの
output_distributedパスに保存されます。 -
TensorBoard の表示 (オプション)
TensorBoard 可視化ツールを使用して損失曲線を表示し、トレーニングプロセスの詳細を確認できます。
DLC ジョブで TensorBoard を使用するには、データセットを設定する必要があります。
-
DLC ジョブの詳細ページで、TensorBoard タブをクリックし、Create TensorBoard をクリックします。
-
Configuration Type を By Task に設定します。Summary Path に、トレーニングコードで指定されたサマリーパス
/mnt/data/output_distributed/runsを入力します。OK をクリックして開始します。これは、以下のコードスニペットに対応します:
writer = SummaryWriter('/mnt/data/output_distributed/runs/mnist_experiment') -
View TensorBoard をクリックして、
Loss/train曲線 (トレーニングセットの損失を示す) とLoss/validation曲線 (検証セットの損失を示す) を表示します。
トレーニング済みモデルのデプロイ
詳細については、「PAI-EAS を使用してモデルをサービスとしてデプロイする」をご参照ください。
関連ドキュメント
-
DLC の機能の詳細については、「Deep Learning Containers (DLC)」をご参照ください。