Topik ini menjelaskan cara mengirim pekerjaan pelatihan terdistribusi TensorFlow berbasis model PS-Worker menggunakan Arena dan memvisualisasikan pekerjaan tersebut melalui TensorBoard.
Prasyarat
Kluster Kubernetes yang berisi GPU telah dibuat. Untuk informasi selengkapnya, lihat Buat kluster Kubernetes yang berisi GPU.
Node kluster dapat mengakses jaringan publik. Untuk informasi selengkapnya, lihat Aktifkan akses Internet untuk kluster.
Klien Arena telah diinstal. Untuk informasi selengkapnya, lihat Konfigurasikan klien Arena.
Instans Persistent Volume Claim (PVC) bernama
training-datatelah dibuat, dan set data MNIST disimpan di path tf_data. Untuk informasi selengkapnya, lihat Konfigurasikan penyimpanan bersama NAS.
Informasi latar belakang
Contoh ini mengunduh kode sumber dari URL Git. Set data disimpan dalam sistem penyimpanan bersama (PV dan PVC berbasis NAS). Contoh ini mengasumsikan Anda memiliki instans PVC bernama training-data (penyimpanan bersama). Instans ini berisi direktori tf_data, yang menyimpan set data yang digunakan dalam contoh ini.
Prosedur
Langkah 1: Lihat sumber daya GPU
arena top nodeOutput 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%)Output menunjukkan bahwa kluster memiliki dua node GPU. Setiap node memiliki dua GPU idle yang tersedia untuk pekerjaan pelatihan.
Langkah 2: Kirim pekerjaan pelatihan TensorFlow
Kirim pekerjaan TensorFlow dengan menjalankan perintah dalam format arena submit tfjob/tf [--flag] command.
Kirim pekerjaan pelatihan terdistribusi TensorFlow dalam mode PS-Worker menggunakan contoh kode berikut. Contoh ini mencakup satu node PS dan dua node 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"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 statusDeskripsi parameter terdapat pada tabel berikut.
Parameter | Wajib | Deskripsi | Nilai default |
--name | Wajib | Tentukan nama pekerjaan yang dikirim. Nama harus unik secara global dan tidak boleh diduplikasi. | None |
--working-dir | Opsi | Tentukan direktori tempat perintah saat ini dijalankan. | /root |
--gpus | Opsional | Tentukan jumlah kartu GPU yang digunakan oleh node Worker pekerjaan. | 0 |
--workers | Opsional | Tentukan jumlah node Worker pekerjaan. | 1 |
--image | Wajib jika --worker-image dan --ps-image tidak ditentukan secara terpisah. | Tentukan alamat image lingkungan pelatihan. Jika --worker-image atau --ps-image tidak ditentukan, baik node Worker maupun node PS menggunakan alamat image ini. | None |
--worker-image | Wajib jika --image tidak ditentukan. | Tentukan alamat image yang digunakan oleh node Worker pekerjaan. Jika --image juga ada, nilai ini akan menimpa --image. | None |
--sync-mode | Opsional | Mode sinkronisasi kode. Anda dapat menentukan git atau rsync. Topik ini menggunakan mode Git. | None |
--sync-source | Opsional | Alamat repositori untuk sinkronisasi kode. Gunakan parameter ini bersama --sync-mode. Contoh ini menggunakan mode Git. Parameter ini dapat berupa alamat proyek GitHub apa pun atau alamat hosting kode yang didukung Git, seperti alamat proyek Alibaba Cloud Code. Kode proyek diunduh ke direktori code/ di bawah --working-dir. Untuk contoh ini, lokasinya adalah: /root/code/tensorflow-sample-code. | None |
--ps | Wajib untuk pekerjaan terdistribusi | Tentukan jumlah node parameter server (PS). | 0 |
--ps-image | Wajib jika --image tidak ditentukan. | Tentukan alamat image node PS. Jika --image juga ada, nilai ini akan menimpa --image. | None |
--data | Opsional | Pasang volume penyimpanan bersama PVC ke lingkungan yang sedang berjalan. Parameter ini terdiri dari dua bagian, dipisahkan oleh tanda titik dua ( Catatan Jalankan Jika tidak ada PVC yang tersedia, buat satu. Untuk informasi selengkapnya, lihat Konfigurasikan penyimpanan bersama NAS. | None |
--tensorboard | Opsional | Aktifkan layanan TensorBoard untuk tugas pelatihan guna visualisasi data. Gunakan --logdir untuk menentukan path event yang dibaca TensorBoard. Jika Anda tidak menentukan parameter ini, layanan TensorBoard tidak diaktifkan. | None |
--logdir | Opsional | Gunakan parameter ini bersama --tensorboard. Parameter ini menentukan path tempat TensorBoard membaca data event. | /training_logs |
Jika Anda menggunakan repositori Git privat, atur username dan password Git dengan mengonfigurasi variabel lingkungan GIT_SYNC_USERNAME dan GIT_SYNC_PASSWORD.
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"Perintah arena menggunakan git-sync untuk menyinkronkan kode sumber. Anda dapat mengatur variabel lingkungan yang didefinisikan dalam proyek git-sync.
Contoh ini menarik kode sumber dari repositori GitHub. Jika penarikan kode gagal karena masalah jaringan atau alasan lain, unduh kode secara manual ke sistem penyimpanan bersama. Image demo yang disediakan dalam topik ini sudah berisi kode contoh /code/github.com/kubeflow/arena/examples/tensorflow/mnist/main.py. Anda dapat langsung mengirim pekerjaan pelatihan sebagai berikut:
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: Lihat pekerjaan pelatihan TensorFlow
Lihat semua pekerjaan pelatihan yang dikirim melalui Arena.
arena listOutput yang diharapkan:
NAME STATUS TRAINER AGE NODE tf-dist RUNNING TFJOB 58s 192.1xx.x.xxJalankan perintah berikut untuk memeriksa sumber daya GPU yang digunakan oleh pekerjaan.
arena top jobOutput 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: 3arena top jobOutput 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: 3arena top nodeOutput 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%)arena get -n default tf-mnist-distOutput 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:31870CatatanTopik ini menunjukkan contoh yang mengaktifkan TensorBoard. Pada detail pekerjaan di atas, dua baris terakhir menunjukkan titik akhir web TensorBoard. Jika Anda tidak mengaktifkan TensorBoard, kedua baris ini tidak akan muncul.
Jalankan perintah berikut untuk memeriksa sumber daya GPU yang digunakan oleh kluster.
Jalankan perintah berikut untuk mendapatkan detail tugas.
Langkah 4: Lihat TensorBoard
Lihat TensorBoard di browser.
Jalankan perintah berikut secara lokal untuk memetakan TensorBoard di kluster ke port lokal 9090.
Akses
localhost:9090di browser Anda untuk melihat TensorBoard. Gambar berikut menunjukkan tampilan TensorBoard.
kubectl port-forward -n default svc/tf-dist-tensorboard 9090:6006Langkah 5: Lihat log pekerjaan pelatihan
Jalankan perintah berikut untuk mendapatkan informasi log pekerjaan.
arena logs -n default tf-distOutput 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.968Saat Anda menggunakan perintah di atas untuk mendapatkan informasi log pekerjaan, log dari node worker-0 ditampilkan secara default. Untuk melihat log dari node tertentu dalam tugas pelatihan terdistribusi, pertama-tama lihat detail pekerjaan untuk mendapatkan daftar node pekerjaan, lalu gunakan perintah arena logs $job_name -i $instance_name untuk melihat log dari instans tertentu.
Kode contohnya sebagai berikut.
arena get tf-distOutput 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:31870Jalankan perintah berikut untuk mendapatkan log pekerjaan.
arena logs tf-dist -i tf-dist-worker-1Output 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.967Anda juga dapat melihat output log waktu nyata pekerjaan dengan menjalankan perintah arena logs $job_name -f. Lihat N baris terakhir log dengan menjalankan perintah arena logs $job_name -t N. Cari tahu penggunaan parameter lebih lanjut dengan menjalankan arena logs --help.
Kode contoh untuk melihat N baris terakhir log sebagai berikut.
arena logs tf-dist -t 5Output 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 lingkungan
Jika Anda tidak lagi memerlukan pekerjaan pelatihan setelah selesai, jalankan perintah berikut untuk menghapusnya:
arena delete -n default tf-mnist-distOutput yang diharapkan:
INFO[0002] The training job tf-mnist-dist has been deleted successfully