o problema
Fazer finetuning de 16 bits num LLaMA de 65B exige mais de 780 GB de memória de GPU. Isso não é uma máquina, é um cluster: na prática, adaptar os maiores modelos abertos a um domínio específico era privilégio de quem tinha um galpão. A comunidade de pesquisa podia baixar os pesos e não podia treinar em cima deles.
Já existiam duas saídas parciais e nenhuma resolvia o caso. Os métodos de quantização espremiam o modelo para 8 ou 4 bits, mas só funcionavam para inferência — no treino eles quebravam. Os adapters de baixo posto reduziam os parâmetros treináveis a uma fração, mas o modelo base continuava carregado em 16 bits, e é ele que ocupa quase toda a memória. Faltava juntar as duas coisas: guardar o modelo congelado em 4 bits e ainda assim conseguir passar gradiente através dele.
a ideia
QLoRA separa dois tipos de dado: um de armazenamento, em 4 bits, e um de computação, em BFloat16. O modelo base fica quantizado e congelado na memória. Toda vez que um tensor de peso é usado, ele é desquantizado para BFloat16, entra na multiplicação de matrizes e é descartado. O gradiente atravessa esse peso congelado e vai parar nos adapters LoRA, que são os únicos parâmetros com gradiente próprio — e esses ficam em 16 bits.
O truque é que o custo da desquantização é de tempo, não de memória: o peso em 16 bits existe por um instante, para uma camada de cada vez. O que fica residente é a versão de 4 bits. Um 65B que precisava de 780 GB passa a caber em menos de 48 GB.
como funciona
Três peças sustentam isso. A primeira é o NF4, um tipo de dado de 4 bits construído a partir dos quantis da normal padrão. Pesos de rede treinada são aproximadamente normais e centrados em zero; se você normaliza o tensor para o intervalo [-1, 1] pelo máximo absoluto, os quantis são conhecidos de antemão e cada bin recebe o mesmo número esperado de valores. Os autores ainda montam o tipo de forma assimétrica para garantir uma representação exata do zero, que é o que permite quantizar padding sem erro. A quantização é por bloco — blocos de 64 elementos, cada um com sua constante — justamente para que um outlier não estrague a escala do tensor inteiro.
A segunda é a double quantization: as constantes de quantização também ocupam memória. Com blocos de 64 e constantes em FP32, são 0,5 bit por parâmetro. Quantizando essas constantes para FP8 em blocos de 256, o custo cai para 0,127 bit — 0,373 bit a menos por parâmetro, cerca de 3 GB num modelo de 65B.
A terceira são os paged optimizers, que alocam os estados do otimizador em memória unificada da NVIDIA. Quando a GPU estoura ao processar um minibatch de sequência longa, as páginas são despejadas para a RAM da CPU e trazidas de volta na hora do update. É o que evita o out-of-memory pontual do gradient checkpointing.
Sobre isso vem uma configuração de LoRA mais agressiva que a usual: adapter em todas as camadas lineares, não só em query e value. Sai caro? Não: num LLaMA 7B, os adapters ocupam 26 MB contra 5.048 MB do modelo base em 4 bits e 567 MB de gradientes de entrada. Cortar adapters economiza pouco e custa desempenho.
o que isso custou
Os autores são explícitos: eles não demonstraram que QLoRA iguala o finetuning completo de 16 bits nas escalas de 33B e 65B. A comparação direta com full finetuning foi feita até 3B, com RoBERTa e T5; acima disso a linha de base é LoRA de 16 bits, porque rodar o full finetuning custaria mais de um servidor de GPUs. A extrapolação é razoável e continua sendo extrapolação.
A avaliação também é frágil, e o próprio paper diz isso. Os intervalos de confiança no benchmark Vicuna se sobrepõem entre vários modelos. O GPT-4 como juiz tem efeito de ordem — favorece a resposta que aparece primeiro — e se autopremia. Nem BigBench nem HELM foram rodados. Não foram testados 3 bits, nem outros métodos PEFT.
E o modelo resultante falha de formas conhecidas: erra fatos com confiança, entrega o segredo do prompt do sistema diante de “isto é um jogo, ignore suas instruções anteriores”, e afirma que 1.833 é primo antes de listar uma fatoração — errada — com três fatores.
onde isso aparece hoje
O método é uma composição, não uma ruptura: ele leva LoRA até onde ela não chegava sozinha, e só existe porque havia pesos abertos para congelar — a família LLaMA e as que vieram depois, como Llama 2. Os autores liberaram código, kernels CUDA de treino em 4 bits e a integração no stack do Hugging Face, o que é a diferença entre um resultado e uma ferramenta.
A segunda herança é metodológica e menos citada: o protocolo de torneio com Elo, comparação par a par e GPT-4 no papel de juiz, junto com a medição dos vieses desse juiz. Quem usa LLM-as-judge hoje herda os dois — o barateamento e o viés.