すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:Arena を使用してスタンドアロンの PyTorch トレーニングジョブを送信する

最終更新日:Mar 01, 2025

PyTorch は、さまざまなディープ ラーニング モデルのトレーニングジョブで広く使用されているオープンソースの深層学習フレームワークです。このトピックでは、Arena を使用して単一の GPU または複数の GPU を使用するスタンドアロンの PyTorch トレーニングジョブを送信する方法と、TensorBoard を使用してトレーニングジョブを視覚化する方法について説明します。

前提条件

背景情報

リモート Git リポジトリからトレーニングコードをダウンロードし、NAS ファイルシステム (NAS) に基づく永続ボリューム (PV) と永続ボリューム要求 (PVC) を含む共有ストレージシステムからトレーニングデータを読み取る必要があります。torchrun は、分散トレーニングジョブを簡素化および管理するために PyTorch によって提供されるコマンドラインツールです。この例では、torchrun を使用して、単一の GPU または複数の GPU を使用するスタンドアロンの PyTorch トレーニングジョブを実行します。トレーニングコードの詳細については、「main.py」をご参照ください。

手順

ステップ 1:GPU リソースを表示する

次のコマンドを実行して、クラスタで使用可能な GPU リソースをクエリします。

arena top node

予期される出力:

NAME                        IPADDRESS        ROLE    STATUS  GPU(Total)  GPU(Allocated)
cn-beijing.192.168.xxx.xxx  192.168.xxx.xxx  <none>  Ready   0           0
cn-beijing.192.168.xxx.xxx  192.168.xxx.xxx  <none>  Ready   0           0
cn-beijing.192.168.xxx.xxx  192.168.xxx.xxx  <none>  Ready   2           0
cn-beijing.192.168.xxx.xxx  192.168.xxx.xxx  <none>  Ready   2           0
---------------------------------------------------------------------------------------------------
Allocated/Total GPUs In Cluster:
0/4 (0.0%)

出力は、クラスタに 2 つの GPU アクセラレーテッドノードが含まれていることを示しています。各 GPU アクセラレーテッドノードには、トレーニングジョブの実行に使用できる 2 つのアイドル GPU が含まれています。

ステップ 2:PyTorch トレーニングジョブを送信する

次のコマンドを実行して、単一の GPU を使用するスタンドアロンの PyTorch トレーニングジョブを送信します。

arena submit pytorch \
    --name=pytorch-mnist \
    --namespace=default \
    --workers=1 \
    --gpus=1 \
    --working-dir=/root \
    --image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/pytorch-with-tensorboard:2.5.1-cuda12.4-cudnn9-runtime \
    --sync-mode=git \
    --sync-source=https://github.com/kubeflow/arena.git \
    --env=GIT_SYNC_BRANCH=v0.13.1 \
    --data=training-data:/mnt \
    --tensorboard \
    --logdir=/mnt/pytorch_data/logs \
    "torchrun /root/code/arena/examples/pytorch/mnist/main.py --epochs 10 --backend nccl --data /mnt/pytorch_data  --dir /mnt/pytorch_data/logs"

予期される出力:

service/pytorch-mnist-tensorboard created
deployment.apps/pytorch-mnist-tensorboard created
pytorchjob.kubeflow.org/pytorch-mnist created
INFO[0002] The Job pytorch-mnist has been submitted successfully
INFO[0002] You can run `arena get pytorch-mnist --type pytorchjob -n default` to check the job status
説明

2 つの GPU など、複数の GPU を使用するスタンドアロンの PyTorch トレーニングジョブを実行する場合は、--gpus=2--nproc-per-node=2 を指定することで、2 つの GPU を割り当てて 2 つのトレーニングプロセスを開始できます。

arena submit pytorch \
    --name=pytorch-mnist \
    --namespace=default \
    --workers=1 \
    --gpus=2 \
    --nproc-per-node=2 \
    --working-dir=/root \
    --image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/pytorch-with-tensorboard:2.5.1-cuda12.4-cudnn9-runtime \
    --sync-mode=git \
    --sync-source=https://github.com/kubeflow/arena.git \
    --env=GIT_SYNC_BRANCH=v0.13.1 \
    --data=training-data:/mnt \
    --tensorboard \
    --logdir=/mnt/pytorch_data/logs \
    "torchrun /root/code/arena/examples/pytorch/mnist/main.py --epochs 10 --backend nccl --data /mnt/pytorch_data  --dir /mnt/pytorch_data/logs"
説明

非公開の Git リポジトリを使用している場合は、GIT_SYNC_USERNAME および GIT_SYNC_PASSWORD 環境変数を設定することで、Git のユーザー名とパスワードを指定できます。

  arena submit pytorch \
        ...
        --sync-mode=git \
        --sync-source=https://github.com/kubeflow/arena.git \
        --env=GIT_SYNC_BRANCH=v0.13.1 \
        --env=GIT_SYNC_USERNAME=<username> \
        --env=GIT_SYNC_PASSWORD=<password> \
        "torchrun /root/code/arena/examples/pytorch/mnist/main.py --epochs 10 --backend nccl --data /mnt/pytorch_data  --dir /mnt/pytorch_data/logs"

arena コマンドは、git-sync を使用してソースコードを同期します。これにより、git-sync プロジェクトで定義されている環境変数を使用できます。

重要

この例では、ソースコードは GitHub リポジトリからプルされます。ネットワーク関連の理由でコードをプルできない場合は、共有ストレージシステムにコードを手動でダウンロードできます。NAS の /code/github.com/kubeflow/arena パスにコードをダウンロードした後、次のコードを使用してトレーニングジョブを送信できます。

arena submit pytorch \
    --name=pytorch-mnist \
    --namespace=default \
    --workers=1 \
    --gpus=1 \
    --working-dir=/root \
    --image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/pytorch-with-tensorboard:2.5.1-cuda12.4-cudnn9-runtime \
    --data=training-data:/mnt \
    --tensorboard \
    --logdir=/mnt/pytorch_data/logs \
    "torchrun /mnt/code/github.com/kubeflow/arena/examples/pytorch/mnist/main.py --epochs 10 --backend nccl --data /mnt/pytorch_data  --dir /mnt/pytorch_data/logs"

次の表は、前のサンプルコードブロックのパラメーターについて説明しています。

パラメーター

必須

説明

デフォルト値

--name

はい

ジョブの名前。グローバルに一意である必要があります。

該当なし

--namespace

いいえ

ポッドが属する名前空間。

default

--workers

いいえ

ワーカーノードの数を指定します。マスターノードが含まれます。たとえば、値 3 は、トレーニングジョブが 1 つのマスターノードと 2 つのワーカーノードで実行されることを示します。

0

--gpus

いいえ

トレーニングジョブが実行されるワーカーノードで使用される GPU の数を指定します。

0

--working-dir

いいえ

コマンドが実行されるディレクトリを指定します。

/root

--image

はい

ランタイムのデプロイに使用されるイメージのアドレスを指定します。

該当なし

--sync-mode

いいえ

同期モードを指定します。有効な値:git および rsync。この例では、git モードが使用されます。

該当なし

--sync-source

いいえ

ソースコードの同期元のレポジトリのアドレスを指定します。このパラメーターは、--sync-mode パラメーターと一緒に使用されます。この例では、git モードが使用されます。GitHub プロジェクトや Alibaba Cloud Code プロジェクトなど、Git をサポートするアドレスを指定する必要があります。プロジェクトコードは、--working-dir の下の code/ ディレクトリにダウンロードされます。この例では、/root/code/arena が使用されます。

該当なし

--data

いいえ

トレーニングジョブが実行されるランタイムに共有 PV をマウントします。このパラメーターの値は、コロン (:) で区切られた 2 つの部分で構成されます。コロンの左側に PVC の名前を指定します。PVC の名前をクエリするには、arena data list コマンドを実行します。このコマンドは、指定されたクラスタで使用可能な PVC をクエリします。コロンの右側に、PVC によって要求された PV のマウントパスを指定します。これにより、トレーニングジョブは PVC によって要求された PV に保存されているデータを取得できます。

説明

arena data list コマンドを実行して、指定されたクラスタで使用可能な PVC をクエリします。

NAME           ACCESSMODE     DESCRIPTION  OWNER  AGE
training-data  ReadWriteMany                      35m

使用可能な PVC がない場合は、PVC を作成できます。詳細については、「共有 NAS ボリュームを設定する」をご参照ください。

該当なし

--tensorboard

いいえ

TensorBoard を使用してトレーニング結果を視覚化することを指定します。--logdir パラメーターを設定して、TensorBoard がイベントファイルを読み取るパスを指定できます。このパラメーターを設定しない場合、TensorBoard は使用されません。

該当なし

--logdir

いいえ

TensorBoard がイベントファイルを読み取るパス。--tensorboard パラメーターと一緒にこのパラメーターを指定する必要があります。

/training_logs

ステップ 3:PyTorch トレーニングジョブを表示する

  1. 次のコマンドを実行して、Arena を使用して送信されたトレーニングジョブを表示します。

    arena list -n default

    予期される出力:

    NAME           STATUS   TRAINER     DURATION  GPU(Requested)  GPU(Allocated)  NODE
    pytorch-mnist  RUNNING  PYTORCHJOB  11s       1               1               192.168.xxx.xxx
  2. 次のコマンドを実行して、トレーニングジョブで使用されている GPU リソースをクエリします。

    arena top job -n default

    予期される出力:

    NAME           STATUS   TRAINER     AGE  GPU(Requested)  GPU(Allocated)  NODE
    pytorch-mnist  RUNNING  PYTORCHJOB  18s  1               1               192.168.xxx.xxx
    
    Total Allocated/Requested GPUs of Training Jobs: 1/1
  3. 次のコマンドを実行して、クラスタの GPU リソースの使用状況をクエリします。

    arena top node

    予期される出力:

    NAME                        IPADDRESS        ROLE    STATUS  GPU(Total)  GPU(Allocated)
    cn-beijing.192.168.xxx.xxx  192.168.xxx.xxx  <none>  Ready   0           0
    cn-beijing.192.168.xxx.xxx  192.168.xxx.xxx  <none>  Ready   0           0
    cn-beijing.192.168.xxx.xxx  192.168.xxx.xxx  <none>  Ready   2           1
    cn-beijing.192.168.xxx.xxx  192.168.xxx.xxx  <none>  Ready   2           0
    ---------------------------------------------------------------------------------------------------
    Allocated/Total GPUs In Cluster:
    1/4 (25.0%)

    出力は、クラスタに 4 つの GPU があることを示しています。1 つの GPU が割り当てられています。

  4. 次のコマンドを実行して、トレーニングジョブの詳細を表示します。

    arena get pytorch-mnist -n default

    予期される出力:

    Name:        pytorch-mnist
    Status:      RUNNING
    Namespace:   default
    Priority:    N/A
    Trainer:     PYTORCHJOB
    Duration:    45s
    CreateTime:  2025-02-12 11:20:10
    EndTime:
    
    Instances:
      NAME                    STATUS   AGE  IS_CHIEF  GPU(Requested)  NODE
      ----                    ------   ---  --------  --------------  ----
      pytorch-mnist-master-0  Running  45s  true      1               cn-beijing.192.168.xxx.xxx
    
    Tensorboard:
      Your tensorboard will be available on:
      http://192.168.xxx.xxx:31949
    説明

    トレーニングジョブで TensorBoard が使用されている場合、TensorBoard インスタンスの URL がジョブの詳細に表示されます。そうでない場合、URL は表示されません。

ステップ 4:TensorBoard インスタンスを表示する

  1. オンプレミス マシンで次のコマンドを実行して、クラスタ内の TensorBoard のポート 6006 をオンプレミスポート 9090 にマップします。

    重要

    kubectl port-forward を使用して設定されたポート フォワーディングは、本番環境では信頼性、安全性、または拡張性がありません。開発およびデバッグのみを目的としています。本番環境でポート フォワーディングを設定するために、このコマンドを使用しないでください。ACK クラスタの本番で使用されるネットワーキング ソリューションの詳細については、「Ingress 管理」をご参照ください。

    kubectl port-forward -n default svc/pytorch-mnist-tensorboard 9090:6006
  2. http://127.0.0.1:9090 を Web ブラウザーのアドレスバーに入力して、TensorBoard にアクセスします。

    pytorch单机

    説明

    この例では、スタンドアロンの PyTorch ジョブの送信に使用されるソースコードは、10 エポックごとにトレーニング結果がイベントに書き込まれることを示しています。--epochs の値を変更する場合は、値を 10 の倍数に設定します。そうでない場合、トレーニング結果は TensorBoard で視覚化できません。

ステップ 5:トレーニングジョブのログを表示する

次のコマンドを実行して、トレーニングジョブのログを表示します。

arena logs pytorch-mnist -n default

予期される出力:

Train Epoch: 10 [55680/60000 (93%)]     Loss: 0.025778
Train Epoch: 10 [56320/60000 (94%)]     Loss: 0.086488
Train Epoch: 10 [56960/60000 (95%)]     Loss: 0.003240
Train Epoch: 10 [57600/60000 (96%)]     Loss: 0.046731
Train Epoch: 10 [58240/60000 (97%)]     Loss: 0.010752
Train Epoch: 10 [58880/60000 (98%)]     Loss: 0.010934
Train Epoch: 10 [59520/60000 (99%)]     Loss: 0.065813

Accuracy: 9921/10000 (99.21%)
説明
  • ジョブログをリアルタイムで表示する場合は、-f パラメーターを追加します。

  • ログの最後の行のみを表示する場合は、-t N または --tail N パラメーターを追加します。

  • 詳細については、arena logs --help をご参照ください。

(オプション)ステップ 6:環境をクリアする

トレーニングジョブが不要になった場合は、次のコマンドを実行してトレーニングジョブを削除します。

arena delete pytorch-mnist -n default

予期される出力:

INFO[0001] The training job pytorch-mnist has been deleted successfully