All Products
Search
Document Center

Container Service for Kubernetes:Menggunakan Horovod untuk Pelatihan Elastis di Kubernetes

Last Updated:Mar 27, 2026

Pekerjaan pelatihan terdistribusi tradisional menetapkan jumlah worker saat pengiriman. Elastic Horovod menghilangkan batasan ini: Anda dapat memperluas atau mengurangi jumlah worker selama pekerjaan berlangsung tanpa harus me-restart atau memulihkan dari checkpoint. Gunakan fitur ini ketika:

  • Kluster Anda mencakup instans preemptible yang sewaktu-waktu dapat ditarik kembali.

  • Anda ingin memanfaatkan kapasitas GPU idle yang tersedia.

  • Anda perlu mengurangi biaya pelatihan dengan melepas worker yang kurang dimanfaatkan di tengah pekerjaan.

Prasyarat

Sebelum memulai, pastikan Anda telah:

  • Men-deploy cloud-native AI suite di kluster ACK Anda dengan memilih Elastic Training dan Arena selama penerapan. Untuk detailnya, lihat Deploy the cloud-native AI suite.

  • Menggunakan Horovod sebagai framework pelatihan terdistribusi.

  • Memiliki skrip pelatihan yang menggunakan Horovod sebagai framework pelatihan terdistribusi.

  • Menginstal client Arena. Untuk detailnya, lihat Configure the Arena client.

Kirim pekerjaan pelatihan elastis

Jalankan perintah berikut untuk mengirim pekerjaan pelatihan elastis:

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
    "

Wrapper horovodrun mengelola proses pelatihan elastis. Arena menulis nilai parameter ke variabel lingkungan, yang dibaca oleh horovodrun melalui flag -np, --min-np, dan --max-np.

Skrip penemuan host di /etc/edl/discover_hosts.sh dibuat oleh komponen et-operator.

Parameter Deskripsi
--name Nama pekerjaan pelatihan. Harus unik secara global.
--gpus Jumlah GPU yang dialokasikan untuk setiap worker.
--workers Jumlah worker untuk menjalankan tugas pelatihan.
--max-workers Jumlah maksimum worker untuk tugas pelatihan.
--min-workers Jumlah minimum worker untuk tugas pelatihan.
--image Image kontainer yang digunakan untuk menjalankan pekerjaan.
--working-dir Direktori tempat perintah dijalankan di dalam kontainer.
--np Jumlah worker yang digunakan untuk tugas. Dihitung dari ${workers}*${gpus}.
--max-np Jumlah maksimum worker yang digunakan untuk tugas. Dihitung dari ${maxWorkers}*${gpus}.
--min-np Jumlah minimum worker yang digunakan untuk tugas. Dihitung dari ${minWorkers}*${gpus}.
--host-discovery-script Path ke skrip penemuan host. Komponen et-operator membuat skrip ini di /etc/edl/discover_hosts.sh.

Output yang diharapkan mirip dengan:

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

Verifikasi pekerjaan yang sedang berjalan

Jalankan perintah berikut untuk memeriksa status pekerjaan:

arena get elastic-training

Output yang diharapkan mirip dengan:

Nama:        elastic-training
Status:      RUNNING
Namespace:   default
Prioritas:   N/A
Pelatih:     ETJOB
Durasi:      3m

Instance:
  NAMA                       STATUS   USIA  ADALAH_CHIEF  GPU(Diminta)  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

Untuk memeriksa progres pelatihan, lihat baris log terbaru:

arena logs elastic-training --tail 10

Output yang diharapkan mirip dengan:

[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

Scale out worker

Jalankan perintah berikut untuk menambahkan worker ke pekerjaan yang sedang berjalan:

arena scaleout etjob --name="elastic-training" --count=1 --timeout=10m
Parameter Deskripsi
--name Nama pekerjaan pelatihan yang akan diskala.
--count Jumlah worker yang akan ditambahkan.
--timeout Periode timeout operasi scale-out. Jika worker tidak dibuat sebelum periode timeout berakhir, penjadwal akan membatalkan operasi scale-out.

Output yang diharapkan mirip dengan:

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

Untuk memastikan worker baru sedang berjalan, periksa status pekerjaan:

arena get elastic-training

Output yang diharapkan mirip dengan:

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

elastic-training-worker-2 kini aktif. Log akan menampilkan output dari ketiga worker (indeks [0], [1], dan [2]):

arena logs elastic-training --tail 10
[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

Scale in worker

Jalankan perintah berikut untuk menghapus worker dari pekerjaan yang sedang berjalan:

arena scalein etjob --name="elastic-training" --count=1 --timeout=10m
Parameter Deskripsi
--name Nama pekerjaan pelatihan yang akan diskala.
--count Jumlah worker yang akan dihapus.
--timeout Periode timeout operasi scale-in.

Output yang diharapkan mirip dengan:

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

Untuk memastikan worker telah dihapus, periksa status pekerjaan:

arena get elastic-training

Output yang diharapkan mirip dengan:

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 tidak lagi tercantum. Log hanya akan menampilkan output dari dua worker:

arena logs elastic-training --tail 10
[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