Facilitando o treinamento de grandes modelos com FSDP
Uma olhada em como simplificar o treinamento de modelos grandes usando FSDP e torch.compile.
Ruisi Zhang, Tianyu Liu, Will Feng, Andrew Gu, Sanket Purandare, Wanchao Liang, Francisco Massa
― 6 min ler
Índice
- O que é essa parada de FSDP?
- Como funciona?
- O que torna esse método novo especial?
- O detalhe de como tudo funciona
- Otimização, a cereja do bolo
- Interfaces amigáveis
- Avaliação: Vamos rodar os números!
- Os desafios enfrentados
- Trabalho futuro e melhorias
- Conclusão: Um caminho mais brilhante pela frente
- Fonte original
- Ligações de referência
Treinar modelos bem grandes pode ser tão difícil quanto convencer um gato a tomar banho. Precisa de muito poder computacional e um bocado de esforço pra tudo funcionar direitinho. Este artigo fala sobre um jeito novo de facilitar e acelerar esse treinamento usando um método chamado Fully Sharded Data Parallel (FSDP) com a nova ferramenta do PyTorch chamada torch.compile.
O que é essa parada de FSDP?
FSDP é tipo um jeito tranquilo de dividir o trabalho entre vários computadores. Em vez de cada computador carregar todo o peso de um modelo grande, o FSDP divide o trabalho. É como quando você divide as tarefas de casa entre os familiares, o FSDP espalha os pedacinhos do modelo por vários dispositivos pra economizar memória e fazer os cálculos mais rápido.
Imagina que você tem um modelo gigante, tipo o Llama 3.1, que precisa de uns incríveis 30,84 milhões de horas de tempo computacional pra treinar. É tempo pra caramba! O FSDP ajuda a cortar isso compartilhando a carga de trabalho pra que nenhum computador fique sobrecarregado.
Como funciona?
Quando usa o FSDP, o modelo é dividido em partes menores, e cada parte fica em um computador diferente. Quando é hora de treinar, cada computador pega sua parte dos dados, faz os cálculos e depois passa os resultados rapidinho.
A parte legal é que o FSDP pode ser usado junto com outras manhas como Tensor Parallel ou Pipeline Parallel. Pense neles como ferramentas úteis numa caixa de ferramentas. Cada ferramenta ajuda a tornar o processo mais rápido e eficiente.
O que torna esse método novo especial?
A novidade vem de um recurso chamado torch.compile, que funciona como mágica no seu treinamento. Ele ajuda a organizar o fluxo de trabalho pra que tanto as comunicações quanto os cálculos possam acontecer ao mesmo tempo sem se atrapalharem. Isso significa que você não tá só economizando tempo, mas também tornando o treinamento mais suave, como descer uma ladeira coberta de neve em vez de se arrastar por ela.
Essa versão mais nova do FSDP tem algumas características que se destacam:
-
Simplicidade: Você não precisa mudar muita coisa no seu código. É fácil de usar – como trocar de um livro chato pra uma história em quadrinho.
-
Composabilidade: Funciona bem com outros métodos de treinamento. Você pode misturar as coisas sem dificuldade, tipo misturar chocolate com manteiga de amendoim.
-
Melhorias de desempenho: Com um toque de mágica do compilador, as coisas ficam mais rápidas. Você pode notar melhorias tanto no uso de memória quanto na velocidade das operações.
-
Facilidade de debug: Você ainda pode brincar e consertar as coisas sem perder os benefícios dessas novas manhas. É como ter seu bolo e comer também!
O detalhe de como tudo funciona
Pra fazer tudo isso acontecer, o novo método usa blocos de construção já existentes do PyTorch. Ele usa uma mágica de tensor chamada DTensor e algumas técnicas únicas pra embrulhar e desembrulhar esses tensores durante o treinamento, como um mágico tirando um coelho da cartola.
Quando você faz uma passagem pra frente (que é a forma chique de dizer que tá fazendo os cálculos iniciais), ele reúne todos os pedacinhos que precisa, faz as contas e depois esquece esses pedacinhos logo pra economizar memória. É como comer um lanche e depois jogar o embrulho no lixo pra manter as coisas organizadas.
Durante a passagem pra trás (que é sobre ajustar o modelo com o que aprendeu), faz uma dança parecida. Ele coleta o que precisa, calcula as mudanças e passa a informação de volta. O método de retrocesso faz isso de forma fluida, graças às ferramentas poderosas do PyTorch.
Otimização, a cereja do bolo
Uma das melhores partes é que esse método introduz dois truques especiais chamados "bucketing" e "reordering". Bucketing agrupa as comunicações, o que reduz o número de vezes que você precisa mandar informações de um lado pro outro. É como colocar tudo numa sacola grande antes de ir pra outro quarto em vez de fazer várias viagens.
Reordering garante que essas comunicações e cálculos se sobreponham, reduzindo o tempo de espera. É semelhante a malabarismo – quanto mais bolinhas você mantiver no ar sem deixar cair, mais suave fica a apresentação.
Interfaces amigáveis
Pra quem não é expert em tecnologia mas quer se aventurar, esse método oferece interfaces simples. Você pode embrulhar seu modelo com um comando fácil e ver ele se preparar pra treinar – sem mágica necessária.
O embrulho pode ser feito manualmente, onde os usuários controlam o que vai onde, ou automaticamente, onde o sistema se vira pra você. É como ter um assistente pessoal que conhece suas preferências de organizar seu armário.
Avaliação: Vamos rodar os números!
O novo método foi testado com vários modelos de diferentes tamanhos, como o Llama 3.1. Quando comparado ao método anterior, mostrou resultados impressionantes. Graças às otimizações, conseguiu até 28,54% menos uso de memória e até 68,67% mais rapidez nos tempos de processamento.
Imagina cozinhar um banquete pra uma grande reunião familiar. Agora você consegue fazer a mesma refeição na metade do tempo – essa é a essência do que esse novo método consegue.
Os desafios enfrentados
Como toda boa história, tem desafios. Treinar modelos grandes ainda é complicado, e manter tudo debugável enquanto usa ferramentas poderosas pode ser tricky. Também tem a necessidade de garantir compatibilidade com várias técnicas usadas no treinamento.
Os métodos anteriores usavam hooks de retrocesso pra comunicações eficientes, e isso pode dificultar o novo sistema de rastrear tudo. É como tentar se encontrar num labirinto com uma venda nos olhos – desafiador, mas não impossível.
Trabalho futuro e melhorias
Enquanto o novo método traz muita coisa boa, sempre há espaço pra melhorar. Desenvolvimentos futuros podem buscar maneiras ainda mais inteligentes de gerenciar as comunicações e cálculos. É como atualizar sua bicicleta pra uma moto pra uma viagem ainda mais rápida.
Conclusão: Um caminho mais brilhante pela frente
Pra fechar, essa nova abordagem mais simples ao treinamento distribuído com o torch.compile ajuda a tornar o treinamento de grandes modelos mais manejável. É tudo sobre facilitar as coisas enquanto ainda se obtêm ótimos resultados. Usar o FSDP junto com essas novas manhas inteligentes adiciona uma camada de eficiência que pode realmente economizar tempo e esforço.
A jornada de treinar modelos, embora ainda complexa, fica um pouco mais amigável, e quem sabe? Com o progresso contínuo, a gente pode tornar tudo ainda mais suave, como deslizar por um escorregador recém encerado no parque.
Título: SimpleFSDP: Simpler Fully Sharded Data Parallel with torch.compile
Resumo: Distributed training of large models consumes enormous computation resources and requires substantial engineering efforts to compose various training techniques. This paper presents SimpleFSDP, a PyTorch-native compiler-based Fully Sharded Data Parallel (FSDP) framework, which has a simple implementation for maintenance and composability, allows full computation-communication graph tracing, and brings performance enhancement via compiler backend optimizations. SimpleFSDP's novelty lies in its unique $torch.compile$-friendly implementation of collective communications using existing PyTorch primitives, namely parametrizations, selective activation checkpointing, and DTensor. It also features the first-of-its-kind intermediate representation (IR) nodes bucketing and reordering in the TorchInductor backend for effective computation-communication overlapping. As a result, users can employ the aforementioned optimizations to automatically or manually wrap model components for minimal communication exposure. Extensive evaluations of SimpleFSDP on Llama 3 models (including the ultra-large 405B) using TorchTitan demonstrate up to 28.54% memory reduction and 68.67% throughput improvement compared to the most widely adopted FSDP2 eager framework, when composed with other distributed training techniques.
Autores: Ruisi Zhang, Tianyu Liu, Will Feng, Andrew Gu, Sanket Purandare, Wanchao Liang, Francisco Massa
Última atualização: 2024-11-05 00:00:00
Idioma: English
Fonte URL: https://arxiv.org/abs/2411.00284
Fonte PDF: https://arxiv.org/pdf/2411.00284
Licença: https://creativecommons.org/licenses/by/4.0/
Alterações: Este resumo foi elaborado com a assistência da AI e pode conter imprecisões. Para obter informações exactas, consulte os documentos originais ligados aqui.
Obrigado ao arxiv pela utilização da sua interoperabilidade de acesso aberto.
Ligações de referência
- https://github.com/facebookresearch/repo
- https://ai.meta.com/blog/?page=1
- https://arxiv.org/pdf/2407.21783
- https://colab.research.google.com/drive/1FqbtlCmZrKVfUJh0qYhj48BLYnmB-1fS?usp=sharing
- https://docs.google.com/document/d/1G1zrCmChihyYief6Zn0lZ8SpxHiJAnOKUq0EaVPMOKM/edit?usp=sharing
- https://docs.google.com/document/d/1G1zrCmChihyYief6Zn0lZ8SpxHiJAnOKUq0EaVPMOKM/edit?tab=t.0