Kirim pekerjaan pelatihan terdistribusi TensorFlow dalam mode PS-Worker dan lacak progresnya dengan TensorBoard.
Prasyarat
Pastikan Anda telah:
-
Sebuah Kluster Kubernetes dengan node GPU telah dibuat.
-
Node klaster memiliki akses jaringan publik.
-
Klien Arena telah terinstal.
-
Membuat Persistent Volume Claim (PVC) bernama
training-datayang berisi dataset MNIST di bawah direktoritf_data. Lihat Konfigurasi penyimpanan bersama NAS.
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.
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--imagejika digunakan bersama) -
--worker-image— image node pekerja (atau--imagejika 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.
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
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
kubectl port-forward hanya untuk pengembangan dan debugging. Untuk jaringan produksi, gunakan manajemen Ingress.
-
Teruskan TensorBoard ke port lokal 9090:
kubectl port-forward -n default svc/tf-dist-tensorboard 9090:6006 -
Buka
localhost:9090di browser.
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