Avançado
LoRA, QLoRA e PEFT
Fine-tuning parameter-efficient adapta um modelo por módulos treináveis pequenos; no Qwen3.8-27B a lista de módulos precisa alcançar as 48 camadas Gated DeltaNet, e o QLoRA é o que torna uma GPU de 24–48 GB viável.
Atualizada em
01 · Conceito
Conceito
Comece pelo número que encerra a conversa sobre fine-tuning completo. O Qwen3.8-27B são 54 GB de pesos em bf16. Os gradientes são outra cópia do mesmo tamanho. O AdamW carrega algo entre 12 e 16 bytes de estado por parâmetro, o que para 27B de parâmetros dá entre 324 e 432 GB. Some tudo e o fine-tuning completo quer algo na vizinhança de 430 a 540 GB de memória de acelerador antes de armazenar uma única ativação. Isso é um job multi-nó. Enquanto isso, a máquina que você realmente tem é uma única placa de 24 GB ou 48 GB. O fine-tuning parameter-efficient (PEFT) existe para fechar esse vão, e a aritmética de como ele fecha é a substância desta lição.
A Low-Rank Adaptation, ou LoRA, muda como uma camada linear é representada durante o fine-tuning. Seja o peso pré-treinado congelado . Em vez de atualizar todo o , o LoRA aprende
com e , e posto muito abaixo de qualquer uma das dimensões. O forward pass soma a contribuição do adapter à projeção original, escalada por um parâmetro alpha dividido pelo posto. A restrição de posto baixo é um viés indutivo, não um teorema: a adaptação útil pode viver num subespaço pequeno, e posto, posicionamento e dados decidem se ela vive.
Posicionamento é onde este modelo diverge fortemente da receita que a maioria dos tutoriais entrega. O artigo de LoRA de 2021 adaptou as projeções de query e value de um transformer uniforme, e esse padrão foi copiado desde então. Aplique isso ao Qwen3.8-27B e eis o que acontece. O modelo tem 64 camadas arranjadas como dezesseis repetições de três blocos Gated DeltaNet seguidos de um bloco Gated Attention. Apenas 16 das 64 camadas contêm as projeções de query e value que seu arquivo de configuração nomeia. As outras 48 — três quartos da profundidade — não recebem adapter nenhum. Você vai treinar, a loss vai cair, e você vai concluir que o LoRA tem desempenho fraco neste modelo. Não tem; sua lista de alvos deixou a maior parte dele de fora.
A lista de alvos correta segue a arquitetura. Nas 16 camadas de attention, as projeções que alimentam 24 query heads e 4 key/value heads com dimensão de head 256, mais a projeção de saída. Nas 48 camadas Gated DeltaNet, as projeções que produzem seus 16 query/key heads e 48 value heads com dimensão de head 128, mais sua projeção de saída; a convolução curta de kernel 4 e os parâmetros de gating normalmente ficam congelados, já que são minúsculos e numericamente delicados. E em todas as 64 camadas, as matrizes feed-forward com gate que levam o residual stream de largura 5120 até 17.408 e de volta — cerca de 17B de parâmetros vivem ali, mais da metade do modelo. Leia os nomes dos tensores do índice do safetensors em vez de adivinhá-los, e confira os shapes de passagem: as projeções de attention neste modelo são deliberadamente não quadradas, e um palpite derivado da config de que “tudo tem largura 5120” não sobrevive ao contato com o checkpoint.
Agora a aritmética de memória, passo a passo. Tome um posto de 16 e considere uma matriz que lê e escreve o residual stream de largura 5120. Seu adapter custa parâmetros — chame de 0,16M. Adapte quatro projeções em cada uma das 64 camadas e você tem 256 matrizes adaptadas, ou seja, cerca de 42M de parâmetros treináveis. (As larguras reais variam por módulo, então trate isso como dimensionamento ilustrativo, não como especificação.) Em bf16 esses pesos são cerca de 84 MB. O estado do AdamW a 12–16 bytes por parâmetro acrescenta aproximadamente 0,5 a 0,7 GB. Coloque isso ao lado dos 324 a 432 GB que o mesmo otimizador exigiria para o fine-tuning completo: três ordens de grandeza, com o mesmo otimizador, porque agora ele tem três ordens de grandeza menos parâmetros para rastrear.
Isso resolve a memória do otimizador, mas não o backbone congelado, que ainda precisa ficar residente no forward e backward. O QLoRA guarda esse backbone numa representação de poucos bits e desquantiza blocos para um dtype de computação maior conforme as operações rodam. Códigos puros de 4 bits definem um piso de 13,5 GB para 27B parâmetros arredondados, mas a residência real do QLoRA depende dos metadados de quantization, buffers, ativações, adapters e estado do otimizador do backend; tamanho de arquivo GGUF de inferência não mede memória de treino. O formato normal-float, a dupla quantization e os otimizadores paginados do artigo reduzem esse orçamento. Meça a stack exata no comprimento de sequência e micro-batch pretendidos.
O LoRA também compra flexibilidade de deploy. Um modelo base pode servir vários adapters pequenos, e um adapter pode ser mesclado nos pesos base para inferência quando os formatos numéricos permitem — o que frequentemente não acontece depois de quantização de 4 bits, então um adapter de QLoRA mesclado de volta num base de 4 bits é uma operação com perdas que merece avaliação própria. Adapters não mesclados deixam um servidor trocar de comportamento por requisição, ao custo de complexidade de batching.
PEFT é uma família mais ampla que o LoRA. Camadas de adapter inserem módulos pequenos, prompt tuning e prefix tuning aprendem vetores contínuos injetados no contexto ou nas camadas, treino seletivo descongela um subconjunto escolhido. Cada um corta uma costura diferente, e suporte em runtime, latência, troca multi-tenant e o comportamento sendo aprendido decidem qual costura serve.
Nada disso conserta dados de instrução ruins, evita esquecimento nem garante paridade com fine-tuning completo. Um adapter pequeno pode memorizar um dataset estreito ou degradar comportamento geral tanto quanto um treino completo. O modelo mental prático é uma fundação congelada mais uma superfície aprendida de direcionamento: o LoRA expressa a superfície como uma atualização de posto baixo, o QLoRA torna a fundação barata o bastante para segurar enquanto você a aprende, e o ganho de engenharia é separar capacidade pré-treinada compartilhada de mudança compacta, versionada e específica de tarefa.
02 · Analogia
Analogia
Um teatro tem uma grade de iluminação enorme e fixa. Recabear cada fio para cada espetáculo seria caro e arriscado. Em vez disso, a equipe acrescenta uma mesa de controle compacta que mistura alguns padrões coordenados de luz por cima da estrutura existente. LoRA é essa mesa: a matriz de pesos original fica congelada enquanto duas matrizes finas e treináveis compõem uma atualização de posto baixo. Espetáculos diferentes podem guardar mesas diferentes sem duplicar o teatro inteiro.
03 · Explique de volta
Explique de volta
Explique o LoRA como uma atualização de matriz, depois diga quais módulos você escolheria no Qwen3.8-27B e por que a receita padrão está errada para este modelo.
Comparar com uma resposta-modelo
O LoRA congela uma matriz de pesos pré-treinada W e aprende um delta de posto baixo BA, com o posto muito menor que as dimensões de W; só A e B recebem gradientes e estado de otimizador. A receita padrão adapta as projeções de query e value da attention, mas o Qwen3.8-27B tem attention completa em apenas 16 das suas 64 camadas. As outras 48 são camadas Gated DeltaNet com suas próprias projeções de query, key, value e saída, mais uma convolução curta. Mirar só a attention alcança um quarto da profundidade. Uma lista de alvos razoável cobre também as projeções do DeltaNet, e frequentemente as matrizes feed-forward com gate, que guardam cerca de 17B dos parâmetros do modelo.
04 · Teste seu entendimento
Teste seu entendimento
Conclua o teach-back e acerte o quiz para finalizar a aula.
◎ · Marcador de evidência
Fontes
- Edward J. Hu et al. (2021). LoRA: Low-Rank Adaptation of Large Language Models.
- Tim Dettmers et al. (2023). QLoRA: Efficient Finetuning of Quantized LLMs.
- Qwen Team (2026). Qwen3.8-27B Model Card.