Hoppa till innehållet
AI-grafen
F· AI engineeringmodelltraning-finjustering· ca 90 min· volatil — kontrolleras ofta· verifierad 2026-09-20

QLoRA

Kunna finjustera en kvantiserad basmodell med LoRA-adaptrar på begränsad GPU och jämföra med full LoRA.

Förkunskaper

Intuition

QLoRA = frys basmodellen i 4 bitar och träna LoRA-adaptrar i bf16 ovanpå. Gradienterna backpropageras genom den kvantiserade basen, men bara adaptrarna uppdateras.

Resultat: en 7B-modell finjusteras på ~6 GB, en 65B på ett enda 48 GB-kort.

Tre tekniska bitar som gör det möjligt:

  1. NF4 (4-bit NormalFloat) — ett kvantiseringsformat vars nivåer är informationsteoretiskt optimala för normalfördelade vikter, vilket neuronnätsvikter ungefär är.
  2. Dubbelkvantisering — kvantiseringskonstanterna kvantiseras också. Sparar ~0,4 bit per parameter.
  3. Paged optimizers — optimizer-tillstånd flyttas till CPU-minne vid toppar, så träningen inte kraschar på tillfälliga minnesspikar.

Pappret visar att QLoRA matchar 16-bitars full finjustering på deras uppgifter.

Kod

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
from peft import LoraConfig, get_peft_model, prepare_model_for_kbit_training

bnb = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_quant_type="nf4",            # NF4, inte vanlig int4
    bnb_4bit_use_double_quant=True,       # dubbelkvantisering
    bnb_4bit_compute_dtype=torch.bfloat16,  # beräkningar i bf16
)
m = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2.5-7B", quantization_config=bnb, device_map="auto")
m = prepare_model_for_kbit_training(m, use_gradient_checkpointing=True)
m = get_peft_model(m, LoraConfig(r=16, lora_alpha=32, lora_dropout=0.05, task_type="CAUSAL_LM",
                                 target_modules=["q_proj","k_proj","v_proj","o_proj","gate_proj","up_proj","down_proj"]))

opt = torch.optim.AdamW(m.parameters(), lr=2e-4)    # högre lr än full finjustering

Minnesjämförelse för 7B:

MetodBasGradienter + optimizerTotalt (ca)
Full bf1614 GB70 GB84 GB
LoRA bf1614 GB0,5 GB15 GB
QLoRA nf43,5 GB0,5 GB6 GB

Priset: träningen blir 20–40 % långsammare per steg (av- och återkvantisering vid varje framåtpass), och adaptern hör till den kvantiserade basen — slår du ihop den med en fp16-bas får du en liten kvalitetsförlust. Kör utvärderingen i samma precision som du tänker servera i.

Behärskning innebär

  • Finjusterar en 4-bit-kvantiserad basmodell med LoRA
  • Förklarar NF4, dubbelkvantisering och paged optimizers
  • Jämför QLoRA med LoRA i minne och kvalitet

Logga in för att göra övningarna och bygga upp din behärskning.

Källor

Alla källor och licenser