Skip to content
Aceleração ND-Parallel: Guia para Treinamento Eficiente com Múltiplas GPUs
Source: huggingface.co

Aceleração ND-Parallel: Guia para Treinamento Eficiente com Múltiplas GPUs

Sources: https://huggingface.co/blog/accelerate-nd-parallel, Hugging Face Blog

Visão geral

Treinar modelos extremamente grandes em várias GPUs exige mais do que apenas deixar os dados passarem por uma única placa. O Accelerate, junto com o Axolotl, oferece uma forma rápida e integrada de compor várias estratégias de paralelismo no seu script de treinamento. O objetivo é minimizar a sobrecarga de comunicação e, ao mesmo tempo, maximizar a taxa de processamento de dados e a eficiência de memória conforme os modelos crescem para dezenas ou centenas de bilhões de parâmetros. A abordagem ND-Parallel combina paralelismo de dados, particionamento de memória e estratégias de paralelismo de modelo em um fluxo configurável. Nessa filosofia, o paralelismo de Dados (DP) é o nível superior: o modelo, os gradientes e os estados do otimizador são replicados entre dispositivos e os dados são distribuídos entre eles. Se o modelo for muito grande para caber em uma única placa, o Fully Sharded Data Parallel (FSDP) fragmenta pesos, gradientes e estados do otimizador entre as GPUs, trocando memória por comunicação. O Tensor Parallel (TP) distribui a computação de camadas lineares entre os dispositivos, enquanto o Context Parallel (CP) fragmenta as sequências para mitigar o crescimento de memória da atenção. A estrutura também permite combinar essas estratégias entre nós, formando um “world size” que aumenta com o número de dispositivos no cluster. O modelo de configuração de Axolotl espelha o ParallelismConfig do Accelerate, permitindo definir os grados de cada estratégia e como elas se combinam. À medida que modelos evoluem para sequências muito longas ou para bilhões de parâmetros, os padrões de comunicação e o layout de memória tornam-se gargalos dominantes. O ND-Parallel atua para ajudar usuários a entender esses trade-offs e escolher configurações que minimizam a comunicação entre dispositivos, mantendo o rendimento de treinamento. O artigo descreve o comportamento de DP, FSDP, TP e CP, como eles interagem e quando combiná-los para obter desempenho prático. Você encontrará também como os fragmentos do modelo são reunidos e reduzidos, como os dispositivos em nós diferentes participam de operações de all-reduce e reduce-scatter, e como o tamanho do world size influencia a escalabilidade. O script de treinamento de ponta a ponta no repositório Accelerate demonstra como configurar o data loader, o otimizador, o loop de treinamento e como salvar o modelo treinado. A capacidade ND-Parallel está integrada ao Axolotl para facilitar o ajuste fino em escala, tornando simples adicionar uma ou mais estratégias de paralelismo aos configs existentes.

Principais recursos

  • Permite compor várias estratégias de paralelismo (DP, FSDP, TP, CP) em um único script de treinamento via Accelerate e Axolotl.
  • Controle do grau de cada estratégia com ParallelismConfig no Accelerate ou por meio de campos de configuração no Axolotl (por exemplo, dp_replicate_size, tp_size, dp_shard_size).
  • Paralelismo de Dados (DP) no topo: o modelo, gradientes e estados do otimizador são replicados entre dispositivos e os dados são particionados entre eles; suporta configurações entre nós.
  • Fully Sharded Data Parallel (FSDP) fragmenta pesos, gradientes e estados do otimizador para modelos grandes, trocando memória por comunicação; a granularidade de coleta afeta o trade-off memória–comunicação.
  • Tensor Parallel (TP) distribui a computação de camadas lineares entre dispositivos para redução constante de memória, ideal em blocos de camadas grandes; melhor dentro de um único nó devido a maior comunicação.
  • Context Parallel (CP) fragmenta as sequências para reduzir o custo de memória de atenções em contextos muito longos.
  • Escala entre nós com backends de comunicação intra- e inter-nó para suportar treinamento distribuído, aproveitando ligações rápidas dentro do nó (ex.: NVLink) e redes entre nós mais lentas (ex.: Infiniband).
  • Exemplo de ponta a ponta no Accelerate demonstra configuração de dados, otimizador, loop de treinamento e salvamento do modelo; integração com Axolotl para ajuste fino em escala.
  • Considerações de trade-offs memória–compute, incluindo opções de offload, para permitir treinar modelos maiores dentro de limites de hardware.

Casos de uso comuns

  • Ajuste fino ou treinamento de modelos com dezenas a centenas de bilhões de parâmetros em várias GPUs.
  • Cenários que exigem comprimentos de contexto muito grandes (ajuste fino de longas sequências) onde a memória da atenção é dominante.
  • Usuários que desejam minimizar a comunicação entre dispositivos ao combinar DP com FSDP, TP e CP.
  • Configurações com clusters multi-nó disponíveis, onde abordagens apenas em um nó não cabem o modelo na memória.
  • Situações em que a colaboração entre Accelerate e Axolotl simplifica a adição de várias estratégias de paralelismo a configs existentes.

Setup & instalação

O artigo faz referência a configurar e usar o Accelerate junto com o Axolotl, incluindo um script de treinamento ponta a ponta no repositório Accelerate. Menciona a classe ParallelismConfig do Accelerate e os campos de configuração correspondentes no Axolotl para habilitar o ND-Parallel, mas não fornece comandos exatos no trecho fornecido.

Observação: comandos exatos de instalação e configuração não são fornecidos no trecho de origem. Consulte o repositório Accelerate e a documentação do Axolotl para comandos e arquivos de configuração concretos.

# Setup & instalação não fornecidos no trecho de origem.

Quick start

A peça aponta para um exemplo executável mínimo no repositório Accelerate que demonstra:

  • como configurar um dataloader, um otimizador e um loop de treinamento,
  • aplicar uma ou mais estratégias ND-Parallel via ParallelismConfig (dp_replicate_size, tp_size, dp_shard_size),
  • e salvar o modelo treinado.

O código de quick start não está incluído no trecho fornecido. Um exemplo mínimo pode ser encontrado no repositório Accelerate, junto com as configurações ND-Parallel e a integração com o Axolotl.

# Quickstart não fornecido no trecho da fonte.

Prós e contras

  • Prós
  • Permite treinar modelos grandes combinando paralelismo de dados com particionamento de memória e estratégias de paralelismo de modelo.
  • Reduz o uso máximo de memória em comparação com a réplica completa apenas de DP, via FSDP e CP.
  • Pode escalar entre nós, aproveitando a comunicação intra-nó rápida e redes inter-nó para treinamento distribuído.
  • Configuração flexível via ParallelismConfig e Axolotl para ajustar trade-offs de memória e computação ao caso de uso.
  • Contras
  • A configuração torna-se complexa conforme o número de estratégias e suas interações aumenta.
  • FSDP entre nós pode ter overhead elevado de comunicação; há recomendações para evitar FSDP em toda a extensão de um nó em alguns cenários.
  • TP é mais eficaz dentro de um único nó; pode introduzir sincronização e overhead de comunicação, especialmente em setups multi-nó.
  • CP adiciona particionamento adicional de dados de entrada e pode exigir tratamento específico para dados longos.

Alternativas (breves comparações)

| Abordagem | Observações | Foco típico de uso |---|---|---| | ND-Parallel (Accelerate + Axolotl) | Combina DP, FSDP, TP, CP em um único config; exemplos de treinamento no repositório Accelerate | Treinamento em larga escala com várias estratégias de paralelismo em um único pipeline |DeepSpeed ZeRO-3 | Economia de memória via otimizações ZeRO-3; escalonamento forte em single-machine e multi-GPU | Modelos muito grandes com otimizador de memória eficiente |DP em single-node | Paralelismo de dados simples em um único nó | Modelos que cabem na memória de um único nó mas requerem maiorThroughput |

Licença

Informação de licença não está explicitamente fornecida no conteúdo da fonte.

Referências

More resources