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

Container Service for Kubernetes:Arena を使用した TensorFlow 単一ノードトレーニングジョブのサブミット

最終更新日:Mar 11, 2026

このトピックでは、Arena を使用して PS-Worker モデルに基づく TensorFlow 分散トレーニングジョブをサブミットし、TensorBoard を使用してトレーニングジョブを可視化する方法について説明します。

前提条件

背景情報

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

操作手順

ステップ 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] command の形式のコマンドを実行して、TensorFlow ジョブをサブミットします。

次のコード例を使用して、PS-Worker モードで TensorFlow 分散トレーニングジョブをサブミットします。これには、1 つの PS ノードと 2 つの Worker ノードが含まれます。

arena submit tf \
    --name=tf-mnist-dist \
    --namespace=default \
    --working-dir=/root \
    --ps=1 \
    --ps-image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/tensorflow-mnist-example:2.15.0-gpu \
    --workers=2 \
    --worker-image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/tensorflow-mnist-example:2.15.0-gpu \
    --gpus=1 \
    --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-dist-tensorboard created
deployment.apps/tf-mnist-dist-tensorboard created
tfjob.kubeflow.org/tf-mnist-dist created
INFO[0004] The Job tf-mnist-dist has been submitted successfully
INFO[0004] You can run `arena get tf-mnist-dist --type tfjob -n default` to check the job status

パラメーターの説明は次の表をご参照ください。

パラメーター

必須

説明

デフォルト値

--name

必須

サブミットするジョブの名前を指定します。グローバルに一意である必要があり、重複はできません。

なし

--working-dir

任意

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

/root

--gpus

任意

ジョブの Worker ノードが使用する GPU カードの数を指定します。

0

--workers

任意

ジョブの Worker ノードの数を指定します。

1

--image

--worker-image--ps-image が個別に指定されていない場合は必須です。

トレーニング環境のイメージアドレスを指定します。--worker-image または --ps-image が指定されていない場合、Worker ノードと PS ノードの両方がこのイメージアドレスを使用します。

なし

--worker-image

--image が指定されていない場合は必須です。

ジョブの Worker ノードが使用するイメージアドレスを指定します。--image も存在する場合、--image を上書きします。

なし

--sync-mode

任意

コードの同期モード。git または rsync を指定できます。このトピックでは Git モードを使用します。

なし

--sync-source

任意

コード同期用のリポジトリアドレス。--sync-mode と一緒に使用します。この例では Git モードを使用します。このパラメーターには、任意の GitHub プロジェクトアドレスや、Alibaba Cloud Code プロジェクトアドレスなどの Git 対応のコードホスティングアドレスを指定できます。プロジェクトコードは --working-dir の下の code/ ディレクトリにダウンロードされます。この例では、/root/code/tensorflow-sample-code です。

なし

--ps

分散ジョブでは必須

パラメータサーバ (PS) ノードの数を指定します。

0

--ps-image

--image が指定されていない場合は必須です。

PS ノードのイメージアドレスを指定します。--image も存在する場合、--image を上書きします。

なし

--data

任意

共有ストレージボリューム PVC を実行環境にマウントします。コロン (:) で区切られた 2 つの部分で構成されます。コロンの左側は、準備した PVC の名前です。コマンド arena data list を実行して、現在のクラスターで使用可能な PVC のリストを表示できます。コロンの右側は、実行環境で PVC をマウントするパスであり、トレーニングコードがデータを読み取るローカルパスでもあります。このマウント方法により、コードは PVC データにアクセスできます。

説明

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

NAME           ACCESSMODE     DESCRIPTION  OWNER  AGE
training-data  ReadWriteMany                      35m

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

なし

--tensorboard

任意

データビジュアライゼーションのために、トレーニングタスクの TensorBoard サービスを有効にします。--logdir を使用して、TensorBoard が読み取るイベントパスを指定します。このパラメーターを指定しない場合、TensorBoard サービスは有効になりません。

なし

--logdir

任意

--tensorboard と一緒に使用します。このパラメーターは、TensorBoard がイベントデータを読み取るパスを指定します。

/training_logs

説明

非公開 Git リポジトリを使用する場合は、環境変数 GIT_SYNC_USERNAMEGIT_SYNC_PASSWORD を設定して Git のユーザー名とパスワードを設定します。

 arena submit tf \
    --name=tf-mnist-dist \
    --namespace=default \
    --working-dir=/root \
    --ps=1 \
    --ps-image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/tensorflow-mnist-example:2.15.0-gpu \
    --workers=2 \
    --worker-image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/tensorflow-mnist-example:2.15.0-gpu \
    --gpus=1 \
    --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/mnist.npz --dir /mnt/tf_data/logs"

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

重要

この例では、GitHub リポジトリからソースコードをプルします。ネットワークの問題やその他の理由でコードのプルに失敗した場合は、手動でコードを共有ストレージシステムにダウンロードしてください。このトピックで提供されるデモイメージには、すでにサンプルコード /code/github.com/kubeflow/arena/examples/tensorflow/mnist/main.py が含まれています。次のようにトレーニングジョブを直接サブミットできます。

arena submit tf \
    --name=tf-mnist-dist \
    --namespace=default \
    --working-dir=/root \
    --ps=1 \
    --ps-image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/tensorflow-mnist-example:2.15.0-gpu \
    --workers=2 \
    --worker-image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/tensorflow-mnist-example:2.15.0-gpu \
    --gpus=1 \
    --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: TensorFlow トレーニングジョブの表示

  1. Arena を通じてサブミットされたすべてのトレーニングジョブを表示します。

    arena list

    出力例:

    NAME     STATUS     TRAINER  AGE  NODE
    tf-dist  RUNNING    TFJOB    58s  192.1xx.x.xx
  2. 次のコマンドを実行して、ジョブが使用する GPU リソースを確認します。

    arena top job

    出力例:

    NAME     GPU(Requests)  GPU(Allocated)  STATUS     TRAINER  AGE  NODE
    tf-dist  2              2               RUNNING    tfjob    1m   192.1xx.x.x
    tf-git   1              0               SUCCEEDED  tfjob    2h   N/A
    
    Total Allocated GPUs of Training Job:
    2
    
    Total Requested GPUs of Training Job:
    3
  3. arena top job

    出力例:

    NAME     GPU(Requests)  GPU(Allocated)  STATUS     TRAINER  AGE  NODE
    tf-dist  2              2               RUNNING    tfjob    1m   192.1xx.x.x
    tf-git   1              0               SUCCEEDED  tfjob    2h   N/A
    
    Total Allocated GPUs of Training Job:
    2
    
    Total Requested GPUs of Training Job:
    3
  4. arena top node

    出力例:

    NAME                       IPADDRESS     ROLE    STATUS  GPU(Total)  GPU(Allocated)
    cn-huhehaote.192.1xx.x.xx  192.1xx.x.xx  master  ready   0           0
    cn-huhehaote.192.1xx.x.xx  192.1xx.x.xx  master  ready   0           0
    cn-huhehaote.192.1xx.x.xx  192.1xx.x.xx  master  ready   0           0
    cn-huhehaote.192.1xx.x.xx  192.1xx.x.xx  <none>  ready   2           1
    cn-huhehaote.192.1xx.x.xx  192.1xx.x.xx  <none>  ready   2           1
    cn-huhehaote.192.1xx.x.xx  192.1xx.x.xx  <none>  ready   2           0
    -----------------------------------------------------------------------------------------
    Allocated/Total GPUs In Cluster:
    2/6 (33%)
  5. arena get -n default tf-mnist-dist

    出力例

    STATUS: RUNNING
    NAMESPACE: default
    PRIORITY: N/A
    TRAINING DURATION: 1m
    
    NAME     STATUS   TRAINER  AGE  INSTANCE          NODE
    tf-dist  RUNNING  TFJOB    1m   tf-dist-ps-0      192.1xx.x.xx
    tf-dist  RUNNING  TFJOB    1m   tf-dist-worker-0  192.1xx.x.xx
    tf-dist  RUNNING  TFJOB    1m   tf-dist-worker-1  192.1xx.x.xx
    
    Your tensorboard will be available on:
    http://192.1xx.x.xx:31870
    説明

    このトピックでは、TensorBoard を有効にする例を示します。上記のジョブ詳細では、最後の 2 行が TensorBoard の Web エンドポイントを示しています。TensorBoard を有効にしない場合、これらの 2 行は表示されません。

  6. 次のコマンドを実行して、クラスターが使用する GPU リソースを確認します。

  7. 次のコマンドを実行して、タスクの詳細を取得します。

ステップ 4: TensorBoard の表示

ブラウザで TensorBoard を表示します。

  1. ローカルで次のコマンドを実行して、クラスター内の TensorBoard をローカルポート 9090 にマッピングします。

  2. 重要
    kubectl port-forward -n default svc/tf-dist-tensorboard 9090:6006
  3. ご利用のブラウザで localhost:9090 にアクセスして TensorBoard を表示します。次の図は TensorBoard を示しています。

    tf

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

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

arena logs -n default tf-dist

出力例:

WARNING:tensorflow:From code/tensorflow-sample-code/tfjob/docker/mnist/main.py:120: softmax_cross_entropy_with_logits (from tensorflow.python.ops.nn_ops) is deprecated and will be removed in a future version.
Instructions for updating:
...
Accuracy at step 960: 0.9691
Accuracy at step 970: 0.9677
Accuracy at step 980: 0.9687
Accuracy at step 990: 0.968
Adding run metadata for 999
Total Train-accuracy=0.968

上記のコマンドを使用してジョブログ情報を取得すると、デフォルトで worker-0 ノードのログが出力されます。分散トレーニングタスクの特定のノードのログを表示するには、まずジョブの詳細を表示してジョブノードのリストを取得し、次にコマンド arena logs $job_name -i $instance_name を使用して特定のインスタンスのログを表示します。

コード例は次のとおりです。

arena get tf-dist

出力例:

STATUS: SUCCEEDED
NAMESPACE: default
PRIORITY: N/A
TRAINING DURATION: 1m

NAME     STATUS     TRAINER  AGE  INSTANCE          NODE
tf-dist  SUCCEEDED  TFJOB    5m   tf-dist-ps-0      192.16x.x.xx
tf-dist  SUCCEEDED  TFJOB    5m   tf-dist-worker-0  192.16x.x.xx
tf-dist  SUCCEEDED  TFJOB    5m   tf-dist-worker-1  192.16x.x.xx

Your tensorboard will be available on:
http://192.16x.x.xx:31870

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

arena logs tf-dist -i tf-dist-worker-1

出力例:

WARNING:tensorflow:From code/tensorflow-sample-code/tfjob/docker/mnist/main.py:120: softmax_cross_entropy_with_logits (from tensorflow.python.ops.nn_ops) is deprecated and will be removed in a future version.
Instructions for updating:
...
Accuracy at step 970: 0.9676
Accuracy at step 980: 0.968
Accuracy at step 990: 0.967
Adding run metadata for 999
Total Train-accuracy=0.967

また、コマンド arena logs $job_name -f を実行して、ジョブのリアルタイムログ出力を表示することもできます。コマンド arena logs $job_name -t N を実行して、ログの最後の N 行を表示します。arena logs --help を実行して、より多くのパラメーターの使用法を照会します。

ログの最後の N 行を表示するためのコード例は次のとおりです。

arena logs tf-dist -t 5

出力例:

Accuracy at step 9970: 0.9834
Accuracy at step 9980: 0.9828
Accuracy at step 9990: 0.9816
Adding run metadata for 9999
Total Train-accuracy=0.9816

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

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

arena delete -n default tf-mnist-dist

出力例:

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