00:00:00Este é o DeepSpeed, a biblioteca de código aberto da Microsoft que se integra ao PyTorch e resolve o real problema da memória.
00:00:07Ele permite rodar modelos que normalmente travariam na hora, tudo em uma única GPU sem sobrecarregá-la. Modelos grandes não falham por serem lentos.
00:00:14Eles falham porque estados do otimizador, gradientes e parâmetros acabam estourando sua VRAM. O segredo do DeepSpeed é o ZeRO, que divide os estados de treinamento.
00:00:23Assim, você não armazena as mesmas coisas em todos os lugares. Temos vídeos novos o tempo todo, então não esqueça de se inscrever.
00:00:30Agora, vamos direto ao ponto e colocar isso para rodar. Vou usar o Google Colab, já que estou em um Mac e por sinal um Pro.
00:00:40Como não tenho as GPUs da Nvidia, fica um pouco mais difícil, mas ainda consigo fazer isso pelo Colab. Primeiro,
00:00:46vou fazer uma verificação rápida nas GPUs e depois instalamos todos os pacotes via pip.
00:00:51Vou instalar o PyTorch, Hugging Face e DeepSpeed, depois rodar o ds_report para conferir se o CUDA e o compilador estão configurados.
00:00:59Mais algumas instalações para garantir que tudo rode sem problemas.
00:01:02Depois, vamos criar nosso arquivo JSON de configuração para ajustar o DeepSpeed. Esse arquivo é a alma do negócio.
00:01:09Começaremos com o ZeRO estágio dois, que divide os estados do otimizador e gradientes entre as
00:01:14GPUs para reduzir drasticamente o uso de memória, enquanto os parâmetros do modelo permanecem replicados. Não se complique aqui, isso já me deixou louco.
00:01:22Comece pela documentação oficial, mude uma coisa de cada vez e resista à tentação de adicionar
00:01:28várias configurações aleatórias. Você encontra as configurações nas documentações do Hugging Face e do DeepSpeed.
00:01:34E eu peguei a maior parte do meu script Python desses documentos também.
00:01:37Mas fiz alguns ajustes para o meu sistema lidar melhor com isso, esse sistema Mac.
00:01:42Se este passo falhar, pare aqui, pois a maioria dos problemas do DeepSpeed são incompatibilidades de CUDA, não do seu modelo.
00:01:48Vamos rodar tudo agora e ver a mágica acontecer.
00:01:51Vou usar um pequeno conjunto de dados importado neste exemplo só para rodar mais rápido.
00:01:58E pronto, após alguns minutos, podemos ver as etapas concluídas e também o pico de memória da GPU.
00:02:03Sim, a perda de treinamento (loss) nesta execução não mudou ou caiu muito.
00:02:08Mas poderíamos otimizar ou usar um dataset maior para uma perda melhor. Agora,
00:02:13aqui está o que as pessoas acham que têm, mas ainda assim acabam sem memória.
00:02:16O ZeRO vem em estágios, e cada um responde a uma pergunta: "O que eu posso parar de armazenar em uma única GPU?"
00:02:24Bem, o estágio um divide os estados do otimizador; o estágio dois faz o mesmo e inclui os gradientes.
00:02:30Aqui você já economiza muito naquelas coisas que consomem sua memória silenciosamente. Depois, temos o ZeRO estágio três.
00:02:36Este é o principal. Ele divide os estados do otimizador, gradientes e parâmetros.
00:02:40É o maior ganho de memória possível, mas mesmo isso pode não ser suficiente.
00:02:45Se ainda não couber, o ZeRO-Infinity permite descarregar dados para a CPU ou até para o NVMe.
00:02:50Sim, você troca velocidade por escala. Mas, às vezes, a verdadeira vitória é simplesmente conseguir rodar o modelo.
00:02:56Se você está pensando: "Legal, mas memória não é meu único problema", você está certo. O DeepSpeed suporta paralelismo 3D para dados,
00:03:04pipeline e tensores, além de suporte nativo para modelos Mixture of Experts (MoE).
00:03:09Assim, modelos esparsos não acabam com o seu poder de processamento.
00:03:12Agora temos opções reais. O DeepSpeed se integra muito bem com Hugging Face e Accelerate,
00:03:19então você não precisa construir tudo do zero.
00:03:21Basicamente, você pega o que precisa e ignora o resto. Mas lembre-se: benchmarks dependem muito do seu hardware.
00:03:27Então, nem sempre confie em números gigantescos. Tentei rodar isso algumas vezes,
00:03:30mas de novo, como estou em um M4 Pro, não consegui otimizar mais do que o básico deste modelo.
00:03:36É difícil dizer, mas outros projetos com DeepSpeed mostraram ganhos imensos de processamento (throughput).
00:03:41Especialmente quando a memória era o limitador. Se você estiver no Windows ou Linux, os ganhos podem ser enormes.
00:03:46O melhor caminho é testar. Comece usando as configurações oficiais.
00:03:51Foi o que eu fiz aqui: adaptei um pouco para Mac e corrigi os problemas de CUDA.
00:03:56Depois, monitore a RAM da CPU se ativar o "offload" e se decidir usar múltiplas GPUs depois.
00:04:01O DeepSpeed é basicamente um botão de "me recuso a ficar sem memória hoje".
00:04:07Depois que você entende o ZeRO e o funcionamento do offload, modelos gigantes se tornam práticos mesmo com hardware limitado.
00:04:14Mas a configuração inicial pode ser confusa no começo.
00:04:17Inscreva-se se isso te poupou tempo de GPU ou se você curte esse tipo de ferramenta de dev. A gente se vê no próximo vídeo.