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:
Implante o conjunto de IA nativa da nuvem em seu cluster ACK, com Elastic Training e Arena selecionados. Consulte Implantar o conjunto de IA nativa da nuvem.
O Horovod é o framework de treinamento distribuído.
Prepare um script de treinamento baseado em Horovod.
Instale o cliente Arena. Consulte Configurar o cliente Arena.
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 |
|
|
Nome do job de treinamento. Deve ser globalmente único. |
|
|
Quantidade de GPUs alocadas para cada worker. |
|
|
Número inicial de workers. |
|
|
Limite máximo de workers. |
|
|
Limite mínimo de workers. |
|
|
Imagem de contêiner utilizada no job. |
|
|
Diretório de trabalho dentro do contêiner. |
|
|
Contagem de workers. Calculada por |
|
|
Contagem máxima de workers. Calculada por |
|
|
Contagem mínima de workers. Calculada por |
|
|
Caminho para o script de descoberta de hosts. O |
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 |
|
|
Nome do job de treinamento a ser escalado. |
|
|
Quantidade de workers a adicionar. |
|
|
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 |
|
|
Nome do job de treinamento a ser escalado. |
|
|
Quantidade de workers a remover. |
|
|
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