LoRA (Low-Rank Adaptation)

LoRA (Low-Rank Adaptation) je technika, ako doladiť veľký model na konkrétnu úlohu tak, že necháš pôvodné váhy „zamrznuté" a učíš len malé doplnkové vrstvy — výsledkom je lacnejší, praktickejší a modulárny fine-tuning. Od svojho vzniku v roku 2021 sa LoRA stala štandardom v komunite a v roku 2026 je základným nástrojom každého, kto pracuje s open-source modelmi.


1. Čo to je (definícia + analógia)

  • Jadro: namiesto úpravy miliónov/miliárd parametrov trénuješ malé „adaptéry", ktoré modelu jemne zmenia správanie.

  • Analógia s okuliarmi: oči (základný model) necháš rovnaké, ale pridáš šošovky (LoRA), ktoré zmenia, ako vidíš detail pre konkrétnu situáciu. Môžeš mať viac párov šošoviek — na čítanie, šport, noc — a vymieňaš ich podľa kontextu.

  • Prečo low-rank: zmena správania sa dá často vystihnúť „menšou" úpravou než plnou maticou váh. Väčšina úloh nevyžaduje modifikáciu každého parametra — stačí zachytiť niekoľko kľúčových dimenzií.

  • Kde sa s tým stretneš: pri prispôsobovaní open-source modelov (Llama, Mistral, Gemma, Qwen), pri generovaní obrázkov/štýlov (Stable Diffusion, Flux), aj pri doménových jazykových modeloch pre firmy.

  • Pôvod: metóda pochádza z papiera „LoRA: Low-Rank Adaptation of Large Language Models" (Hu et al., 2021, Microsoft Research), dnes citovaného státisíckrát.


2. Ako to funguje

  • Zmrazenie základného modelu: pôvodné váhy sa nemenia, čo znižuje riziko, že „rozbiješ" všeobecné schopnosti modelu (catastrophic forgetting je tu výrazne tlmený).

  • Pridanie adaptérov: do vybraných vrstiev (typicky attention projekcie — q_proj, k_proj, v_proj, o_proj) sa vložia malé trénovateľné matrice nízkého ranku.

  • Tréning len adaptérov: učíš radovo menej parametrov, takže:

    • Rýchlejšie trénuješ (desatiny až stovky hodín GPU namiesto tisícov),
    • potrebuješ menej pamäte (LoRA adaptér pre 7B model môže mať len 50–200 MB),
    • vieš spraviť viac variantov naraz bez replikovania základného modelu.
  • Použitie v inferencii: LoRA môže byť:

    • Pripojená dynamicky (zapnúť/vypnúť podľa potreby, jeden base model, N adaptérov),
    • alebo zliata do váh pred deploymentom (merge + unload), čím sa elimínuje overhead pri inferencii.
  • Praktický detail: kvalita závisí od toho, kam adaptér vložíš (ktoré vrstvy a projekcie), akú „kapacitu" (rank r) mu dáš a aký pomer alpha/r použiješ na škálovanie gradientov.


3. Matematika v jednej rovnici (a v kóde)

LoRA aproximuje zmenu váhovej matice ΔW ako súčin dvoch malých matíc nízkého ranku r:

W_eff = W_frozen + (B · A) · (alpha / r)
        \______/   \_____/
        zamrznuté   trénované (A: r×d_in, B: d_out×r) — zlomok parametrov

Ak má pôvodná matica rozmer d_out × d_in, LoRA ukladá len r × (d_in + d_out) parametrov. Pri r=8 a typickej attention projekcii so d=4096 to znamená úsporu ~99 %.

class LoRALinear(nn.Module):
    def __init__(self, base, r=8, alpha=16):
        super().__init__()
        self.base = base                      # zamrznuté pôvodné váhy
        self.A = nn.Parameter(torch.randn(r, base.in_features) * 0.01)
        self.B = nn.Parameter(torch.zeros(base.out_features, r))
        self.scale = alpha / r

    def forward(self, x):
        return self.base(x) + (x @ self.A.T @ self.B.T) * self.scale

B sa inicializuje na nulu, takže na začiatku sa model správa presne ako pôvodný a postupne sa doladí. A sa inicializuje náhodne (Gaussian), aby gradient cez B nebol nulový od začiatku.


4. Varianty a rozšírenia (stav 2026)

LoRA odštartovala celú rodinu metód, ktoré riešia jej slabé miesta:

Variant Čo pridáva oproti LoRA Kedy použiť
QLoRA Základný model kvantizovaný na 4-bit (NF4), adaptér v plnej presnosti Tréning na spotrebiteľskom GPU (RTX 4090, 24 GB VRAM)
DoRA Dekomponuje váhy na smer + magnitúdu, trénuje obe Lepšia stabilita trénovania, blíži sa plnému fine-tuningu
LoRA+ Rôzne learning rates pre matice A a B Rýchlejšia konvergencia bez zmeny architektúry
VeRA Zdieľané zamrznuté matrice A a B naprieč vrstvami, trénujú sa len škálovacie vektory Extrémne malé adaptéry (tisícnásobne menej parametrov)
MoLoRA Mixture-of-experts nad LoRA adaptérmi Viac úloh v jednom adaptéri bez konfliktov
LongLoRA Rozšírenie kontextového okna bez plného fine-tuningu Modely s dlhým kontextom (32k–128k tokenov)
LoRA-FA Zamrazí aj maticu A, trénuje len B Minimálne požiadavky na pamäť pri zachovaní kvality

V roku 2026 je QLoRA de facto štandardom pre experimentovanie na bežnom hardvéri. Frameworky ako Unsloth kombinujú QLoRA s optimalizovanými CUDA kernelmi a dosahujú 2–5× rýchlejší tréning oproti naivnej implementácii.


5. Hyperparametre: ako ich vybrať

Výber správnych nastavení je pri LoRA rovnako dôležitý ako kvalita dát. Zlý rank alebo nesprávne cieľové moduly môžu eliminovať akýkoľvek prínos.

Rank (r):

  • r=4–8: postačí pre štýl, formát, jednoduchú doménu.
  • r=16–32: vhodné pre komplexnejšie doménové doladenie s viacerými schopnosťami.
  • r=64–128: blíži sa plnému fine-tuningu, používa sa na substantívne zmeny správania.
  • Zvyšovanie ranku nad praktický strop (závisí od datasetu) neprináša zisk — len predražuje tréning.

Alpha (alpha):

  • Typicky alpha = 2 × r (napr. r=16, alpha=32).
  • Pomer alpha/r určuje efektívne škálovanie — jeho zmena má podobný efekt ako zmena learning rate pre adaptér.

Cieľové moduly (target_modules):

  • Minimum: q_proj, v_proj (attention query a value).
  • Štandard: všetky attention projekcie vrátane k_proj, o_proj.
  • Maximum: aj MLP vrstvy (gate_proj, up_proj, down_proj) — lepšia kvalita, viac parametrov.

Dropout:

  • lora_dropout=0.05–0.1 pomáha pri malých datasetoch (< 1 000 príkladov).
  • Pri väčších datasetoch môže byť 0.

6. Nástroje a ekosystém

V roku 2026 existuje zrelý ekosystém pre prácu s LoRA:

  • HuggingFace PEFT — referenčná implementácia, podporuje LoRA, QLoRA, DoRA, AdaLoRA. Integrovaná s transformers a trl.
  • Unsloth — optimalizovaný tréning (2–5× rýchlejší, 60 % menej pamäte), jednoduchý API, populárny pre experimenty na jednej GPU.
  • Axolotl — konfigurovateľný YAML-driven framework, podporuje distribuovaný tréning, vhodný pre produkciu.
  • LLaMA-Factory — webové UI + CLI, vhodné pre tímy bez hlbokých ML znalostí.
  • torchtune — PyTorch-natívna alternatíva od Meta, dobre integrovaná s PyTorch 2.x.
  • Civitai / HuggingFace Hub — distribučné platformy pre hotové LoRA adaptéry (obrazové modely, jazykové štýly).

Minimálny príklad s PEFT:

from peft import get_peft_model, LoraConfig, TaskType

config = LoraConfig(
    task_type=TaskType.CAUSAL_LM,
    r=16,
    lora_alpha=32,
    target_modules=["q_proj", "k_proj", "v_proj", "o_proj"],
    lora_dropout=0.05,
    bias="none",
)
model = get_peft_model(base_model, config)
model.print_trainable_parameters()
# trainable params: 20,971,520 || all params: 7,241,732,096 || trainable%: 0.29

7. Prečo je to dôležité / kde sa to používa

  • Personalizácia bez obrovských nákladov: firmy aj jednotlivci vedia mať vlastné verzie modelu pre:

    • špecifický štýl komunikácie (zákaznícky support, interné odpovede),
    • doménu (práca s internými dokumentmi, technická terminológia, právne texty),
    • formát (šablóny, JSON výstupy, konzistentné štruktúry).
  • Ekosystém „malých doplnkov": namiesto jedného monolitického modelu vzniká knižnica LoRA modulov — rôzne štýly, rôzne úlohy, rôzne jazyky. Jeden base model, desiatky špecializácií.

  • Výskum a experimentovanie: vieš rýchlo porovnať, ktorý adaptér funguje lepšie, bez pretrénovania celého modelu. Iteračný cyklus sa skracuje z dní na hodiny.

  • Obrazová generácia: v ekosystéme Stable Diffusion a Flux sú LoRA „balíčky štýlu" — jeden súbor 50–200 MB zachytáva umelecký štýl, tvár osoby, alebo vzhľad produktu.


8. Výhody a obmedzenia

Prístup Výhoda Kedy zlyháva
LoRA Lacný fine-tuning, malé súbory, rýchle iterácie, modularita Keď potrebuješ hlbokú zmenu správania naprieč celým modelom
QLoRA Tréning na spotrebiteľskom GPU, ešte menej pamäte Mierne pomalší, drobná degradácia kvality vs. LoRA v plnej presnosti
Plný fine-tuning Maximálna flexibilita, najvyššia strop kvality Drahý, riziko catastrophic forgetting, veľké checkpointy
Len promptovanie Nula tréningu, rýchle nasadenie Keď chceš stabilný štýl a prompt je príliš krehký alebo dlhý
RAG Pridáva znalosti bez trénovania Keď problém je v správaní, nie v chýbajúcich faktoch

Ďalšie obmedzenia:

  • Obmedzená kapacita: malý adaptér nemusí stačiť na komplexnú doménu s mnohými sub-schopnosťami.
  • Konflikty medzi adaptérmi: viac LoRA naraz môže viesť k nečakanému miešaniu štýlov — riešia to metódy ako LoRA merging (TIES, DARE) alebo MoLoRA.
  • Kvalita dát je kritická: LoRA ti neodpustí zlé príklady — chaotické dáta = chaotické správanie, a s malým počtom parametrov sa to prejaví rýchlejšie než pri plnom fine-tuningu.
  • Zameranie na existujúce schopnosti: LoRA doladí, čo model vie — nevloží mu znalosti, ktoré nikdy nevidel.

9. Praktické použitie

  • Pre bežného používateľa: ak používaš nástroje, ktoré ponúkajú „štýlové balíčky" alebo doménové doplnky, často ide práve o LoRA alebo podobný adaptér.

  • Pre tím, ktorý chce vlastný štýl: LoRA je dobrá voľba, keď chceš:

    • konzistentný tón (napr. stručné odpovede, vždy s bodmi),
    • dodržiavanie formátu (napr. JSON štruktúry, Markdown tabuľky),
    • doménové frázy (produktové názvy, interné skratky, odborná terminológia).
  • Odporúčaný minimálny dataset:

    • Štýl/formát: 200–500 kvalitných príkladov.
    • Doménové znalosti: 1 000–5 000 príkladov (závisí od šírky domény).
    • Komplexné správanie: 5 000–50 000 príkladov.
  • Tipy, ktoré šetria nervy:

    • Verzionovanie: označ si, na akých dátach, s akým rankom a s akým base modelom LoRA vznikla.
    • Test set: mal sadu 50–200 otázok, na ktorých vždy porovnáš starú a novú verziu pred deploymentom.
    • Jasné ciele: trénuj na jednu vec (štýl, doména, formát) — miešanie cieľov bez kontroly sa rýchlo pokazí.
    • Eval pred merge: vždy otestuj adaptér pripojený dynamicky pred tým, než ho zlúčiš do base modelu.
  • Kedy to nepoužiť: ak je problém skôr v chýbajúcich informáciách než v správaní, často viac pomôže RAG (pripojenie znalostnej bázy) než LoRA. LoRA mení, ako model odpovedá — nie čo vie.


10. Súvislosti

  • Transfer learning: LoRA je parameter-efficient forma fine-tuningu — stavíš na to, čo model už vie.
  • Gradient Descent: trénujú sa len adaptéry — nízky learning rate (1e-4 až 3e-4) je štandard.
  • Overfitting: pri malom datasete LoRA ľahko „prestrelí" — dropout a early stopping sú kľúčové.
  • Diffusion models: v generovaní obrázkov sú LoRA „balíčky štýlu", dnes na Civitai státisíce hotových adaptérov.
  • Quantization: QLoRA kombinuje 4-bitovú kvantiizáciu so štandardnou LoRA — základ pre tréning na spotrebiteľskom hardvéri.
  • RAG: komplementárna technika — keď chýbajú znalosti (nie štýl), RAG je správnejšia voľba.

Zhrnutie

  • LoRA umožní doladiť model tým, že trénuješ malé nízkorehovodné adaptéry namiesto celých váh — typicky menej než 1 % parametrov.
  • Výhody sú nízka cena, rýchlosť a modularita — jeden base model, desiatky špecializácií, každá ako malý súbor.
  • V roku 2026 je ekosystém zrelý: QLoRA + Unsloth pre experimenty, Axolotl pre produkciu, PEFT ako referenčná implementácia.
  • Limity sú kapacita adaptéra, možné konflikty pri kombinovaní a veľká závislosť od kvality tréningových dát.
  • V praxi je ideálne na štýl, formát a doménové doladenie bez extrémnych nákladov; keď chýbajú znalosti (nie štýl), správnejšia voľba je RAG.