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.
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:
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.
QLoRA não usa quantização arbitrária. Emprega técnicas avançadas para minimizar a perda de precisão:
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.
QLoRA aplica quantização em dois níveis:
Isso economiza aproximadamente 0,375 bits por parâmetro, equivalente a uma economia adicional de 315 MB em um modelo de 7B.
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.
QLoRA combina três componentes-chave:
Essa abordagem garante:
bitsandbytes ≥ 0.41.0 (biblioteca que implementa a quantização de 4 bits).transformers ≥ 4.30.0.accelerate e peft.bitsandbytes e AutoModelForCausalLM.