Todos os produtos
Search
Central de documentação

Container Service for Kubernetes:Run elastic training with Horovod on Kubernetes

Última atualização: Jun 27, 2026

O Elastic Horovod ajusta a quantidade de workers durante a execução de um job, sem necessidade de reinicialização ou restauração a partir de um checkpoint.

  • Seu cluster inclui instâncias preemptíveis que podem ser recuperadas a qualquer momento.

  • Você deseja expandir para capacidade ociosa de GPU conforme ela se torna disponível.

  • Você precisa reduzir custos de treinamento liberando workers subutilizados durante o job.

Pré-requisitos

Antes de começar, conclua as etapas a seguir:

Enviar um job de treinamento elástico

Envie um job de treinamento elástico:

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
    "

O comando horovodrun gerencia o treinamento elástico. O Arena transmite os valores dos parâmetros como variáveis de ambiente, que o horovodrun lê por meio das flags -np, --min-np e --max-np.

O et-operator cria o script de descoberta de hosts em /etc/edl/discover_hosts.sh.

Parâmetro

Descrição

--name

Nome do job de treinamento. Deve ser globalmente único.

--gpus

Quantidade de GPUs alocadas para cada worker.

--workers

Número inicial de workers.

--max-workers

Limite máximo de workers.

--min-workers

Limite mínimo de workers.

--image

Imagem de contêiner utilizada no job.

--working-dir

Diretório de trabalho dentro do contêiner.

--np

Contagem de workers. Calculada por ${workers}*${gpus}.

--max-np

Contagem máxima de workers. Calculada por ${maxWorkers}*${gpus}.

--min-np

Contagem mínima de workers. Calculada por ${minWorkers}*${gpus}.

--host-discovery-script

Caminho para o script de descoberta de hosts. O et-operator cria este arquivo em /etc/edl/discover_hosts.sh.

Saída esperada:

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

Verificar o job em execução

Verifique o status do job:

arena get elastic-training

Saída esperada:

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

Acompanhe o progresso do treinamento:

arena logs elastic-training --tail 10

Saída esperada:

[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

Escalar horizontalmente os workers

Adicione workers ao job em execução:

arena scaleout etjob --name="elastic-training" --count=1 --timeout=10m

Parâmetro

Descrição

--name

Nome do job de treinamento a ser escalado.

--count

Quantidade de workers a adicionar.

--timeout

Tempo limite para o scale-out. Se excedido, o agendador reverte a operação.

Saída esperada:

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

Confirme se o novo worker está em execução:

arena get elastic-training

Saída esperada:

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

O worker elastic-training-worker-2 agora está ativo. Os logs exibem a saída dos três workers (índices [0], [1] e [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

Reduzir workers

Remova workers do job em execução:

arena scalein etjob --name="elastic-training" --count=1 --timeout=10m

Parâmetro

Descrição

--name

Nome do job de treinamento a ser escalado.

--count

Quantidade de workers a remover.

--timeout

Tempo limite para a redução de escala.

Saída esperada:

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

Confirme a remoção do worker:

arena get elastic-training

Saída esperada:

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

O worker elastic-training-worker-2 não aparece mais na lista. Os logs mostram a saída de apenas dois workers:

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