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

Target modules och rank i LoRA

Kunna välja vilka lager som får adaptrar och vilken rank, och mäta effekten.

Förkunskaper

Intuition

Två val avgör LoRA-resultatet: vilka matriser som får adaptrar och vilken rank.

Target modules. Originalpappret satte adaptrar bara på q_proj och v_proj. Senare arbete (QLoRA m.fl.) visar att alla linjära lager — inklusive MLP-delarna gate_proj, up_proj, down_proj — ger bättre resultat när budgeten räcker. MLP-lagren är ungefär två tredjedelar av parametrarna; att hoppa över dem är att lämna mycket outnyttjat.

Rank. r = 4–8 räcker för stil och format. r = 16–64 för svårare anpassning. Högre rank hjälper främst när uppgiften kräver ny kunskap, inte bara nytt beteende.

Alpha. Skalningen är α/r. Håll α ≈ 2r som utgångspunkt, så slipper du justera inlärningstakten när du ändrar r.

Kod

from peft import LoraConfig, get_peft_model

ALLA_LINJARA = ["q_proj", "k_proj", "v_proj", "o_proj", "gate_proj", "up_proj", "down_proj"]

cfg = LoraConfig(
    r=16, lora_alpha=32, lora_dropout=0.05,
    target_modules=ALLA_LINJARA,        # inte bara q och v
    task_type="CAUSAL_LM",
)
m = get_peft_model(bas, cfg)
m.print_trainable_parameters()
# trainable params: 40,370,176 || all params: 7,281,... || trainable%: 0.55

# Parameterräkning för hand: r · (d_in + d_out) per matris
def lora_params(lager=32, d=4096, d_ffn=11008, r=16, moduler=ALLA_LINJARA):
    per_lager = 0
    for namn in moduler:
        d_in, d_ut = (d, d) if namn in ("q_proj", "k_proj", "v_proj", "o_proj") else \
                     ((d, d_ffn) if namn in ("gate_proj", "up_proj") else (d_ffn, d))
        per_lager += r * (d_in + d_ut)
    return per_lager * lager

for r in (4, 16, 64):
    print(r, f"{lora_params(r=r):,}")
# 4   15,335,424
# 16  61,341,696
# 64  245,366,784

Så väljer du utan att gissa: kör ett litet svep — r ∈ {8, 16, 32} × {bara attention, alla linjära} — på en delmängd av datan, med tre frön, och mät på din egen eval. Det tar några timmar och är den enda metoden som ger ett svar för just din uppgift.

Diagnostik om du har tillgång till en full finjustering: gör SVD på ΔW och titta på singulärvärdesspektrumet. Faller det brant efter k värden är r ≈ k tillräckligt.

Behärskning innebär

  • Väljer target modules medvetet
  • Väljer rank och alpha med motivering
  • Mäter effekten av valen i stället för att gissa

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

Källor

Alla källor och licenser