Container Service for Kubernetes (ACK) menyediakan pelatihan model elastis yang mengintegrasikan Elastic Horovod. Fitur ini memungkinkan Horovod menyesuaikan jumlah pekerja secara dinamis untuk tugas pelatihan terdistribusi di kluster ACK. Anda dapat mengaktifkan pelatihan elastis waktu nyata pada kluster instans preemptible untuk memaksimalkan penggunaan sumber daya komputasi yang tidak terpakai dan mengurangi biaya pelatihan. Topik ini menjelaskan cara menerapkan tugas pelatihan model elastis serta cara menskalakan sumber daya untuk tugas tersebut.
Prasyarat
Rangkaian AI cloud-native telah diterapkan di kluster ACK Anda. Pastikan Elastic Training dan Arena dipilih saat menerapkan rangkaian AI cloud-native. Untuk informasi lebih lanjut, lihat Terapkan rangkaian AI cloud-native.
Horovod digunakan sebagai kerangka pelatihan terdistribusi.
Klien Arena telah diinstal. Untuk informasi lebih lanjut, lihat Konfigurasikan klien Arena.
Informasi latar belakang
Jumlah pekerja tidak dapat disesuaikan secara dinamis setelah tugas pembelajaran mendalam terdistribusi tradisional dikirimkan.
Pelatihan model merupakan langkah penting dalam pembelajaran mendalam. Pelatihan model kompleks memerlukan waktu lama dan kekuatan komputasi yang signifikan. Pelatihan model elastis memungkinkan penyesuaian jumlah pekerja secara dinamis untuk tugas pelatihan model.
Terapkan tugas pelatihan model elastis
Submit a training task
Jalankan perintah berikut untuk mengirim tugas pelatihan:
arena submit etjob \
--name=elastic-training \
--gpus=1 \
--workers=3 \
--max-workers=9 \
--min-workers=1 \
--image=registry.cn-hangzhou.aliyuncs.com/ai-samples/horovod:0.20.0-tf2.3.0-torch1.6.0-mxnet1.6.0.post0-py3.7-cuda10.1 \
--working-dir=/examples \
"horovodrun \
-np \$((\${workers}*\${gpus})) \
--min-np \$((\${minWorkers}*\${gpus})) \
--max-np \$((\${maxWorkers}*\${gpus})) \
--host-discovery-script /etc/edl/discover_hosts.sh \
python /examples/elastic/tensorflow2_mnist_elastic.py
"Dalam contoh ini, pembungkus horovodrun digunakan untuk menjalankan tugas pelatihan elastis menggunakan Horovod. Parameter np, max-np, dan min-np diperlukan untuk menjalankan tugas tersebut. Arena menulis nilai parameter ke variabel lingkungan, yang dapat ditentukan saat mengirimkan tugas.
Tabel berikut menjelaskan parameter tersebut.
Parameter | Deskripsi |
--name | Nama tugas pelatihan. Nama tersebut harus unik secara global. |
--gpus | Jumlah GPU per pekerja. |
--max-workers | Jumlah maksimum pekerja yang menjalankan tugas pelatihan. |
--min-workers | Jumlah minimum pekerja yang menjalankan tugas pelatihan. |
--image | Gambar kontainer yang digunakan untuk menjalankan tugas pelatihan. |
--working-dir | Direktori tempat perintah dieksekusi. |
--np | Jumlah pekerja yang akan digunakan untuk tugas tersebut. |
--max-np | Jumlah maksimum pekerja yang akan digunakan untuk tugas tersebut. |
--min-np | Jumlah minimum pekerja yang akan digunakan untuk tugas tersebut. |
--host-discovery-script | Parameter host-discovery-script menentukan jalur skrip penemuan host yang dibuat oleh komponen et-operator di /etc/edl/discover_hosts.sh. |
Output yang Diharapkan:
configmap/elastic-training-etjob created
configmap/elastic-training-etjob labeled
trainingjob.kai.alibabacloud.com/elastic-training created
INFO[0000] The Job elastic-training has been submitted successfully
INFO[0000] You can run `arena get elastic-training --type etjob` to check the job statusQuery the training task
Jalankan perintah berikut untuk memeriksa tugas pelatihan:
arena get elastic-trainingOutput yang Diharapkan:
Name: elastic-training
Status: RUNNING
Namespace: default
Priority: N/A
Trainer: ETJOB
Duration: 13s
Instances:
NAME STATUS AGE IS_CHIEF GPU(Requested) NODE
---- ------ --- -------- -------------- ----
elastic-training-launcher Running 13s true 0 cn-huhehaote.192.168.0.173
elastic-training-worker-0 Running 13s false 1 cn-huhehaote.192.168.0.174
elastic-training-worker-1 Running 13s false 1 cn-huhehaote.192.168.0.174Query training logs
Jalankan perintah berikut untuk memeriksa log pelatihan:
arena logs elastic-training --tail 10Output yang Diharapkan:
[0]<stdout>:Step #340 Loss: 0.047924
[1]<stdout>:Step #340 Loss: 0.116303
[0]<stdout>:Step #350 Loss: 0.068762
[1]<stdout>:Step #350 Loss: 0.040847
[0]<stdout>:Step #360 Loss: 0.057501
[1]<stdout>:Step #360 Loss: 0.111952
[0]<stdout>:Step #370 Loss: 0.085895
[1]<stdout>:Step #370 Loss: 0.075529
[0]<stdout>:Step #380 Loss: 0.063450
[1]<stdout>:Step #380 Loss: 0.054253Tambahkan pekerja untuk tugas pelatihan
Submit a scale-out task
Jalankan perintah berikut untuk mengirim tugas scale-out:
arena scaleout etjob --name="elastic-training" --count=1 --timeout=10m--name: nama tugas pelatihan untuk mana Anda ingin menambah pekerja.
--count: jumlah pekerja yang ingin ditambahkan untuk tugas pelatihan.
--timeout: periode timeout operasi scale-out.
Jika pekerja tidak dibuat sebelum periode timeout berakhir, penjadwal akan membatalkan operasi scale-out.
Output yang Diharapkan:
configmap/elastic-training-1609914643-scaleout created
configmap/elastic-training-1609914643-scaleout labeled
scaleout.kai.alibabacloud.com/elastic-training-1609914643 created
INFO[0003] The scaleout job elastic-training-1609914643 has been submitted successfullyQuery the training task
Jalankan perintah berikut untuk memeriksa tugas pelatihan:
arena get elastic-trainingOutput yang Diharapkan:
Name: elastic-training
Status: RUNNING
Namespace: default
Priority: N/A
Trainer: ETJOB
Duration: 3m
Instances:
NAME STATUS AGE IS_CHIEF GPU(Requested) NODE
---- ------ --- -------- -------------- ----
elastic-training-launcher Running 3m true 0 cn-huhehaote.192.168.0.173
elastic-training-worker-0 Running 3m false 1 cn-huhehaote.192.168.0.174
elastic-training-worker-1 Running 3m false 1 cn-huhehaote.192.168.0.174
elastic-training-worker-2 Running 1m false 1 cn-huhehaote.192.168.0.173Output sebelumnya menunjukkan bahwa pekerja bernama elastic-training-worker-2 diterapkan untuk menjalankan tugas pelatihan.
Query training logs
Jalankan perintah berikut untuk memeriksa log pelatihan:
arena logs elastic-training --tail 10Output yang Diharapkan:
[1]<stdout>:Step #1670 Loss: 0.131210
[2]<stdout>:Step #1680 Loss: 0.020876
[0]<stdout>:Step #1680 Loss: 0.030605
[1]<stdout>:Step #1680 Loss: 0.074515
[2]<stdout>:Step #1690 Loss: 0.029105
[0]<stdout>:Step #1690 Loss: 0.015216
[1]<stdout>:Step #1690 Loss: 0.022670
[0]<stdout>:Step #1700 Loss: 0.105407
[1]<stdout>:Step #1700 Loss: 0.037623
[2]<stdout>:Step #1700 Loss: 0.032874Output sebelumnya menunjukkan bahwa tiga pekerja menjalankan tugas tersebut.
Hapus pekerja dari tugas pelatihan
Submit a scale-in task
Jalankan perintah berikut untuk mengirim tugas scale-in:
arena scalein etjob --name="elastic-training" --count=1 --timeout=10m--name: nama tugas pelatihan dari mana Anda ingin menghapus pekerja.
--count: jumlah pekerja yang ingin dihapus dari tugas pelatihan.
--timeout: periode timeout operasi scale-in.
Output yang Diharapkan:
configmap/elastic-training-1609914720-scalein created
configmap/elastic-training-1609914720-scalein labeled
scalein.kai.alibabacloud.com/elastic-training-1609914720 created
INFO[0002] The scalein job elastic-training-1609914720 has been submitted successfullyQuery the training task
Jalankan perintah berikut untuk memeriksa tugas pelatihan:
arena get elastic-trainingOutput yang Diharapkan:
Name: elastic-training
Status: RUNNING
Namespace: default
Priority: N/A
Trainer: ETJOB
Duration: 3m
Instances:
NAME STATUS AGE IS_CHIEF GPU(Requested) NODE
---- ------ --- -------- -------------- ----
elastic-training-launcher Running 3m true 0 cn-huhehaote.192.168.0.173
elastic-training-worker-0 Running 3m false 1 cn-huhehaote.192.168.0.174
elastic-training-worker-1 Running 3m false 1 cn-huhehaote.192.168.0.174Output sebelumnya menunjukkan bahwa pekerja bernama elastic-training-worker-2 telah dihapus.
Query training logs
Jalankan perintah berikut untuk memeriksa log pelatihan:
arena logs elastic-training --tail 10Output yang Diharapkan:
[1]<stdout>:Step #2180 Loss: 0.001739
[0]<stdout>:Step #2180 Loss: 0.004853
[0]<stdout>:Step #2190 Loss: 0.000846
[1]<stdout>:Step #2190 Loss: 0.007900
[0]<stdout>:Step #2200 Loss: 0.039376
[1]<stdout>:Step #2200 Loss: 0.024672
[0]<stdout>:Step #2210 Loss: 0.012985
[1]<stdout>:Step #2210 Loss: 0.010956
[0]<stdout>:Step #2220 Loss: 0.009604
[1]<stdout>:Step #2220 Loss: 0.002531Output sebelumnya menunjukkan bahwa hanya dua pekerja yang menjalankan tugas tersebut.