F· AI engineeringLaboration· ca 75 min· container
Labb: LoRA på ett litet nät — träna bara adaptrarna
Implementera en LoRA-adapter (W + BA, rank r), frysa basmodellen, träna bara adaptrarna på en ny uppgift och jämföra parameterantal och resultat med full finjustering.
Lär ut: lora · Kräver: matrisfaktoriseringtrana-ett-neuronnat-i-pytorch
Teori
ΔW = BA där B är d×r och A är r×k. Med r ≪ min(d,k) är antalet tränade parametrar r(d+k) i stället för dk. B initieras till noll så att modellen startar oförändrad.
Deluppgifter
- LoRALinear — `LoRALinear(base: nn.Linear, r, alpha)` — fryser base, lägger till A (r×in, liten normal) och B (out×r, nollor), forward = base(x) + (alpha/r)·(x Aᵀ) Bᵀ.
- apply_lora — `apply_lora(model, r, alpha)` byter ut alla nn.Linear i ett nn.Sequential; `trainable_params(model)`.
- finjustera — `finetune(model, X, y, steps, lr)` tränar bara parametrar med requires_grad; `merge(lora_layer)` returnerar en nn.Linear med W + (alpha/r)BA.
Evals: lora-vs-full (lora_acc >= 0.85)
Logga in för att köra laborationen.
Förväntade resultat
LoRA med r=4 tränar < 10 % av parametrarna och når ≥ 0,85 accuracy på den skiftade uppgiften; merge ger samma utdata som adapter-modellen.
Vanliga fel
- B initierat slumpmässigt → modellen ändras redan före träning.
- Glömmer frysa basvikterna (
requires_grad=False). - Skalning alpha/r saknas i merge.