O que é
O QLoRA, abreviação de LoRA quantizado, combina duas ideias. A quantização armazena cada número em menos bits. O LoRA congela o modelo base e treina um pequeno adaptador ao lado dele. Como a base está congelada, ela nunca precisa de gradientes ou do estado do otimizador, podendo ser armazenada de forma compacta; apenas o adaptador precisa permanecer em uma precisão adequada para o aprendizado. O QLoRA mantém a base congelada em 4 bits, um quarto dos 16 habituais, e treina o mesmo adaptador LoRA por cima em 16 bits.
Ele foi introduzido por Dettmers et al. em 2023. O artigo deles realizou o ajuste fino de um modelo de 65 bilhões de parâmetros em uma única GPU de 48 GB, onde o ajuste fino regular de 16 bits exigiria mais de 780 GB, preservando o desempenho da tarefa do ajuste fino de 16 bits.
Como funciona
Um peso de 16 bits ocupa 2 bytes; um de 4 bits ocupa meio byte. Comprimir um modelo treinado de forma tão intensa sem arruiná-lo depende de três ingredientes do artigo:
- NormalFloat de 4 bits (NF4). Os pesos treinados seguem aproximadamente uma curva de sino centrada em zero. O NF4 posiciona seus 16 valores possíveis para corresponder a essa forma, de modo que mais deles caiam onde a maioria dos pesos está. No artigo, ele superou os números inteiros e de ponto flutuante comuns de 4 bits.
- Quantização dupla. Os pesos são quantizados em pequenos blocos, cada um com sua própria constante de escala, e essas constantes se somam. O QLoRA também quantiza as constantes, reduzindo seu custo de cerca de 0,5 para cerca de 0,13 bits por peso: uma economia de aproximadamente 3 GB em um modelo de 65B.
- Otimizadores paginados. Quando um exemplo longo causa um pico repentino de memória, o estado do otimizador é movido momentaneamente para a memória comum da CPU, em vez de a execução falhar.
Durante as passagens direta e reversa, os pesos de 4 bits de cada camada são descompactados (desquantizados) para 16 bits, usados para a aritmética daquela camada e, em seguida, descartados. Os gradientes fluem através da base congelada para o adaptador, que é a única parte que muda. A qualquer momento, a memória retém todo o modelo em 4 bits, mais o equivalente a uma camada de pesos de 16 bits.
bytes per weight of the frozen base
16-bit (bf16) 2 bytes
4-bit NF4 + double-quantised constants ≈ 0.52 bytes (≈ 4.13 bits)
an 8B model, frozen base only
16-bit 8 × 10⁹ × 2 bytes ≈ 16 GB
4-bit 8 × 10⁹ × 0.52 bytes ≈ 4.1 GB- LoRA em uma base de 16 bits: cerca de 16 GB apenas de pesos congelados. Com o adaptador, o estado do seu otimizador e as ativações, uma regra prática comum resulta em cerca de 19 GB. Não cabe.
- QLoRA: a base encolhe para cerca de 4–5 GB. Algumas partes, como as camadas de normalização e, frequentemente, as camadas de embedding e de saída, geralmente permanecem em 16 bits. Com o adaptador e a memória de trabalho, o total é de cerca de 9 GB, o que cabe com folga.
- O adaptador tem exatamente o mesmo tamanho de um adaptador LoRA do mesmo rank: dezenas de MB.
- A contrapartida: cada etapa é um pouco mais lenta, porque cada camada é descompactada em tempo real.
| Modelo | LoRA (base de 16 bits) | QLoRA (base de 4 bits) |
|---|---|---|
| 8B | ~19 GB | ~9 GB |
| 14B | ~33 GB | ~13 GB |
| 27–32B | ~60–70 GB | ~22–26 GB |
Estes são os totais para treinar, incluindo a memória de trabalho, e é por isso que ficam acima dos 4–5 GB que a página de ajuste fino completo fornece para a base de 4 bits de um modelo de 7B antes das ativações. Um laptop de 36 GB com memória compartilhada, com cerca de 27 GB livres depois que o sistema operacional consome sua parte, pode treinar um modelo de 27–32B com o QLoRA, contra cerca de 10B com o LoRA simples.
Quanto custa e quando usar
- Velocidade. Descompactar cada camada a cada etapa adiciona trabalho, portanto, o treinamento é um pouco mais lento do que o LoRA no mesmo modelo.
- Qualidade. Os resultados são muito próximos aos do LoRA. O artigo igualou o ajuste fino de 16 bits em seus benchmarks; pequenas diferenças ainda podem aparecer na sua própria avaliação, portanto, compare com uma execução de avaliação em vez de presumir.
- O resultado. Ainda é um adaptador. Carregue-o no modelo base normal de 16 bits ou em sua cópia de 4 bits; o adaptador em si não muda de tamanho.
- Quando. Use o QLoRA quando o modelo desejado não couber com o LoRA. Se couber, o LoRA simples é mais rápido para o mesmo resultado.
As configurações
Se a base congelada é carregada em 4 bits. Desativado treina um adaptador LoRA normal em uma base de 16 bits: mais rápido por etapa, mas exige cerca de três vezes mais memória. Ativado treina o QLoRA, a escolha ideal quando o modelo desejado não caberia de outra forma. Aplica-se apenas a adaptadores: um ajuste fino completo altera todos os pesos, portanto, cada peso deve permanecer em uma precisão treinável.
O formato numérico no qual os pesos de 4 bits são descompactados para a aritmética de cada camada, e o formato no qual o adaptador é treinado. O bf16 (bfloat16) mantém o intervalo de floats de 32 bits em 16 bits, de modo que os valores raramente sofrem overflow; as GPUs NVIDIA oferecem suporte a ele a partir da geração Ampere. GPUs mais antigas, como a T4, geralmente computam em fp16, que possui um intervalo menor.
Erros comuns
- Escolher o QLoRA quando o modelo já cabe com o LoRA. Isso apenas adiciona tempo de treinamento.
- Esperar um arquivo de resultado menor. O adaptador tem o mesmo tamanho de um adaptador LoRA; apenas a memória de treinamento encolhe.
- Tentar usar o QLoRA para fazer um ajuste fino completo caber. Ele se aplica apenas a adaptadores.
- Começar a partir de um modelo que já foi publicado compactado (FP8, MXFP4). O próprio QLoRA quantiza um modelo de precisão total, portanto, ele começa a partir da versão BF16.
- Carregar o adaptador em um modelo diferente, ou em uma versão diferente dele, daquele em que foi treinado.
Referências e leitura complementar
Fontes externas abrem em uma nova aba.
- 01QLoRA: Efficient Finetuning of Quantized LLMsDettmers et al., 2023 · arXiv · arxiv.orgO artigo original: NF4, quantização dupla, otimizadores paginados e o resultado de 65B em uma única GPU.
- 02Making LLMs even more accessible with bitsandbytes, 4-bit quantization and QLoRAHugging Face blog, 2023 · huggingface.coUm guia prático e acessível sobre o carregamento em 4 bits e o treinamento QLoRA.
- 03BitsandbytesHugging Face Transformers docs · huggingface.coAs opções de carregamento em 4 bits: NF4, quantização dupla e o dtype de computação.
- 04QuantizationHugging Face PEFT docs · huggingface.co
- 05LLM.int8(): 8-bit Matrix Multiplication for Transformers at ScaleDettmers et al., 2022 · arXiv · arxiv.orgO trabalho anterior em 8 bits que deu origem à biblioteca de quantização do QLoRA.