Sua GPU não é pequena demais… o problema é o seu setup

BBetter Stack
컴퓨터/소프트웨어자격증/평생교육AI/미래기술

Transcript

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.

Key Takeaway

O DeepSpeed permite o treinamento de modelos de linguagem gigantescos em hardwares limitados ao otimizar drasticamente a distribuição e o armazenamento de memória de vídeo.

Highlights

O DeepSpeed é uma biblioteca da Microsoft que resolve problemas de estouro de VRAM no treinamento de modelos de IA.

A tecnologia ZeRO (Zero Redundancy Optimizer) divide estados do otimizador

Timeline

Introdução ao DeepSpeed e o Problema da VRAM

O vídeo começa apresentando o DeepSpeed como uma biblioteca de código aberto da Microsoft integrada ao PyTorch. O narrador explica que o principal motivo de falha em modelos grandes não é a lentidão, mas sim o esgotamento da VRAM devido aos estados do otimizador e parâmetros. A solução apresentada é a tecnologia ZeRO, que elimina a redundância de dados armazenados. Este trecho é fundamental para entender a base técnica da ferramenta. O autor destaca que o segredo para rodar modelos pesados em uma única GPU reside nesta divisão inteligente de estados de treinamento.

Configuração de Ambiente e Instalação no Google Colab

O autor demonstra a parte prática utilizando o Google Colab, justificando a escolha por estar em um hardware Mac que não possui GPUs Nvidia nativas. Ele inicia realizando uma verificação de GPU e a instalação de pacotes essenciais como PyTorch, Hugging Face e o próprio DeepSpeed via pip. Um passo crucial mencionado é o uso do comando "ds_report" para validar a configuração do CUDA e do compilador. Esta seção foca na infraestrutura necessária antes de iniciar o código. O processo ilustra as dificuldades e soluções para quem não possui hardware local compatível.

Configurando o Arquivo JSON e o Estágio Dois do ZeRO

Nesta fase, o foco é a criação do arquivo JSON de configuração, descrito como a alma do negócio para o funcionamento do DeepSpeed. O narrador introduz o ZeRO estágio dois, que foca em dividir estados do otimizador e gradientes para reduzir o uso de memória. Ele aconselha os desenvolvedores a seguirem a documentação oficial e a evitarem adicionar configurações aleatórias de uma só vez. A maior parte do script utilizado foi extraída e adaptada das documentações do Hugging Face. O autor enfatiza a importância de ajustes finos para garantir que o sistema lide bem com o processamento.

Execução, Monitoramento e Erros de CUDA

O vídeo avança para a execução do treinamento utilizando um conjunto de dados reduzido para agilizar o exemplo. O autor alerta que, se a execução falhar neste ponto, geralmente é devido a incompatibilidades de CUDA e não a erros no modelo de IA. Após rodar o script por alguns minutos, são mostrados os resultados de pico de memória da GPU e a perda de treinamento (loss). Embora a perda não tenha caído drasticamente neste teste rápido, o objetivo principal era validar o fluxo de trabalho. Este trecho serve como um guia de diagnóstico rápido para problemas comuns de setup.

Explicação dos Estágios ZeRO e Offload de Memória

O narrador detalha os diferentes níveis do ZeRO, do estágio um ao três, explicando o que cada um deixa de armazenar na GPU única. O estágio três é apontado como o mais potente, pois divide também os parâmetros do modelo, oferecendo o maior ganho de memória possível. Caso a memória física ainda seja insuficiente, entra em cena o ZeRO-Infinity, que permite descarregar dados para a CPU ou NVMe. Essa técnica de "offload" é descrita como uma troca de velocidade por escala. O autor ressalta que conseguir rodar o modelo, mesmo que mais lentamente, já é uma grande vitória técnica.

Recursos Avançados e Conclusão do Tutorial

Na parte final, são mencionados recursos avançados como o paralelismo 3D e o suporte a modelos Mixture of Experts (MoE). O DeepSpeed é descrito como uma ferramenta versátil que se integra ao ecossistema do Hugging Face, permitindo que o desenvolvedor use apenas o necessário. O autor reforça que os ganhos de processamento são imensos em sistemas Windows ou Linux, onde a otimização de CUDA é mais direta. Ele encerra definindo o DeepSpeed como um botão de "me recuso a ficar sem memória hoje". O vídeo termina com um convite à inscrição para quem busca otimizar tempo e recursos de GPU.

Community Posts

No posts yet. Be the first to write about this video!

Write about this video