全部产品
Search
文档中心

Container Service for Kubernetes:Pelatihan elastis berbasis Horovod dalam kluster Kubernetes

更新时间:Jul 02, 2025

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 status

Query the training task

Jalankan perintah berikut untuk memeriksa tugas pelatihan:

arena get elastic-training

Output 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.174

Query training logs

Jalankan perintah berikut untuk memeriksa log pelatihan:

arena logs elastic-training --tail 10

Output 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.054253

Tambahkan 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 successfully

Query the training task

Jalankan perintah berikut untuk memeriksa tugas pelatihan:

arena get elastic-training

Output 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.173

Output 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 10

Output 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.032874

Output 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 successfully

Query the training task

Jalankan perintah berikut untuk memeriksa tugas pelatihan:

arena get elastic-training

Output 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

Output 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 10

Output 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.002531

Output sebelumnya menunjukkan bahwa hanya dua pekerja yang menjalankan tugas tersebut.