TensorFlow は、さまざまなディープラーニングのトレーニングタスクで広く使用されているオープンソースの深層学習フレームワークです。このトピックでは、Arena を使用してシングルノードの TensorFlow トレーニングジョブを送信し、TensorBoard を使用してトレーニングジョブを可視化する方法について説明します。
前提条件
GPU を含む Kubernetes クラスターが作成されていること。詳細については、「GPU を含む Kubernetes クラスターの作成」をご参照ください。
クラスターノードがパブリックネットワークにアクセスできること。詳細については、「クラスターのインターネットアクセスを有効にする」をご参照ください。
Arena クライアントがインストールされていること。詳細については、「Arena クライアントの設定」をご参照ください。
training-dataという名前の永続ボリューム要求 (PVC) インスタンスが作成され、MNIST データセットが tf_data パスに保存されていること。詳細については、「NAS 共有ストレージの設定」をご参照ください。
背景情報
この例では、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] コマンドを実行して 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 | 必須 | 送信するジョブの名前。名前はグローバルに一意である必要があります。 | なし |
--working-dir | 任意 | コマンドが実行されるディレクトリ。 | /root |
--gpus | 任意 | ジョブのワーカーノードが必要とする GPU の数。 | 0 |
--image | 必須 | トレーニング環境のレジストリアドレス。 | なし |
--sync-mode | 任意 | コードの同期モード。git または rsync を指定できます。この例では Git モードを使用します。 | なし |
--sync-source | 任意 | コード同期用のリポジトリアドレス。このパラメーターは --sync-mode と一緒に使用する必要があります。この例では Git モードを使用します。このパラメーターの値は、任意の GitHub プロジェクトまたは Alibaba Cloud Code プロジェクトなどの他の Git ベースのコードホスティングサービスのアドレスにすることができます。プロジェクトコードは --working-dir の下の code/ ディレクトリにダウンロードされます。この例では、パスは /root/code/arena です。 | なし |
--data | 任意 | 共有ストレージボリューム (PVC) を実行環境にマウントします。このパラメーターはコロン ( 説明
利用可能な PVC がない場合は、作成してください。詳細については、「NAS 共有ストレージの設定」をご参照ください。 | なし |
--tensorboard | 任意 | トレーニングタスクのデータを可視化するために TensorBoard サービスを開始します。このパラメーターを --logdir と一緒に使用して、TensorBoard が読み取るイベントパスを指定できます。このパラメーターを指定しない場合、TensorBoard サービスは開始されません。 | なし |
--logdir | 任意 | このパラメーターは --tensorboard と一緒に使用する必要があります。TensorBoard がイベントデータを読み取るパスを指定します。 | /training_logs |
非公開 Git リポジトリを使用する場合は、GIT_SYNC_USERNAME と GIT_SYNC_PASSWORD 環境変数を設定して、Git のユーザー名とパスワードを指定できます。
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 プロジェクトで定義されている環境変数を設定できます。
この例では、GitHub リポジトリからソースコードをプルします。ネットワークの問題でコードのプルに失敗した場合は、手動でコードを共有ストレージシステムにダウンロードできます。このトピックで提供されているデモイメージには、サンプルコード /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:TensorFlow トレーニングジョブの表示
次のコマンドを実行して、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 が有効になっているため、ジョブ詳細の最後の 2 行に TensorBoard の Web エンドポイントが表示されます。TensorBoard が有効になっていない場合、この情報は表示されません。
ステップ 4:TensorBoard の表示
ブラウザで TensorBoard を表示します。
ローカルマシンで次のコマンドを実行して、クラスター内の TensorBoard サービスをローカルマシンのポート 9090 にマッピングします。
重要kubectl port-forward を使用して設定されたポートフォワーディングは、本番環境では信頼性、安全性、拡張性に欠けます。これは開発とデバッグのみを目的としています。本番環境でポートフォワーディングを設定するためにこのコマンドを使用しないでください。ACK クラスターの本番環境で使用されるネットワークソリューションの詳細については、「Ingress 管理」をご参照ください。
kubectl port-forward -n default svc/tf-mnist-tensorboard 9090:6006ブラウザで
http://localhost:9090にアクセスして TensorBoard を表示します。次の図に示します。
ステップ 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