ZeRO e otimizadores fragmentados
ZeRO (Zero Redundancy Optimizer) elimina o desperdício de duplicação de memória do paralelismo de dados, fragmentando o estado, gradientes e pesos do otimizador entre GPUs.
Visão geral
ZeRO (Zero Redundancy Optimizer) elimina o desperdício de duplicação de memória do paralelismo de dados, fragmentando o estado, gradientes e pesos do otimizador entre GPUs. Ele permite treinar modelos enormes com a simplicidade do paralelismo de dados, mas com uma fração da memória por GPU.
ZeRO e Sharded Optimizers são componentes técnicos que afetam a qualidade do modelo, o custo da infraestrutura, a latência e a confiabilidade em escala.
Mergulho profundo
No paralelismo de dados comum, cada GPU armazena uma cópia completa redundante do estado, gradientes e parâmetros do otimizador, o que é um enorme desperdício, especialmente para Adam, onde o estado do otimizador pode ser várias vezes maior que o tamanho do próprio modelo. ZeRO, introduzido por Microsoft no DeepSpeed, remove essa redundância particionando esses tensores entre GPUs para que cada dispositivo possua apenas uma fatia. ZeRO vem em três estágios progressivos: Estado do otimizador de fragmentos do Estágio 1, Estágio 2 adiciona fragmentação de gradiente e Estágio 3 fragmenta os próprios parâmetros. Conforme necessário, as GPUs reúnem as fatias ausentes por meio de comunicação, calculam e depois as liberam. O resultado é uma memória drasticamente menor por GPU, permitindo treinamento de bilhões a trilhões de parâmetros, ao mesmo tempo em que mantém o modelo de programação fácil de paralelismo de dados.
Visão Técnica
ZeRO troca comunicação extra por economia de memória. No Estágio 3, antes do avanço de uma camada, um all-gather coleta todos os parâmetros daquela camada em cada GPU; depois, as fatias não pertencentes são descartadas para recuperar memória. Os gradientes são dispersos de forma reduzida, de modo que cada GPU mantém apenas a fatia do gradiente que corresponde aos parâmetros que possui. O FSDP (Fully Sharded Data Parallel) do PyTorch implementa a mesma ideia nativamente, agrupando módulos para fragmentar e refragmentar instantaneamente.
Dominando ZeRO e otimizadores fragmentados
Para construir um entendimento profundo, trate ZeRO e Sharded Optimizers como um modelo operacional, não como um único recurso. Defina os resultados desejados, esclareça suposições e separe o que o sistema pode fazer de forma confiável daquilo que ainda requer julgamento especializado.
Na prática, equipes fortes que usam ZeRO e Sharded Optimizers otimizam as escolhas de arquitetura, dados e infraestrutura em relação à confiabilidade e ao custo. Eles documentam critérios de sucesso explícitos, testam dados e fluxos de trabalho realistas e iteram com base em padrões de falha observados, em vez de ganhos únicos de benchmark. É aqui que a compreensão teórica se transforma em capacidade durável em produtos, políticas e operações.
As decisões de arquitetura impulsionam o desempenho e os custos operacionais durante anos. Ao mesmo tempo, a otimização de um benchmark pode ocultar fraquezas mais amplas do sistema. A abordagem mais resiliente é combinar a velocidade da experimentação com a disciplina de governação: executar pilotos, capturar provas, publicar registos de decisões e atualizar continuamente as salvaguardas à medida que o comportamento do modelo, as expectativas dos utilizadores e os requisitos regulamentares evoluem.
Impacto Estratégico
As decisões de arquitetura impulsionam o desempenho e os custos operacionais durante anos.
As decisões de arquitetura impulsionam o desempenho e os custos operacionais durante anos. Em implantações de alta qualidade, isso se traduz em regras operacionais mensuráveis, limites de propriedade e rituais de revisão recorrentes para que as equipes possam aumentar a confiança em vez de aumentar a ambiguidade.
A educação técnica ajuda as equipes a escolher a pilha certa, não apenas a mais nova.
A educação técnica ajuda as equipes a escolher a pilha certa, não apenas a mais nova. Em implantações de alta qualidade, isso se traduz em regras operacionais mensuráveis, limites de propriedade e rituais de revisão recorrentes para que as equipes possam aumentar a confiança em vez de aumentar a ambiguidade.
Melhores escolhas de engenharia reduzem incidentes de confiabilidade na produção.
Melhores escolhas de engenharia reduzem incidentes de confiabilidade na produção. Em implantações de alta qualidade, isso se traduz em regras operacionais mensuráveis, limites de propriedade e rituais de revisão recorrentes para que as equipes possam aumentar a confiança em vez de aumentar a ambiguidade.
Implementação no mundo real
Usando o DeepSpeed ZeRO Stage 2 para ajustar um modelo de linguagem com vários bilhões de parâmetros que, de outra forma, sobrecarregaria a memória da GPU.
Treinamento com PyTorch FSDP, que fragmenta parâmetros, gradientes e estado do otimizador em GPUs e os reúne por camada sob demanda.
Aplicando ZeRO-Offload para enviar o estado do otimizador para a memória da CPU, permitindo que uma única GPU treine um modelo muitas vezes maior que seu VRAM.
Dimensionando um modelo de trilhões de parâmetros com ZeRO-Infinity, transmitindo fragmentos de parâmetros do armazenamento NVMe quando a memória da GPU e da CPU acabar.
Padrões de Implementação
ZeRO e otimizadores fragmentados na prática
Usando o DeepSpeed ZeRO Stage 2 para ajustar um modelo de linguagem com vários bilhões de parâmetros que, de outra forma, sobrecarregaria a memória da GPU.
As equipes geralmente obtêm melhores resultados quando definem limites de qualidade antecipadamente, mantêm um caminho de escalonamento humano para casos extremos e acompanham os ganhos de produtividade e os custos de erros ao longo do tempo.
ZeRO e otimizadores fragmentados na prática
Treinamento com PyTorch FSDP, que fragmenta parâmetros, gradientes e estado do otimizador em GPUs e os reúne por camada sob demanda.
As equipes geralmente obtêm melhores resultados quando definem limites de qualidade antecipadamente, mantêm um caminho de escalonamento humano para casos extremos e acompanham os ganhos de produtividade e os custos de erros ao longo do tempo.
ZeRO e otimizadores fragmentados na prática
Aplicando ZeRO-Offload para enviar o estado do otimizador para a memória da CPU, permitindo que uma única GPU treine um modelo muitas vezes maior que seu VRAM.
As equipes geralmente obtêm melhores resultados quando definem limites de qualidade antecipadamente, mantêm um caminho de escalonamento humano para casos extremos e acompanham os ganhos de produtividade e os custos de erros ao longo do tempo.
ZeRO e otimizadores fragmentados na prática
Dimensionando um modelo de trilhões de parâmetros com ZeRO-Infinity, transmitindo fragmentos de parâmetros do armazenamento NVMe quando a memória da GPU e da CPU acabar.
As equipes geralmente obtêm melhores resultados quando definem limites de qualidade antecipadamente, mantêm um caminho de escalonamento humano para casos extremos e acompanham os ganhos de produtividade e os custos de erros ao longo do tempo.
Riscos e guarda-corpos
A otimização de um benchmark pode ocultar fraquezas mais amplas do sistema.
Os custos de infraestrutura e manutenção são frequentemente subestimados.
As lacunas de segurança e observabilidade podem aumentar à medida que os sistemas se tornam mais complexos.
Roteiro de implementação
Defina metas de latência, qualidade e custo antes da implementação.
Trate isso como uma porta de evidência: se os critérios não forem atendidos, pause a implementação, feche a lacuna e só então expanda o uso.
Benchmark sob condições realistas de carga e dados.
Trate isso como uma porta de evidência: se os critérios não forem atendidos, pause a implementação, feche a lacuna e só então expanda o uso.
Monitoramento de instrumentos para erros, desvios e impacto no usuário.
Trate isso como uma porta de evidência: se os critérios não forem atendidos, pause a implementação, feche a lacuna e só então expanda o uso.
Prepare caminhos de reversão e resposta a incidentes antes de escalar.
Trate isso como uma porta de evidência: se os critérios não forem atendidos, pause a implementação, feche a lacuna e só então expanda o uso.
Continue explorando
Check your understanding
Test yourself: take the ZeRO and Sharded Optimizers quiz
Frequently asked questions
What is ZeRO and Sharded Optimizers?
ZeRO (Zero Redundancy Optimizer) elimina o desperdício de duplicação de memória do paralelismo de dados, fragmentando o estado, gradientes e pesos do otimizador entre GPUs. Ele permite treinar modelos enormes com a simplicidade do paralelismo de dados, mas com uma fração da memória por GPU.
What redundancy does ZeRO eliminate compared to plain data parallelism?
Standard data parallelism stores a full copy of optimizer state, gradients, and weights on every GPU; ZeRO shards these so each GPU holds only a slice.
Why is optimizer state often the biggest memory hog with Adam?
Adam maintains running estimates such as first and second moments per parameter, which combined with fp32 master weights can dwarf the model's own size.
What does ZeRO Stage 3 shard that Stages 1 and 2 do not?
Stage 1 shards optimizer state, Stage 2 adds gradients, and Stage 3 goes further by sharding the model parameters across GPUs as well.
In ZeRO Stage 3, how does a GPU get the full parameters it needs for a layer's forward pass?
Before computing a layer, an all-gather assembles its full parameters on each GPU; once done, the non-owned slices are freed to reclaim memory.
Which PyTorch feature natively implements ZeRO-style sharding?
PyTorch's Fully Sharded Data Parallel (FSDP) shards parameters, gradients, and optimizer state, gathering and resharding them on the fly, mirroring ZeRO.