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

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á.

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

Use as diretrizes a seguir ao executar uma tarefa de treinamento distribuída com a biblioteca em paralelo de modelos do SageMaker v2 (SMP v2).

Como definir a configuração correta para treinamento distribuído

Para estimar e encontrar o melhor ponto de partida para aplicar as técnicas de treinamento distribuído fornecidas pelo SMP v2, consulte a lista a seguir. Cada item da lista debate a vantagem de usar o Principais características da biblioteca de paralelismo de SageMaker modelos v2 com possíveis concessões.

Dicas de configuração

Esta seção fornece diretrizes sobre como decidir as melhores configurações de modelo para uma throughput ideal com os requisitos globais de tamanho de lote.

Independentemente do tamanho do seu modelo, primeiro, recomendamos as seguintes configurações:

  1. Use o tipo de instância mais poderoso que puder.

  2. Ative a precisão mista o tempo todo, pois ela oferece benefícios substanciais para desempenho e redução de memória. Recomendamos que você use bfloat16, por ser mais preciso do que float16.

  3. Ative a biblioteca de paralelismo de dados distribuídos do SageMaker (em vez de usar do NCCL) sempre que aplicável, conforme apresentado em Compatibilidade com a biblioteca SMDDP otimizada para infraestrutura AWS. Uma exceção é para os casos de uso exclusivo do paralelismo de tensores (hybrid_shard_degree = 1 e tensor_paralle_degree > 1).

  4. Se seu modelo tiver mais de 60 bilhões de parâmetros, recomendamos o uso Inicialização do parâmetro atrasada. Você também pode usar a inicialização atrasada de parâmetros para acelerar a inicialização de qualquer modelo.

  5. Recomendamos que você habilite Ponto de verificação de ativação.

Dependendo do tamanho do seu modelo, recomendamos começar com as orientações a seguir.

  1. Use o paralelismo de dados compartilhados.

    1. Dependendo do tamanho do lote que você pretende colocar na memória da GPU, escolha o grau paralelo adequado de dados fragmentados. Geralmente, você deve começar com o grau mais baixo para ajustar seu modelo na memória da GPU e, ao mesmo tempo, minimizar a sobrecarga da comunicação de rede. Se você receber um aviso de que estão ocorrendo vazamentos de cache, recomendamos aumentar o grau de fragmentação.

    2. Determine world_size com base no tamanho máximo do lote local e no tamanho do lote global necessário, se houver.

    3. Você pode testar o descarregamento de ativação. Dependendo dos cenários, ele pode atender às suas necessidades de memória sem precisar aumentar o grau de fragmentação, o que significa menos comunicação.

  2. Use o paralelismo de dados fragmentados do FSDP do PyTorch e o paralelismo de tensores do SMP v2 simultaneamente, conforme apresentado em Paralelismo de tensores.

    1. Ao treinar em grandes clusters, somente com o FSDP, o tamanho do lote global pode se tornar muito grande, o que causa problemas de convergência para o modelo. Normalmente, a maioria dos trabalhos de pesquisa mantém o tamanho do lote abaixo de quatro milhões de tokens. Nesse caso, você pode resolver o problema compondo o FSDP do PyTorch com o paralelismo de tensores do SMP v2 para reduzir o tamanho do lote.

      Por exemplo, se você tiver 256 nós e um comprimento de sequência de 4096, até um tamanho de lote de um por GPU resultará em um tamanho de lote global de oito milhões de tokens. Entretanto, quando você usa paralelismo de tensores com grau dois e tamanho de lote de um por grupo paralelo de tensores, isso se torna metade do tamanho de lote por GPU, o que resulta em quatro milhões de tokens.

    2. Ao treinar com comprimentos de contexto longos, como 8k ou 16k, a memória de ativação pode ficar muito alta. O FSDP não fragmenta as ativações, e as ativações podem fazer que as GPUs fiquem sem memória. Nesses casos, você pode treinar de forma eficiente compondo o FSDP do PyTorch com o paralelismo de tensores do SMP v2.

Configurações de referência

A equipe de treinamento de paralelismo de modelos do SageMaker fornece os seguintes pontos de referência baseados em experimentos com o modelo Llama 2 transformados no modelo tipo transformador do SMP, com uso de torch.sagemaker.transform, e treinados ml.p4d.24xlarge em instâncias com comprimento de sequência de 4096 e precisão mista (FP16 ou BF16):

Modelo Tamanho do modelo (o número de parâmetros de modelo) O número de instâncias do Grau paralelo de dados fragmentados Tensor de grau paralelo Ponto de verificação de ativação Ativação e descarregamento Tamanho do lote
Llama 2 7B 1 8 1 VERDADEIRO FALSE 4
70B 32 256 1 VERDADEIRO FALSE 2
175B 64 128 4 VERDADEIRO VERDADEIRO 6

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.

Monitoramento e registro em log de uma tarefa de treinamento usando o console do SageMaker AI e o Amazon CloudWatch

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

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

  2. Escolha 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 logs distribuídos de tarefa de treinamento no CloudWatch. Se você executou o treinamento distribuído de vários nós, você poderá ver vários fluxo de logs com tags no formato algo-n-1234567890. O fluxo de logs algo-1 rastreia os logs de treinamento do nó principal (0º).

Para ter mais informações, consulte Métricas do Amazon CloudWatch para monitorar e analisar trabalhos de treinamento.

Permissões

Para executar uma tarefa de treinamento do SageMaker com paralelismo de modelos, verifique se você tem as permissões corretas em seu perfil do IAM, como as seguintes: