📚 Módulo 4: QLoRA — Ajuste Fino Quantizado de Alto Desempenho

4.1 Introdução ao QLoRA

QLoRA (Quantized Low-Rank Adaptation) é uma extensão natural e revolucionária do LoRA, apresentada no artigo “QLoRA: Efficient Finetuning of Quantized LLMs” (Dettmers et al., Universidade de Washington & MBZUAI, 2023). Enquanto LoRA reduz o número de parâmetros treináveis, QLoRA vai um passo além: reduz a precisão numérica dos pesos do modelo base para caber em GPUs com pouca memória mantendo um desempenho quase no nível do ajuste fino completo.

QLoRA permite treinar modelos de até 70 bilhões de parâmetros em uma única GPU de 48GB, e modelos de 30-40B em GPUs de 24GB. Além disso, modelos de 7B-13B podem ser treinados em GPUs de 16GB — como as oferecidas gratuitamente pelo Google Colab.

4.2 O Que É Quantização?

Quantização é uma técnica de compressão que reduz a precisão dos números que representam os pesos das redes neurais. Em vez de armazenar cada peso como um número de ponto flutuante de 32 bits (FP32) ou 16 bits (FP16/BF16), eles são armazenados como inteiros de 8 bits (INT8) ou até inteiros de 4 bits (INT4).

Por exemplo:

  • FP32: 32 bits por peso → 4 bytes
  • INT4: 4 bits por peso → 0,5 bytes

Isso significa que um modelo de 7 bilhões de parâmetros se reduz de ~28 GB em FP32 para apenas ~3,5 GB em INT4 — uma redução de 8 vezes.

4.3 Tipos de Quantização no QLoRA

QLoRA não usa quantização arbitrária. Emprega técnicas avançadas para minimizar a perda de precisão:

a) NormalFloat (NF4)

QLoRA introduz um novo tipo de dados: 4-bit NormalFloat (NF4). Ao contrário do INT4 padrão, que usa uma distribuição uniforme, NF4 é otimizado para dados que seguem uma distribuição normal (como pesos de redes neurais). Isso permite uma representação mais fiel de valores próximos a zero, onde reside a maior parte da informação útil.

b) Quantização Dupla

QLoRA aplica quantização em dois níveis:

  1. Quantiza pesos do modelo para 4 bits.
  2. Também quantiza constantes de escala (usadas para reverter a quantização durante o cálculo) para 8 bits.

Isso economiza aproximadamente 0,375 bits por parâmetro, equivalente a uma economia adicional de 315 MB em um modelo de 7B.

c) Otimizadores Paginados

QLoRA usa otimizadores "paginados" que gerenciam a memória de forma mais eficiente, evitando erros de Memória Insuficiente (OOM) ao processar sequências longas ou lotes grandes. Isso é especialmente útil em ambientes com restrições de memória.

4.4 Como o QLoRA Funciona na Prática?

QLoRA combina três componentes-chave:

  1. Quantização do modelo base para 4 bits (NF4) — apenas para armazenamento e inferência.
  2. LoRA aplicado sobre pesos quantizados — pesos LoRA (A e B) permanecem em precisão completa (BF16/FP16) durante o treinamento.
  3. Cálculo de precisão mista — durante os passos de avanço e retrocesso, pesos quantizados são temporariamente desquantizados para BF16 para cálculos de alta precisão, depois são requantizados.

Essa abordagem garante:

  • Uso mínimo de memória GPU.
  • Precisão computacional suficiente para evitar degradação do desempenho.
  • Apenas parâmetros LoRA são treinados, preservando a eficiência paramétrica.

4.5 Requisitos Técnicos e Limitações

Requisitos:

  • GPU NVIDIA com suporte CUDA.
  • bitsandbytes ≥ 0.41.0 (biblioteca que implementa a quantização de 4 bits).
  • transformers ≥ 4.30.0.
  • accelerate e peft.

Limitações:

  • Compatível apenas com arquiteturas de apenas decodificador como GPT, Llama, Mistral, Qwen. Não compatível com modelos codificador-decodificador como T5 ou BART em configurações padrão.
  • Nem todos os modelos são compatíveis. O modelo deve ter uma implementação compatível com bitsandbytes e AutoModelForCausalLM.
  • Sobrecarga computacional menor. A desquantização temporária adiciona uma leve latência, mas aceitável dado a economia de memória.
  • Não adequado para treinamento do zero. QLoRA é projetado exclusivamente para ajuste fino.

Course Info

Course: AI-course3

Language: PT

Lesson: Module4