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
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.
| Tamanho do modelo | LoRA | Full 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.
- Memória utilizável: após o sistema operacional e os aplicativos, cerca de 27 GB.
- Modelo de 1.5B: LoRA 2 × 1,5 + 3 ≈ 6 GB, ajuste fino completo 12 × 1,5 + 4 ≈ 22 GB. Ambos cabem.
- 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.
- Ajuste fino completo, modelos maiores: um modelo de 3B precisa de cerca de 40 GB, portanto, cerca de 1.5B é o limite.
- QLoRA: um modelo de 27–32B precisa de cerca de 22–26 GB, o que cabe.
1.5B · LoRA 2 × 1.5 + 3 ≈ 6 GB
1.5B · full 12 × 1.5 + 4 ≈ 22 GBEm 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
- 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.
- Diminua o tamanho do lote. Menos exemplos por etapa significa menos ativações mantidas ao mesmo tempo.
- Mude para o QLoRA. A base de 4 bits ocupa cerca de um quarto da memória de uma de 16 bits.
- 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.
- 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.
- 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.
- 02GPU memory usageHugging Face Transformers docs · huggingface.co
- 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.
- 04Unified MemoryMLX docs · ml-explore.github.ioComo a CPU e a GPU do Apple silicon compartilham um único pool de memória.