All Products
Search
Document Center

Container Service for Kubernetes:Kirim pekerjaan pelatihan single-node TensorFlow dengan Arena

Last Updated:Aug 21, 2026

Kirim pekerjaan pelatihan terdistribusi TensorFlow dalam mode PS-Worker dan lacak progresnya dengan TensorBoard.

Prasyarat

Pastikan Anda telah:

Langkah 1: Periksa sumber daya GPU yang tersedia

Lihat ketersediaan GPU di semua node:

arena top node

Output yang diharapkan:

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%)

Kluster memiliki dua node GPU, masing-masing dengan dua GPU yang menganggur.

Langkah 2: Kirim pekerjaan pelatihan terdistribusi TensorFlow

Format perintahnya adalah arena submit tfjob/tf [--flag] command.

Penting

Parameter wajib untuk mode PS-Worker:

  • --name — nama pekerjaan unik

  • --ps — jumlah node parameter server (PS)

  • --workers — jumlah node pekerja

  • --ps-image — image node PS (atau --image jika digunakan bersama)

  • --worker-image — image node pekerja (atau --image jika digunakan bersama)

  • --gpus — jumlah GPU per pekerja (wajib untuk beban kerja GPU)

Kirim pekerjaan pelatihan terdistribusi dengan satu node PS dan dua node pekerja:

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"

Output yang diharapkan:

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

Parameter utama tercantum di bawah ini. Untuk semua opsi, jalankan arena submit tf --help.

Parameter Wajib Deskripsi Bawaan
--name Ya Nama pekerjaan unik dalam kluster. None
--working-dir Tidak Direktori kerja untuk perintah pelatihan. Kode yang disinkronisasi ditempatkan di bawah code/. /root
--gpus Tidak GPU yang dialokasikan per node pekerja. 0
--workers Tidak Jumlah node pekerja. 1
--image Wajib kecuali --worker-image dan --ps-image ditetapkan Image container untuk node pekerja dan PS. Ditimpa oleh --worker-image atau --ps-image. None
--worker-image Wajib kecuali --image ditetapkan Image node pekerja. Memiliki prioritas lebih tinggi daripada --image. None
--ps Ya (pekerjaan terdistribusi) Jumlah node PS. 0
--ps-image Wajib kecuali --image ditetapkan Image node PS. Memiliki prioritas lebih tinggi daripada --image. None
--sync-mode Tidak Mode sinkronisasi: git atau rsync. None
--sync-source Tidak URL repositori sumber. Gunakan dengan --sync-mode. Kode diunduh ke code/ di bawah --working-dir. None
--data Tidak Memasang PVC. Format: <pvc-name>:<mount-path>. Jalankan arena data list untuk melihat PVC yang tersedia. None
--tensorboard Tidak Mengaktifkan TensorBoard. Gunakan --logdir untuk menetapkan path data event. None
--logdir Tidak Path data event TensorBoard. Gunakan dengan --tensorboard. /training_logs

Menggunakan repositori Git privat

Arena menggunakan git-sync untuk menarik kode sumber. Untuk repositori privat, berikan kredensial sebagai variabel lingkungan:

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=<your-username> \
    --env=GIT_SYNC_PASSWORD=<your-password> \
    --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"

Tetapkan variabel lingkungan apa pun dari proyek git-sync dengan --env.

Penting

Jika penarikan dari GitHub gagal karena masalah jaringan, image demo sudah berisi kode di /code/github.com/kubeflow/arena/examples/tensorflow/mnist/main.py. Kirim tanpa --sync-mode dan --sync-source:

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"

Langkah 3: Pantau pekerjaan pelatihan

Daftar semua pekerjaan yang dikirim:

arena list

Output yang diharapkan:

NAME     STATUS     TRAINER  AGE  NODE
tf-dist  RUNNING    TFJOB    58s  192.1xx.x.xx

Periksa detail pekerjaan:

arena get -n default tf-mnist-dist

Output yang diharapkan:

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
Catatan

Baris endpoint TensorBoard hanya muncul ketika --tensorboard diaktifkan.

Periksa alokasi GPU berdasarkan pekerjaan:

arena top job

Output yang diharapkan:

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

Periksa alokasi GPU di semua node:

arena top node

Output yang diharapkan:

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%)

Langkah 4: Tampilkan TensorBoard

Penting

kubectl port-forward hanya untuk pengembangan dan debugging. Untuk jaringan produksi, gunakan manajemen Ingress.

  1. Teruskan TensorBoard ke port lokal 9090:

    kubectl port-forward -n default svc/tf-dist-tensorboard 9090:6006
  2. Buka localhost:9090 di browser.

tf

Langkah 5: Tampilkan log pekerjaan pelatihan

Secara bawaan, arena logs mengalirkan log worker-0. Untuk melihat instance lain, daftarkan dengan arena get, lalu tentukan salah satunya dengan -i.

Tampilkan log bawaan (worker-0):

arena logs -n default tf-dist

Output yang diharapkan:

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

Tampilkan log dari instance tertentu:

# Dapatkan daftar instance
arena get tf-dist

Output yang diharapkan:

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
# Tampilkan log dari instance pekerja tertentu
arena logs tf-dist -i tf-dist-worker-1

Output yang diharapkan:

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

Perintah log lainnya:

Perintah Deskripsi
arena logs <job> -f Alirkan output log waktu nyata
arena logs <job> -t N Tampilkan N baris terakhir dari log
arena logs --help Daftar semua opsi log

Tampilkan 5 baris terakhir:

arena logs tf-dist -t 5

Output yang diharapkan:

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

(Opsional) Langkah 6: Bersihkan

Setelah pekerjaan selesai, hapus untuk melepaskan sumber daya:

arena delete -n default tf-mnist-dist

Output yang diharapkan:

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