全部產品
Search
文件中心

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

更新時間:Mar 11, 2026

本文展示如何使用Arena提交TensorFlow基於PS-Worker模式的分布式訓練作業,並通過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] 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

可選

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

--sync-source

可選

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

--ps

分布式作業必選

指定參數伺服器PS節點數。

0

--ps-image

如果不指定--image,則必選。

指定PS節點的鏡像地址。如果--image同時出現,則覆蓋--image

--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-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"

步驟三:查看 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,在上述作業詳情中最後兩行,可以看到TensorBoard的Web訪問地址;如果沒有開啟TensorBoard,最後兩行資訊不存在。

  6. 執行以下命令檢查叢集所使用的GPU資源。

  7. 執行以下命令擷取任務詳情。

步驟四:查看 TensorBoard

通過瀏覽器查看TensorBoard。

  1. 在本地執行如下命令,將叢集中的TensorBoard映射到本地9090連接埠。

  2. 重要

    請注意kubectl port-forward建立的連接埠轉寄不具備生產層級的可靠性、安全性和擴充性,因此僅適用於開發和調試目的,不適合在生產環境使用。更多關於Kubernetes叢集內生產可用的網路方案的資訊,請參見Ingress管理

    kubectl port-forward -n default svc/tf-dist-tensorboard 9090:6006
  3. 在瀏覽器中訪問localhost:9090,即可查看TensorBoard。如下圖所示。

    tf

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

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

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

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

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

arena delete -n default tf-mnist-dist

預期輸出:

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