Recursos/Treinamento de modelo/O que acontece durante o treinamento

Prática recomendada

O modelo vai caber? Memória para treinamento

O treinamento precisa de espaço para os pesos do modelo, seus gradientes e o estado do otimizador, além da memória de trabalho. Uma regra prática simples, cerca de 2 GB por bilhão de parâmetros para o LoRA e 12 GB para o full fine-tuning, informa antes de começar se um modelo caberá na sua máquina.

Capítulo 65 min de leitura4 referências

Por que o treinamento precisa de mais do que o download

Executar um modelo exige pouco mais do que seus pesos: um modelo de 7B em 16 bits tem cerca de 14 GB. O treinamento exige mais, porque cada peso que aprende também precisa de um gradiente (para qual direção movê-lo) e do estado do otimizador (as médias móveis do Adam que definem a distância). Além disso, vêm as ativações da passagem direta, que crescem com o tamanho do lote e o comprimento do exemplo. Quais deles existem para quais pesos é o que separa o ajuste fino completo do LoRA.

A regra prática

Uma regra prática para a memória de treinamento
LoRA   ≈ 2 GB per billion parameters  + ~3 GB
         frozen 16-bit weights            adapter, activations, overhead

full   ≈ 12 GB per billion parameters + ~4 GB
         16-bit weight          2 bytes
         16-bit gradient        2 bytes
         Adam moment 1 (fp32)   4 bytes
         Adam moment 2 (fp32)   4 bytes
                              ─────────
                               12 bytes per weight
         (+ 4 bytes for a 32-bit master copy = 16)
  • O LoRA mantém a base congelada em 16 bits: 2 bytes por peso, ou seja, 2 GB por bilhão de parâmetros. O adaptador é minúsculo, e os ~3 GB o cobrem, bem como o seu estado do otimizador, as ativações em comprimentos moderados e o próprio framework.
  • O Full fine-tuning treina todos os pesos: um peso e um gradiente de 16 bits, além das duas estimativas de momento de 32 bits do Adam, totalizando 12 bytes por peso.
  • O QLoRA armazena a base congelada em 4 bits, o que reduz a memória para cerca de um terço da do LoRA: um modelo de 8B precisa de aproximadamente 9 GB em vez de 19.

A página de ajuste fino completo conta 16 bytes por peso, não 12. A diferença é a cópia mestre de 32 bits dos pesos que a receita clássica de precisão mista mantém ao lado das de 16 bits. Esta regra prática pressupõe o treinamento sem essa cópia extra; uma configuração que a mantém precisa de cerca de 16 GB por bilhão de parâmetros. Ambas são estimativas antes de exemplos longos: as ativações vêm em seguida e crescem com o comprimento máximo e o tamanho do lote.

Ajuste fino completo16 bits + Adam≈ 112 GBLoRABase de 16 bits, congelada≈ 15 GBQLoRABase de 4 bits, congelada≈ 4–5 GBAdam + cópia em fp32pesos congeladospesos treináveisgradientesestado do otimizador
Memória de GPU aproximada para o ajuste fino de um modelo de 7 bilhões de parâmetros, antes das ativações. O ajuste fino completo com Adam requer cerca de 16 bytes para cada peso: os pesos, seus gradientes, uma cópia mestre em precisão total e duas estatísticas do otimizador. O LoRA mantém a base congelada, de modo que os gradientes e o estado do otimizador existem apenas para o pequeno adaptador (aqui, cerca de 40 milhões de pesos).
Tamanho do modeloLoRAFull fine-tuning
0.5B~4 GB~10 GB
1.5B~6 GB~22 GB
3B~9 GB~40 GB
7B~17 GB~88 GB
14B~31 GB~172 GB

As ativações são a parte que a regra só pode aproximar. Elas crescem com o número de tokens mantidos ao mesmo tempo, o tamanho do lote vezes o comprimento do exemplo, portanto, dobrar o comprimento máximo quase as dobra, e a atenção pode adicionar mais ainda para exemplos muito longos. A sobrecarga fixa na regra pressupõe comprimentos moderados. Se os seus exemplos forem longos, deixe uma margem extra em vez de planejar até o último gigabyte.

Quanta memória você realmente tem

Em laptops com memória unificada, como os Macs com Apple silicon, a GPU compartilha a memória principal, de modo que um laptop de 36 GB pode dar a um modelo mais espaço do que uma GPU típica de jogos. Mas o sistema operacional e os seus outros aplicativos precisam da sua parte, então planeje que cerca de três quartos dela estejam livres para o treinamento. Em um PC com uma placa de vídeo separada, o limite é a própria memória da GPU, não a RAM do computador.

Laptop de 36 GB27 GB utilizáveisSO, apps1.5B · LoRA≈ 6 GB · cabe7B · LoRA≈ 17 GB · cabe14B · LoRA≈ 31 GB · grande demais32B · QLoRA≈ 22–26 GB · cabe1.5B · completo≈ 22 GB · cabe3B · completo≈ 40 GB · grande demais
O que cabe em um laptop de 36 GB com memória compartilhada, pela regra prática desta página. Cerca de 27 GB restam para treinamento depois que o sistema operacional e seus outros aplicativos consomem sua parte. Estimativas ilustrativas: exemplos longos e lotes grandes precisam de mais.
O que cabe em um laptop de 36 GB (ilustrativo)
  1. Memória utilizável: após o sistema operacional e os aplicativos, cerca de 27 GB.
  2. Modelo de 1.5B: LoRA 2 × 1,5 + 3 ≈ 6 GB, ajuste fino completo 12 × 1,5 + 4 ≈ 22 GB. Ambos cabem.
  3. LoRA, modelos maiores: um modelo de 7B precisa de cerca de 17 GB e cabe; um modelo de 14B precisa de mais de 30 GB e não cabe. Na prática, o LoRA acomoda modelos de até cerca de 10B.
  4. Ajuste fino completo, modelos maiores: um modelo de 3B precisa de cerca de 40 GB, portanto, cerca de 1.5B é o limite.
  5. QLoRA: um modelo de 27–32B precisa de cerca de 22–26 GB, o que cabe.
O modelo de 1.5B, de ambas as formas
1.5B · LoRA    2 × 1.5 + 3   ≈  6 GB
1.5B · full   12 × 1.5 + 4   ≈ 22 GB

Em uma GPU NVIDIA de 16 GB, a mesma regra diz que um modelo de 8B precisa de cerca de 19 GB com o LoRA, o que é muito, mas de cerca de 9 GB com o QLoRA, o que cabe com espaço para exemplos mais longos.

Se uma execução ficar sem memória

  1. Diminua o comprimento máximo. A memória cresce com o comprimento do exemplo, então isso é o que mais libera espaço. Verifique primeiro se os seus exemplos típicos ainda cabem.
  2. Diminua o tamanho do lote. Menos exemplos por etapa significa menos ativações mantidas ao mesmo tempo.
  3. Mude para o QLoRA. A base de 4 bits ocupa cerca de um quarto da memória de uma de 16 bits.
  4. Use o checkpointing de gradiente. Ele troca cerca de 20–30% de velocidade por muito menos memória de ativação, e muitas receitas já o ativam.
  5. Escolha um modelo menor, ou use o LoRA em vez do ajuste fino completo.

Erros comuns

  • Julgar pelo tamanho do download. O ajuste fino completo precisa de seis a oito vezes os pesos de 16 bits, além das ativações.
  • Contar toda a RAM de um laptop com memória compartilhada como disponível. O sistema operacional e outros aplicativos precisam da sua parte.
  • Contar a RAM de um PC em vez da memória da sua placa de vídeo.
  • Aumentar o comprimento máximo ou o tamanho do lote após uma execução caber, e esperar que a próxima execução também caiba.
  • Reduzir o comprimento máximo abaixo do comprimento dos seus exemplos típicos, para que o modelo nunca veja o final das respostas que deveria aprender.

Referências e leitura complementar

Fontes externas abrem em uma nova aba.

  1. 01ZeRO: Memory Optimizations Toward Training Trillion Parameter ModelsRajbhandari et al., 2019 · arXiv · arxiv.orgA contabilidade padrão de pesos, gradientes e estado do otimizador por parâmetro.
  2. 02GPU memory usageHugging Face Transformers docs · huggingface.co
  3. 03Model memory estimatorHugging Face Accelerate docs · huggingface.coUma ferramenta para estimar a memória de um modelo específico do Hugging Face para execução e treinamento.
  4. 04Unified MemoryMLX docs · ml-explore.github.ioComo a CPU e a GPU do Apple silicon compartilham um único pool de memória.

Transforme semanas de trabalho especializado em minutos

Veja como o Scalata se adapta à sua equipe, aos seus dados e aos seus Controles.

Fale com vendas