全部產品
Search
文件中心

Container Service for Kubernetes:使用Arena提交TensorFlow單機訓練作業

更新時間:Jan 28, 2026

TensorFlow 是一個開源的深度學習架構,廣泛應用於各種深度學習模型的訓練任務中。本文展示如何使用 Arena 提交 TensorFlow 單機訓練作業,並通過 TensorBoard 可視化查看訓練作業。

前提條件

背景資訊

本文樣本從Git URL下載原始碼,資料集放在共用儲存系統(基於NAS的PV和PVC)中。樣本假設您已經獲得了一個名稱為training-data的PVC執行個體(一個共用儲存),裡面存在一個目錄tf_data,存放了樣本所使用的資料集。

操作步驟

步驟一:查看 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卡可用於運行訓練作業。

步驟二:提交 Tensorflow 訓練作業

執行arena submit tfjob/tf [--flag]命令即可提交TensorFlow作業。

通過以下程式碼範例提交一個單機單卡的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

可選

指定作業Worker節點需要使用的GPU卡數。

0

--image

必選

指定訓練環境的鏡像地址。

--sync-mode

可選

同步代碼的模式,您可以指定gitrsync。本文使用Git模式。

--sync-source

可選

同步代碼的倉庫地址,需要和--sync-mode一起使用,本文樣本使用Git模式,該參數可以為任何GitHub專案地址。阿里雲Code專案地址等支援Git的代碼託管地址。專案代碼將會被下載到--working-dir下的code/目錄中。本文樣本即為:/root/code/arena

--data

可選

掛載共用儲存卷PVC到運行環境中。它由兩部分組成,通過分號:分割。冒號左側是您已經準備好的PVC名稱。您可以通過arena data list查看當前叢集可用的PVC列表;分號右側是您想將PVC的掛載到運行環境中的路徑,也是您訓練代碼要讀取資料的本地路徑。這樣通過掛載的方式,您的代碼就可以訪問PVC的資料。

說明

執行arena data list查看本文樣本當前叢集可用的PVC列表。

NAME           ACCESSMODE     DESCRIPTION  OWNER  AGE
training-data  ReadWriteMany                      35m

如果沒有可用的PVC,您可建立PVC。具體操作,請參見配置NAS共用儲存

--tensorboard

可選

為訓練任務開啟一個TensorBoard服務,用作資料視覺效果,您可以結合--logdir指定TensorBoard要讀取的event路徑。不指定該參數,則不開啟TensorBoard服務。

--logdir

可選

需要結合--tensorboard一起使用,該參數表示TensorBoard需要讀取event資料的路徑。

/training_logs

說明

如果您使用的是非公開Git代碼倉庫,則可以通過配置環境變數GIT_SYNC_USERNAMEGIT_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"

步驟三:查看 Tensorflow 訓練作業

  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 的 Web 存取地址;如果沒有開啟 TensorBoard,最後兩行資訊不存在。

步驟四:查看 TensorBoard

通過瀏覽器查看 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

步驟五:查看訓練作業日誌

執行以下命令擷取作業日誌資訊。

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

(可選)步驟六:環境清理

訓練作業執行結束後如不再需要,執行如下命令進行刪除:

arena delete -n default tf-mnist

預期輸出:

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