Tamsi svorių matrica iš mažų kvadratėlių; viena eilutė ir vienas stulpelis šviečia žydrai — tai LoRA adapteris.

Kaip pritaikyti DI modelį sau: nuo pilno fine-tuning iki 13 parametrų

dimodeliaipraktika

Įsivaizduok, kad turi 800 puslapių knygą ir nori, kad ji kalbėtų tavo įmonės kalba. Turi tris variantus: perrašyti kiekvieną puslapį, priklijuoti kelis lapelius su pastabomis, arba parašyti vieną sakinį ant viršelio.

Būtent taip atrodo ir šiuolaikinis DI modelių derinimas (fine-tuning). Per penkerius metus jis nuėjo kelią nuo „perrašom viską“ iki „pakeičiam 13 skaičių“ — ir, kas įdomiausia, rezultatas beveik nenukenčia.

Šis įrašas paaiškina, kas fiziškai vyksta modelio viduje, kai jį deriname, ir kuo skiriasi penki populiariausi metodai. Techninių žinių nereikia.

Kas yra modelio „svoriai“

Kalbos modelis — tai milžiniška krūva skaičių. Jie vadinami svoriais ir sugrupuoti į lenteles, kurias matematikai vadina matricomis: eilutės, stulpeliai, langeliai. Kiekvienas langelis — vienas skaičius.

Vidutinio dydžio atvirame modelyje (8 mlrd. parametrų) yra maždaug 8 milijardai tokių langelių, sudėtų į kelis šimtus matricų. Viena tipinė matrica būna 4096 × 4096 — tai beveik 17 milijonų skaičių viename bloke.

Kai sakome „apmokom modelį“, turime galvoje: pakeičiam šiuos skaičius taip, kad modelis geriau atliktų mūsų užduotį. Vienintelis klausimas — kiek jų reikia pakeisti.

Diagrama: kiek langelių iš tikrųjų treniruojame

Žemiau — ta pati svorių matrica, tik sumažinta iki 24 × 24 langelių, kad tilptų į ekraną. Paspausk metodo pavadinimą ir pažiūrėk, kas nusidažo spalva — spalvoti langeliai yra tie, kuriuos treniruotė iš tikrųjų keičia.

nauji svoriai = W + B · A

W — pradiniai svoriai
24 × 24 = 576
B
24 × 2
A — 2 × 24
v — 13 treniruojamų skaičių
iš jų fiksuota projekcija pagamina A ir B
adapteris nenaudojamas
  • treniruojama
  • užšaldyta
  • suspausta iki 4 bitų

Treniruojami visi langeliai — 576 iš 576 (100 %)

Tikrame 8 mlrd. modelyje
~8 000 000 000 parametrų
Ką išsaugai po treniruotės
visą naują modelį, ~16 GB
Kiek reikia GPU atminties
~120 GB (keli serveriniai GPU)

Treniruojamos tik dvi plonos juostos — 96 iš 576 (16,7 %)

Tikrame 8 mlrd. modelyje
~42 mln. parametrų (0,5 %)
Ką išsaugai po treniruotės
adapterio failą, ~85 MB
Kiek reikia GPU atminties
~20 GB (viena stipri plokštė)

Treniruojama tik viena juosta — 48 iš 576 (8,3 %)

Tikrame 8 mlrd. modelyje
~21 mln. parametrų (0,26 %)
Ką išsaugai po treniruotės
pusę LoRA adapterio, ~42 MB
Kiek reikia GPU atminties
iki 1,4× mažiau nei LoRA

Juostos tos pačios kaip LoRA — bet W laikoma 4 bitų tikslumu

Tikrame 8 mlrd. modelyje
~42 mln. parametrų (0,5 %)
Ką padaro suspaudimas
bazinis modelis 16 GB → ~4,5 GB
Kiek reikia GPU atminties
~8–10 GB (žaidimų plokštė)

Treniruojamas vienas mažas vektorius — 13 skaičių

Iš ko atsiranda A ir B
iš fiksuotos atsitiktinės projekcijos
Ką išsaugai po treniruotės
26 baitus
Rezultatas straipsnyje
91,8 % GSM8K (Qwen2.5-7B, RL)
Čia matrica sumažinta iki 24 × 24 langelių, kad tilptų į ekraną. Tikrame modelyje ji būna 4096 × 4096, o adapterio juostos lieka tokios pat plonos — todėl treniruojama dalis nukrenta nuo 16,7 % iki mažiau nei 1 %. Atminties skaičiai — apytiksliai, 8 mlrd. parametrų modeliui.

Trumpai apie tai, ką matai: viršuje užrašyta lygtis nauji svoriai = W + B · A. W — originalūs modelio svoriai. B · A — dviejų plonų juostų sandauga, kuri sukuria pokytį. Visa gudrybė ta, kad plonų juostų reikia daug mažiau nei pilnos matricos.

Kodėl plonų juostų užtenka

Čia ir slypi svarbiausia mintis. Įsivaizduok įprastą daugybos lentelę 100 × 100. Joje yra 10 000 langelių. Bet ar reikia įsiminti visus 10 000 skaičių? Ne — užtenka žinoti eilučių ir stulpelių skaičius (100 + 100 = 200) ir kiekvieną langelį galima atkurti sudauginus du skaičius.

Tas pats principas veikia ir modelyje. Pasirodo, kad pokytis, kurio reikia norint išmokyti modelį naujo stiliaus ar formato, nėra „chaotiškas“ — jį galima suspausti į kelias plonas juostas. Kiek jų reikia, nusako skaičius, vadinamas rangu (rank): rangas 1 — viena juostų pora, rangas 16 — šešiolika.

Praktikoje tai reiškia štai ką. Blokui 4096 × 4096:

Kas treniuojamaLangeliųDalis
Visa matrica W16 777 216100 %
Adapteris, rangas 16131 0720,78 %
Adapteris, rangas 432 7680,20 %

Originalūs svoriai lieka nepaliesti — jie tik „skaitomi“. Treniruotė keičia vien adapterį.

Penki metodai iš eilės

1. Pilnas fine-tuning — perrašom visą knygą

Keičiami visi svoriai. Veikia gerai, bet kaina brutali: reikia laikyti ne tik patį modelį, bet ir gradientus bei optimizatoriaus būseną — apie 16 baitų kiekvienam parametrui. 8 mlrd. modeliui tai maždaug 120 GB vaizdo atminties, t. y. keli serveriniai GPU. O rezultatas — dar viena 16 GB failų kopija kiekvienai užduočiai.

2. LoRA — priklijuojam pastabas

2021 m. LoRA pasiūlė paprastą dalyką: užšaldyti originalius svorius ir treniruoti tik dvi plonas matricas A ir B. Straipsnio autorių skaičiai su GPT-3 (175 mlrd. parametrų):

Tas 35 MB failas ir yra „adapteris“. Jį galima siųsti el. paštu, laikyti dešimtis skirtingų versijų ir uždėti ant to paties bazinio modelio — kaip objektyvą ant fotoaparato.

Praktinis niuansas, kurį patvirtino Thinking Machines tyrimas (2025 m.): adapterius verta dėti ant visų sluoksnių, ypač MLP, o ne tik ant dėmesio (attention) blokų. Tik dėmesiui taikoma LoRA pastebimai atsilieka net tada, kai treniruojamų parametrų skaičius toks pat. Ir dar: LoRA optimalus mokymosi tempas yra maždaug 10× didesnis nei pilno fine-tuning.

3. LoRA-FA — užšaldom ir pusę adapterio

LoRA-FA (2023 m.) pastebėjo, kad iš dviejų juostų viena gali likti nejudinama. Užšaldoma A (ta, kuri „suspaudžia“ įvestį), treniruojama tik B. Treniruojamų skaičių — perpus mažiau, o pagrindinė nauda net ne ta: nebereikia saugoti tarpinių skaičiavimų, todėl bendras atminties poreikis krenta iki 1,4× lyginant su LoRA. Tikslumas, pagal straipsnį, lieka toks pat.

4. QLoRA — susmulkinam pačią knygą

QLoRA (2023 m.) sprendžia kitą problemą. Net jei treniruoji tik 0,5 % svorių, likusius 99,5 % vis tiek reikia laikyti atmintyje. Sprendimas — sumažinti kiekvieno skaičiaus tikslumą nuo 16 bitų iki 4 bitų (formatas NF4), pridedant dar du triukus: dvigubą kvantavimą ir puslapiuojamus optimizatorius.

Rezultatas savo metu buvo įspūdingas: 65 mlrd. parametrų modelis telpa į vieną 48 GB vaizdo plokštę, o kokybė nenukrenta lyginant su 16 bitų treniruote. Tuo metu apmokytas Guanaco modelis pasiekė 99,3 % ChatGPT lygio Vicuna teste — po 24 valandų treniruotės vienu GPU.

Šiandien QLoRA yra numatytasis pasirinkimas kiekvienam, kas derina modelį namuose.

5. TinyLoRA — 13 skaičių

Naujausias posūkis. TinyLoRA (2026 m.) klausia: o kam apskritai treniruoti dvi matricas? Metodas pakeičia jas vienu mažu vektoriumi — eile skaičių, kurią fiksuota atsitiktinė projekcija „išskleidžia“ į pilnavertį adapterį. Treniruojami tik tie keli skaičiai.

Skaičiai skamba kaip klaida, bet jie iš straipsnio: 13 parametrų — 26 baitai — ir Qwen2.5-7B pasiekia 91,8 % GSM8K matematikos teste. Bendrai autoriai teigia atkuriantys ~90 % pagerėjimo su 1000× mažiau treniruojamų parametrų.

Svarbi sąlyga, kurios nereikia praleisti: tai galioja skatinamajam mokymuisi (RL), kai modelis mokosi iš savo bandymų. Klasikiniam mokymui su pavyzdžiais (SFT) tų pačių rezultatų reikia 100–1000× daugiau parametrų. Logika paprasta: RL iš vieno epizodo gauna labai mažai informacijos, tad ir „vietos“ jai išsaugoti reikia nedaug.

Ką tai reiškia praktiškai

Kiek vaizdo atminties reikia derinti 8 mlrd. parametrų modelį
Pilnas fine-tuning keli serveriniai GPU
120 GB
LoRA viena profesionali plokštė
20 GB
QLoRA įprasta žaidimų plokštė
8 GB

Apytiksliai — priklauso nuo konteksto ilgio ir paketo dydžio. Esmė ne tikslūs skaičiai, o santykis: QLoRA perkelia užduotį iš serverinės stovo į stalinį kompiuterį.

Būtent šis santykis ir pakeitė sritį. 2021 m. modelio derinimas buvo prieinamas kelioms laboratorijoms. Šiandien tam užtenka vienos vaizdo plokštės, kelių šimtų gerų pavyzdžių ir popietės. Įrankiai — Unsloth (greičiausias variantas vienam GPU), Axolotl (konfigūracija YAML faile) ir Hugging Face peft + trl bibliotekos.

Bet ar tau apskritai reikia fine-tuning?

Čia — svarbiausia dalis, kurią dažnai praleidžia. Derinimas keičia kaip modelis elgiasi, o ne jis žino. Todėl:

Sveika eiliškumo taisyklė 2026 m.: pirma promptas, tada RAG, tada derinimas. Su dabartiniais modeliais didelė dalis užduočių, dėl kurių prieš porą metų būtų tekę derinti modelį, išsisprendžia gerai parašytu prompt’u.

Žodynėlis: kas ką reiškia

Parametras (svoris) Vienas skaičius modelio viduje

Modelis „8 mlrd. parametrų“ reiškia 8 milijardus tokių skaičių. Treniruotė — tai jų keitimas.

Fine-tuning Papildomas jau paruošto modelio apmokymas savo duomenimis

Nuo nulio modelio niekas nemoko — tai kainuoja dešimtis milijonų. Deriname tai, kas jau yra.

Adapteris Mažas failas su pakeitimais, uždedamas ant nepakeisto modelio

Dešimtys megabaitų vietoje dešimčių gigabaitų. Vieną bazinį modelį galima naudoti su daugybe skirtingų adapterių.

Rangas (rank) Kiek „plonų juostų“ turi adapteris

Didesnis rangas — daugiau vietos išmokti, bet ir daugiau treniruojamų skaičių. Įprastos reikšmės: nuo 8 iki 64.

Kvantavimas Skaičių tikslumo sumažinimas, kad jie užimtų mažiau vietos

16 bitų → 4 bitai sumažina modelį keturis kartus. Tikslumo praradimas mažesnis, nei intuityviai atrodo.

RAG Atsakymo ieškojimas tavo dokumentuose prieš generuojant

Alternatyva derinimui, kai reikia faktų, o ne stiliaus. Duomenis gali keisti bet kada — modelio perkrauti nereikia.

Ką verta įsiminti

  1. Deriname ne modelį, o pokytį Originalūs svoriai lieka užšaldyti. Treniruojamas mažas priedas, kuris prie jų pridedamas.
  2. Pokytis telpa į dvi plonas juostas Kaip daugybos lentelę galima atkurti iš eilučių ir stulpelių, taip ir svorių pokytį — iš dviejų mažų matricų.
  3. Kryptis viena: mažiau treniruoti, mažiau laikyti LoRA sumažino treniruojamų skaičių kiekį, QLoRA — likusio modelio svorį, TinyLoRA nuėjo iki 13 parametrų.
  4. Derinimas keičia elgseną, ne žinias Formatui, tonui ir stiliui — taip. Faktams, kurie keičiasi — RAG. Pradėti visada verta nuo prompto.

Šaltiniai