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

Container Service for Kubernetes:Arena を使用したスタンドアロン TensorFlow ジョブのサブミット

最終更新日:Jun 23, 2026

このトピックでは、Arena を使用してスタンドアロン TensorFlow トレーニングジョブをサブミットし、TensorBoard を使用して可視化する方法について説明します。

前提条件

背景情報

この例では、Git リポジトリからソースコードをダウンロードし、NAS で管理される PV および PVC に基づく共有ストレージシステムのデータセットを使用します。データセットが tf_data という名前のディレクトリに含まれている、training-data という名前の PVC インスタンス (共有ストレージボリューム) があることを前提としています。

操作手順

ステップ 1: 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 ノードがあることがわかります。各ノードには、トレーニングジョブで使用できる 2 つのアイドル状態の GPU カードがあります。

ステップ 2: TensorFlow ジョブのサブミット

arena submit tfjob/tf [--flag] コマンドを実行して、TensorFlow ジョブをサブミットします。

次のコマンドを使用して、シングルノードと単一の GPU カードを使用するスタンドアロン TensorFlow ジョブをサブミットします。

arena submit tf \
    --name=tf-mnist \
    --working-dir=/root \
    --workers=1 \
    --gpus=1 \
    --image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/tensorflow-mnist-example:2.15.0-gpu \
    --sync-mode=git \
    --sync-source=https://github.com/kubeflow/arena.git \
    --env=GIT_SYNC_BRANCH=master \
    --data=training-data:/mnt \
    --tensorboard \
    --logdir=/mnt/tf_data/logs \
    "python /root/code/arena/examples/tensorflow/mnist/main.py --data /mnt/tf_data/mnist.npz --dir /mnt/tf_data/logs"

期待される出力:

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

次の表にパラメーターの説明を示します。

パラメーター

必須

説明

デフォルト

--name

はい

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

N/A

--working-dir

いいえ

コマンドが実行されるディレクトリ。

/root

--gpus

いいえ

ジョブのワーカーノードが使用する GPU カードの数。

0

--image

はい

トレーニング環境のイメージの URL。

N/A

--sync-mode

いいえ

ソースコードの同期モード。有効な値は gitrsync です。この例では git を使用します。

N/A

--sync-source

いいえ

ソースコードリポジトリの URL。このパラメーターは --sync-mode を指定する場合に必須です。git モードの場合、このパラメーターには GitHub プロジェクトや Alibaba Cloud Code プロジェクトなど、任意の Git ベースのコードリポジトリの URL を指定できます。プロジェクトコードは、--working-dir で指定されたパス内の code/ ディレクトリにダウンロードされます。この例では、パスは /root/code/arena です。

N/A

--data

いいえ

共有ストレージボリューム (PVC) をジョブのコンテナにマウントします。値のフォーマットは pvc-name:mount-path です。pvc-name は既存の PVC の名前です。arena data list を実行して、利用可能な PVC を一覧表示できます。mount-path は、トレーニングコードがデータを読み取るコンテナ内の宛先パスです。

説明

arena data list を実行して、クラスターで使用可能な PVC を表示します。

NAME           ACCESSMODE     DESCRIPTION  OWNER  AGE
training-data  ReadWriteMany                      35m

使用可能な PVC がない場合は、作成する必要があります。詳細については、「NAS 共有ストレージの設定」をご参照ください。

N/A

--tensorboard

いいえ

データ可視化のために TensorBoard サービスを有効にします。このパラメーターを --logdir と一緒に使用して、TensorBoard が読み取るイベントファイルのパスを指定します。

N/A

--logdir

いいえ

TensorBoard のイベントファイルのパスを指定します。このパラメーターは --tensorboard が指定されている場合に必須です。

/training_logs

説明

プライベート Git リポジトリを使用するには、GIT_SYNC_USERNAME および GIT_SYNC_PASSWORD 環境変数を使用して認証情報を設定します。

arena submit tf \
    --name=tf-mnist \
    --working-dir=/root \
    --workers=1 \
    --gpus=1 \
    --image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/tensorflow-mnist-example:2.15.0-gpu \
    --sync-mode=git \
    --sync-source=https://github.com/kubeflow/arena.git \
    --env=GIT_SYNC_BRANCH=master \
    --env=GIT_SYNC_USERNAME=yourname \
    --env=GIT_SYNC_PASSWORD=yourpwd \
    --data=training-data:/mnt \
    --tensorboard \
    --logdir=/mnt/tf_data/logs \
    "python /root/code/arena/examples/tensorflow/mnist/main.py --data /mnt/tf_data --dir /mnt/tf_data/logs"

Arenagit-sync を使用してソースコードを同期するため、git-sync プロジェクトでサポートされている任意の環境変数を使用できます。

重要

ネットワークの問題でコードのプルに失敗した場合は、手動で共有ストレージシステムにダウンロードできます。または、提供されているサンプルイメージには /code/github.com/kubeflow/arena/examples/tensorflow/mnist/main.py にサンプルコードが含まれているため、以下のようにジョブを直接サブミットできます。

arena submit tf \
    --name=tf-mnist \
    --working-dir=/root \
    --workers=1 \
    --gpus=1 \
    --image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/tensorflow-mnist-example:2.15.0-gpu \
    --data=training-data:/mnt \
    --tensorboard \
    --logdir=/mnt/tf_data/logs \
    "python /code/github.com/kubeflow/arena/examples/tensorflow/mnist/main.py --data /mnt/tf_data/mnist.npz --dir /mnt/tf_data/logs"

ステップ 3: ジョブステータスの確認

  1. 次のコマンドを実行して、Arena を使用してサブミットされたすべてのジョブを一覧表示します。

    arena list

    期待される出力:

    NAME      STATUS   TRAINER  DURATION  GPU(Requested)  GPU(Allocated)  NODE
    tf-mnist  RUNNING  TFJOB    3s        1               1               192.168.xxx.xxx
  2. 次のコマンドを実行して、ジョブが使用する GPU リソースを確認します。

    arena top job

    期待される出力:

    NAME      STATUS   TRAINER  AGE  GPU(Requested)  GPU(Allocated)  NODE
    tf-mnist  RUNNING  TFJOB    29s  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. 次のコマンドを実行して、トレーニングジョブの詳細を表示します。

    arena get -n default tf-mnist

    期待される出力:

    Name:        tf-mnist
    Status:      RUNNING
    Namespace:   default
    Priority:    N/A
    Trainer:     TFJOB
    Duration:    22s
    CreateTime:  2026-01-26 16:01:42
    EndTime:
    Instances:
      NAME              STATUS   AGE  IS_CHIEF  GPU(Requested)  NODE
      ----              ------   ---  --------  --------------  ----
      tf-mnist-chief-0  Running  45s  true      1               cn-beijing.192.168.xxx.xxx
    Tensorboard:
      Your tensorboard will be available on:
      http://192.168.xxx.xxx:31243
    説明

    TensorBoard が有効になっているため、出力には TensorBoard の URL が含まれます。TensorBoard が無効になっている場合、この URL は表示されません。

ステップ 4: TensorBoard の表示

Web ブラウザーを使用して TensorBoard ダッシュボードを表示します。

  1. 次のコマンドを実行して、クラスター内の TensorBoard サービスをローカルマシンのポート 9090 に転送します。

    重要

    kubectl port-forward によるポートフォワーディングは、信頼性、セキュリティ、スケーラビリティに欠けるため、本番環境には適していません。開発およびデバッグ目的でのみ使用してください。Kubernetes クラスターにおける本番環境レベルのネットワーキングソリューションについては、「Ingress 管理」をご参照ください。

    kubectl port-forward -n default svc/tf-mnist-tensorboard 9090:6006
  2. ブラウザーで http://localhost:9090 を開き、TensorBoard ダッシュボードを表示します。

    TensorBoard の SCALARS パネルには、train (赤) と test (青) の 2 つの曲線が表示されます。accuracy_1 メトリックは約 1,000 ステップ後に 0.96 以上に収束し、cross_entropy_1 メトリックは約 0.05 から 0.10 に低下します。これは、MNIST モデルのトレーニングが成功したことを示しています。左側のパネルでは、Smoothing (現在 0.6) や Horizontal Axis (現在 STEP) などの表示オプションを調整できます。ログパスは /mnt/tf_data/logs です。

ステップ 5: ジョブログの表示

次のコマンドを実行して、ジョブログを取得します。

arena logs -n default tf-mnist

期待される出力:

Train Epoch: 14 [55680/60000 (93%)]     Loss: 0.029811
Train Epoch: 14 [56320/60000 (94%)]     Loss: 0.029721
Train Epoch: 14 [56960/60000 (95%)]     Loss: 0.029682
Train Epoch: 14 [57600/60000 (96%)]     Loss: 0.029781
Train Epoch: 14 [58240/60000 (97%)]     Loss: 0.029708
Train Epoch: 14 [58880/60000 (98%)]     Loss: 0.029761
Train Epoch: 14 [59520/60000 (99%)]     Loss: 0.029684
Test Accuracy: 9842/10000 (98.42%)
938/938 - 3s - loss: 0.0299 - accuracy: 0.9924 - val_loss: 0.0446 - val_accuracy: 0.9842 - lr: 0.0068 - 3s/epoch - 3ms/step
説明
  • ジョブログをリアルタイムでストリームするには、-f パラメーターを追加します。

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

  • その他のオプションについては、arena logs --help を実行してください。

(任意) ステップ 6: 環境のクリーンアップ

トレーニングジョブが完了したら、次のコマンドを実行して削除できます。

arena delete -n default tf-mnist

期待される出力:

INFO[0002] The training job tf-mnist has been deleted successfully