SageMaker Melhores práticas de paralelismo de modelos distribuídos - Amazon SageMaker

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

SageMaker Melhores práticas de paralelismo de modelos distribuídos

Use as diretrizes a seguir ao executar um trabalho de treinamento distribuído com a biblioteca paralela de SageMaker modelos.

Configuração correta para um determinado modelo

Ao aumentar a escala verticalmente de um modelo, recomendamos que você consulte a lista a seguir em ordem. Cada item da lista debate a vantagem de usar as técnicas da biblioteca junto com as concessões que podem surgir.

dica

Se um modelo pode se encaixar bem usando um subconjunto dos recursos da biblioteca, adicionar mais recursos de paralelismo ao modelo ou de economia de memória geralmente não melhora o desempenho.

Usando tipos de instância grandes de GPU
  • No campo do paralelismo de modelos, é melhor usar instâncias avançadas com memórias da GPU grandes para lidar com a sobrecarga das operações de paralelismo de modelos, como modelos de particionamento em várias GPUs. Recomendamos usar as instâncias de ml.p4d ou ml.p3dn para treinar modelos grandes de DL. Essas instâncias também são equipadas com o Elastic Fabric Adapter (EFA), que fornece maior largura de banda de rede e habilita treinamento em grande escala com paralelismo de modelos.

Estado do otimizador de fragmentação
  • O impacto do estado do otimizador de fragmentação depende do número de classificações em paralelo dos dados. Normalmente, um maior grau de paralelismo de dados (proporcional ao tamanho do nó de computação) pode melhorar a eficiência do uso de memória.

    Quando você quiser reduzir o tamanho de um cluster, verifique a configuração do estado do otimizador de fragmentação. Por exemplo, um modelo de DL grande com estado do otimizador de fragmentação que cabe em um cluster de computação com 16 GPUs (por exemplo, duas instâncias P4d ou P4de) nem sempre cabe em um nó com 8 GPUs (por exemplo, uma única instância P4d ou P4de). Isso ocorre porque a memória combinada de 8 GPUs é menor que a memória combinada de 16 GPUs, e a memória necessária por GPU para fragmentar mais de 8 GPUs também é maior do que a memória por GPU para fragmentar no cenário de 16 GPUs. Como resultado, o aumento no requisito de memória pode não se ajustar no cluster menor.

    Para ter mais informações, consulte Fragmentação de estado do otimizador.

Ponto de verificação de ativação
  • A eficiência da memória pode ser melhorada usando o ponto de verificação de ativação para um grupo de módulos. Quanto mais você agrupar os módulos, mais eficiente será o uso de memória. Ao realizar ponto de verificação de módulos sequenciais para camadas, o argumento strategy da função smp.set_activation_checkpointing agrupa as camadas para o ponto de verificação. Por exemplo, o agrupamento de duas ou mais camadas para pontos de verificação é mais eficiente em termos de memória do que o ponto de verificação de uma camada por vez, e isso troca o tempo de computação extra pela redução do uso de memória.

    Para ter mais informações, consulte Verificação de ativação.

Paralelismo de tensores
  • O grau de paralelismo de tensores deve ser uma potência de dois (2, 4, 8, ..., 2 n), onde o grau máximo deve ser igual ao número de GPUs por nó. Por exemplo, se você usa o nó com 8 GPUs, os números possíveis para o grau de paralelismo de tensores são 2, 4 e 8. Não recomendamos números arbitrários (como 3, 5, 6 e 7) para o grau de paralelismo de tensores. Quando você usa vários nós, a configuração incorreta do grau de paralelismo de tensores pode resultar na execução do paralelismo de tensores nos nós; isso adiciona uma sobrecarga significativa na comunicação das ativações entre os nós e pode se tornar computacionalmente caro.

    Para ter mais informações, consulte Paralelismo tensorial.

Paralelismo de pipeline entre os nós
  • Você pode executar o paralelismo de pipeline em um nó único e em vários nós. Ao usar o paralelismo do pipeline em combinação com o paralelismo de tensores, recomendamos executar o paralelismo de pipeline em vários nós e manter o paralelismo de tensores em nós individuais.

  • O paralelismo de pipeline vem com os três botões a seguir: microbatches, active_microbatches e prescaled_batch.

    • Quando você usa paralelismo de tensores com paralelismo de pipeline, recomendamos ativar o prescaled_batch para que o tamanho do lote por grupo em paralelo do modelo possa ser aumentado para um pipeline eficiente. Quando prescaled_batch é ativado, o tamanho do lote definido no script de treinamento se torna tp_size vezes o tamanho do lote definido para cada classificação sem prescaled_batch.

    • Aumentar o número de microbatches ajuda a obter um pipeline eficiente e uma melhor performance. Observe que o tamanho efetivo do microlote é o tamanho do lote dividido pelo número de microlotes. Se você aumentar o número de microlotes enquanto mantém o tamanho do lote constante, cada microlote processa um número menor de amostras.

    • O número de active_microbatches é o número máximo de microlotes que estão sendo processados simultaneamente durante o pipeline. Para cada microlote ativo no processo, suas ativações e gradientes ocupam a memória da GPU. Portanto, aumentar o active_microbatches consome mais memória da GPU.

  • Se a memória da GPU e da GPU estiverem subutilizadas, aumente o active_microbatches para um melhor paralelismo durante o pipeline.

  • Para obter mais informações sobre como usar o paralelismo de tensores com o paralelismo de pipeline, consulte Paralelismo de tensores combinado com paralelismo de pipeline.

  • Para encontrar descrições dos parâmetros mencionados acima, consulte Parâmetros smdistributed na documentação do SDK do SageMaker Python.

Descarregar ativações para a CPU
  • Certifique-se de que isso seja usado em combinação com o ponto de verificação de ativação e o paralelismo de pipeline. Para garantir que o descarregamento e o pré-carregamento ocorram no plano de fundo, especifique um valor maior que 1 para o parâmetro de microlotes.

  • Ao descarregar as ativações, talvez você consiga aumentar o active_microbatches e, às vezes, igualar o número total de microlotes. Isso depende de quais módulos são determinados como pontos de verificação e como o modelo é particionado.

    Para ter mais informações, consulte Ativação e descarregamento.

Referência de configurações

A equipe de treinamento de paralelismo de SageMaker modelos fornece os seguintes pontos de referência com base em experimentos com o modelo GPT-2, o comprimento da sequência de 512 e o tamanho do vocabulário de 50.000.

O número de parâmetros de modelo Tipo de instância Paralelismo de pipeline Paralelismo de tensores Estado do otimizador de fragmentação Ponto de verificação de ativação Lote pré-escalado Tamanho do lote
10 bilhões 16 ml.p4d.24xlarge 1 4 Verdadeiro Cada camada do transformador Verdadeiro batch_size=40
30 bilhões 16 ml.p4d.24xlarge 1 8 Verdadeiro Cada camada do transformador Verdadeiro batch_size=32
60 bilhões 32 ml.p4d.24xlarge 2 8 Verdadeiro Cada camada do transformador Verdadeiro batch_size=56, microbatches=4, active_microbatches=2

Você pode extrapolar a partir das configurações anteriores para estimar o uso de memória da GPU para a configuração do modelo. Por exemplo, se você aumentar o comprimento da sequência de um modelo com parâmetro de 10 bilhões ou aumentar o tamanho do modelo para 20 bilhões, talvez você queira reduzir o tamanho do lote primeiro. Se o modelo ainda não couber, tente aumentar o grau de paralelismo de tensores.

Modificar o script de treinamento

  • Antes de usar os recursos da biblioteca SageMaker model parallel em seu script de treinamento, reviseDicas e armadilhas de configuração da SageMaker Distributed Model Parallelism Library.

  • Para iniciar um trabalho de treinamento mais rápido, use o modo SageMaker local. Isso ajuda você a executar rapidamente um trabalho de treinamento localmente em uma instância de SageMaker notebook. Dependendo da escala da instância de ML na qual a instância do SageMaker notebook está sendo executada, talvez seja necessário ajustar o tamanho do modelo alterando as configurações do modelo, como a largura oculta, o número de camadas do transformador e as cabeças de atenção. Valide se o modelo reduzido funciona bem na instância do bloco de anotações antes de usar um cluster grande para treinar o modelo completo.

Monitorando e registrando um Training Job usando o SageMaker console e a Amazon CloudWatch

Para monitorar métricas em nível de sistema, como utilização da memória da CPU, utilização da memória da GPU e utilização da GPU, use a visualização fornecida pelo console. SageMaker

  1. No painel de navegação à esquerda, escolha Treinamento.

  2. Escolha Training jobs (Trabalhos de treinamento).

  3. No painel principal, escolha o nome da tarefa de treinamento do qual você deseja ver mais detalhes.

  4. Procure no painel principal e encontre a seção Monitoramento para ver a visualização automatizada.

  5. Para ver os logs de tarefa de treinamento, escolha Visualizar logs na seção Monitoramento. Você pode acessar os registros distribuídos do trabalho de treinamento em CloudWatch. Se você executou o treinamento distribuído de vários nós, você poderá ver vários streams de log com tags no formato algo-n-1234567890. O stream de log algo-1 rastreia os logs de treinamento do nó principal (0º).

Para ter mais informações, consulte Monitore e analise trabalhos de treinamento usando o Amazon CloudWatch Metrics.

Permissões

Para executar um trabalho de SageMaker treinamento com o paralelismo de modelos ou os cadernos de exemplo de treinamento SageMaker distribuídos, verifique se você tem as permissões corretas em sua função do IAM, como as seguintes: