Topik ini menjelaskan cara menggunakan klien Arena untuk mengirimkan pekerjaan pelatihan TensorFlow terdistribusi yang berjalan dalam arsitektur parameter server (PS)-worker. Anda dapat menggunakan TensorBoard untuk memvisualisasikan hasil pelatihan.
Prasyarat
Sebuah kluster Container Service for Kubernetes (ACK) dengan node akselerasi GPU telah dibuat.
Sebuah persistent volume claim (PVC) telah dibuat untuk kluster ACK dan dataset yang digunakan dalam topik ini telah diunduh ke persistent volume (PV) yang sesuai. Untuk informasi lebih lanjut, lihat Konfigurasikan Volume NAS Bersama.
Informasi latar belakang
Dalam topik ini, kode sumber pelatihan diunduh dari repositori Git. Dataset disimpan dalam File Storage NAS (NAS) bersama yang dipasang menggunakan PV dan PVC. Dalam contoh ini, sebuah PVC bernama training-data dibuat. PVC tersebut menggunakan PV bersama. Dataset disimpan dalam direktori tf_data dari PV bersama.
Prosedur
Jalankan perintah berikut untuk menanyakan sumber daya GPU yang tersedia di kluster:
arena top nodeOutput yang diharapkan:
NAME IPADDRESS ROLE STATUS GPU(Total) GPU(Allocated) cn-huhehaote.192.16x.x.xx 192.1xx.x.xx master ready 0 0 cn-huhehaote.192.16x.x.xx 192.1xx.x.xx master ready 0 0 cn-huhehaote.192.16x.x.xx 192.1xx.x.xx master ready 0 0 cn-huhehaote.192.16x.x.xx 192.1xx.x.xx <none> ready 2 0 cn-huhehaote.192.16x.x.xx 192.1xx.x.xx <none> ready 2 0 cn-huhehaote.192.16x.x.xx 192.1xx.x.xx <none> ready 2 0 ----------------------------------------------------------------------------------------- Allocated/Total GPUs In Cluster: 0/6 (0%)Output menunjukkan bahwa tiga node dengan akselerasi GPU tersedia untuk menjalankan pekerjaan pelatihan.
Jalankan perintah
arena submit tfjob/tf [--flag]untuk mengirimkan pekerjaan pelatihan TensorFlow terdistribusi.Berikut adalah contoh kode sampel untuk mengirimkan pekerjaan pelatihan TensorFlow terdistribusi yang berjalan dalam arsitektur PS-worker. Pekerjaan pelatihan berjalan pada satu node PS dan dua node worker.
arena submit tf --name=tf-dist \ --working-dir=/root \ --gpus=1 \ --workers=2 \ --worker-image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/tensorflow:1.5.0-devel-gpu \ --sync-mode=git \ --sync-source=https://code.aliyun.com/xiaozhou/tensorflow-sample-code.git \ --ps=1 \ --ps-image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/tensorflow:1.5.0-devel \ --data=training-data:/mnt \ --tensorboard \ --logdir=/mnt/tf_data/logs \ "python code/tensorflow-sample-code/tfjob/docker/mnist/main.py --log_dir /mnt/tf_data/logs --data_dir /mnt/tf_data/"Output yang diharapkan:
configmap/tf-dist-tfjob created configmap/tf-dist-tfjob labeled service/tf-dist-tensorboard created deployment.apps/tf-dist-tensorboard created tfjob.kubeflow.org/tf-dist created INFO[0000] The Job tf-dist has been submitted successfully INFO[0000] You can run `arena get tf-dist --type tfjob` to check the job statusTabel berikut menjelaskan parameter dalam blok kode sampel sebelumnya.
Parameter
Diperlukan
Deskripsi
Default
--name
Ya
Menentukan nama pekerjaan yang ingin Anda kirim. Nama harus unik secara global.
N/A
--working-dir
Tidak
Menentukan direktori tempat perintah dieksekusi.
/root
--gpus
Tidak
Menentukan jumlah GPU yang digunakan oleh node worker tempat pekerjaan pelatihan berjalan.
0
--workers
Tidak
Menentukan jumlah node worker.
1
--image
Parameter ini diperlukan jika Anda tidak menentukan --worker-image untuk node worker atau --ps-image untuk node PS.
Menentukan alamat gambar yang digunakan untuk menerapkan runtime. Jika Anda tidak menentukan --worker-image atau --ps-image, baik node worker maupun node PS menggunakan alamat gambar yang sama.
N/A
--worker-image
Parameter ini diperlukan jika Anda tidak menentukan --image.
Menentukan alamat gambar untuk node worker. Jika --image juga ditentukan, parameter ini akan menimpa parameter --image.
N/A
--sync-mode
Tidak
Menentukan mode sinkronisasi. Nilai valid: git dan rsync. Mode git digunakan dalam contoh ini.
N/A
--sync-source
Tidak
Alamat repositori tempat kode sumber disinkronkan. Parameter ini digunakan bersama dengan parameter --sync-mode. Mode git digunakan dalam contoh ini. Oleh karena itu, Anda harus menentukan alamat repositori Git, seperti URL proyek di GitHub atau Alibaba Cloud. Kode sumber diunduh ke direktori code/ di bawah --working-dir. Direktori tersebut adalah /root/code/tensorflow-sample-code dalam contoh ini.
N/A
--ps
Parameter ini diperlukan untuk pekerjaan pelatihan TensorFlow terdistribusi.
Menentukan jumlah node PS.
0
--ps-image
Parameter ini diperlukan jika Anda tidak menentukan --image.
Menentukan alamat gambar untuk node PS. Jika --image juga ditentukan, parameter ini akan menimpa parameter --image.
N/A
--data
Tidak
Memasang PV bersama ke runtime tempat pekerjaan pelatihan berjalan. Nilai parameter ini terdiri dari dua bagian yang dipisahkan oleh titik dua (
:). Tentukan nama PVC di sisi kiri titik dua. Untuk mendapatkan nama PVC, jalankan perintaharena data list. Perintah ini menanyakan PVC yang tersedia untuk kluster tertentu. Tentukan jalur tempat PV yang diklaim oleh PVC dipasang di sisi kanan titik dua. Dengan cara ini, pekerjaan pelatihan Anda dapat mengambil data yang disimpan dalam PV yang sesuai yang diklaim oleh PVC.CatatanJalankan perintah
arena data listuntuk menanyakan PVC yang tersedia untuk kluster tertentu.NAME ACCESSMODE DESCRIPTION OWNER AGE training-data ReadWriteMany 35mJika tidak ada PVC yang tersedia, Anda dapat membuatnya. Untuk informasi lebih lanjut, lihat Konfigurasikan volume NAS bersama.
N/A
--tensorboard
Tidak
Menentukan bahwa TensorBoard digunakan untuk memvisualisasikan hasil pelatihan. Anda dapat menetapkan parameter --logdir untuk menentukan jalur tempat TensorBoard membaca file event. Jika Anda tidak menentukan parameter ini, TensorBoard tidak digunakan.
N/A
--logdir
Tidak
Menentukan jalur tempat TensorBoard membaca file event. Anda harus menentukan parameter ini dan parameter --tensorboard.
/training_logs
PentingJika Anda menggunakan repositori Git non-publik, jalankan perintah berikut untuk mengirimkan pekerjaan pelatihan:
arena submit tf \ ... --sync-mode=git \ --sync-source=https://code.aliyun.com/xiaozhou/tensorflow-sample-code.git \ --env=GIT_SYNC_USERNAME=yourname \ --env=GIT_SYNC_PASSWORD=yourpwd \ "python code/tensorflow-sample-code/tfjob/docker/mnist/main.pyDalam blok kode sebelumnya, klien Arena menyinkronkan kode sumber menggunakan proyek git-sync. Anda dapat menyesuaikan variabel lingkungan yang didefinisikan dalam proyek git-sync.
Jalankan perintah berikut untuk menanyakan status semua pekerjaan yang telah dikirim:
arena listOutput yang diharapkan:
NAME STATUS TRAINER AGE NODE tf-dist RUNNING TFJOB 58s 192.1xx.x.xx tf-git SUCCEEDED TFJOB 2h N/AJalankan perintah berikut untuk menanyakan 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: 3Jalankan perintah berikut untuk menanyakan sumber daya GPU di kluster:
arena 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%)Jalankan perintah berikut untuk menanyakan informasi detail tentang tugas:
arena get tf-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:31870CatatanTensorBoard digunakan dalam contoh ini. Oleh karena itu, Anda dapat menemukan URL TensorBoard di dua baris terakhir informasi pekerjaan. Jika TensorBoard tidak digunakan, dua baris terakhir tidak dikembalikan.
Gunakan browser untuk melihat hasil pelatihan di TensorBoard.
Jalankan perintah berikut untuk memetakan TensorBoard ke port lokal 9090:
PentingPengaturan penerusan port menggunakan kubectl port-forward tidak andal, aman, atau dapat diperluas di lingkungan produksi. Ini hanya untuk pengembangan dan debugging. Jangan gunakan perintah ini untuk mengatur penerusan port di lingkungan produksi. Untuk informasi lebih lanjut tentang solusi jaringan yang digunakan untuk produksi di kluster ACK, lihat Manajemen Ingress.
kubectl port-forward svc/tf-dist-tensorboard 9090:6006Kunjungi
localhost:9090di browser Anda untuk melihat data di TensorBoard seperti yang ditunjukkan pada gambar berikut.
Jalankan perintah berikut untuk mencetak log pekerjaan:
arena logs 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.968Setelah Anda menjalankan perintah sebelumnya, log worker-0 dicetak secara default. Untuk mencetak log node tertentu, Anda dapat memperoleh nama node yang ditentukan dari informasi pekerjaan dan menjalankan perintah
arena logs $job_name -i $instance_nameuntuk mencetak log.Contoh:
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 mencetak 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 dapat menjalankan perintah
arena logs $job_name -funtuk mencetak log pekerjaan secara real-time dan menjalankan perintaharena logs $job_name -t Nuntuk mencetak N baris dari bagian bawah log. Anda juga dapat menjalankan perintaharena logs --helpuntuk menanyakan parameter untuk mencetak log.Berikut adalah contoh kode sampel tentang cara mencetak N baris dari bagian bawah log:
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