このトピックでは、Arena を使用してスタンドアロン TensorFlow トレーニングジョブをサブミットし、TensorBoard を使用して可視化する方法について説明します。
前提条件
-
GPU を搭載した Kubernetes クラスターを作成済みであること。詳細については、「GPU を搭載した Kubernetes クラスターの作成」をご参照ください。
-
クラスターノードがパブリックネットワークにアクセスできること。詳細については、「クラスターのパブリックネットワークアクセスの有効化」をご参照ください。
-
Arena クライアントがインストール済みであること。詳細については、「Arena クライアントの設定」をご参照ください。
-
training-dataという名前の PVC インスタンスを作成済みであり、MNIST データセットが tf_data パスに保存されていること。詳細については、「NAS 共有ストレージの設定」をご参照ください。
背景情報
この例では、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 |
いいえ |
ソースコードの同期モード。有効な値は git と rsync です。この例では 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 説明
使用可能な 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"
Arena は git-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: ジョブステータスの確認
-
次のコマンドを実行して、Arena を使用してサブミットされたすべてのジョブを一覧表示します。
arena list期待される出力:
NAME STATUS TRAINER DURATION GPU(Requested) GPU(Allocated) NODE tf-mnist RUNNING TFJOB 3s 1 1 192.168.xxx.xxx -
次のコマンドを実行して、ジョブが使用する 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 -
次のコマンドを実行して、クラスターが使用する 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%) -
次のコマンドを実行して、トレーニングジョブの詳細を表示します。
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 ダッシュボードを表示します。
-
次のコマンドを実行して、クラスター内の TensorBoard サービスをローカルマシンのポート 9090 に転送します。
重要kubectl port-forwardによるポートフォワーディングは、信頼性、セキュリティ、スケーラビリティに欠けるため、本番環境には適していません。開発およびデバッグ目的でのみ使用してください。Kubernetes クラスターにおける本番環境レベルのネットワーキングソリューションについては、「Ingress 管理」をご参照ください。kubectl port-forward -n default svc/tf-mnist-tensorboard 9090:6006 -
ブラウザーで
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