Kaip pritaikyti DI modelį sau: nuo pilno fine-tuning iki 13 parametrų
Į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
24 × 24 = 576
24 × 2
↑ iš jų fiksuota projekcija pagamina A ir B
- 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)
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 treniuojama | Langelių | Dalis |
|---|---|---|
Visa matrica W | 16 777 216 | 100 % |
| Adapteris, rangas 16 | 131 072 | 0,78 % |
| Adapteris, rangas 4 | 32 768 | 0,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ų):
- treniruojamų parametrų 10 000× mažiau;
- vaizdo atminties treniruotei: 1,2 TB → 350 GB;
- išsaugomas failas: 350 GB → 35 MB.
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
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 ką jis žino. Todėl:
- Duomenys keičiasi (kainos, taisyklės, dokumentai)? Reikia ne derinimo, o paieškos duomenyse (RAG). Į svorius įrašyta informacija pasensta tą pačią dieną.
- Reikia nurodyti šaltinį? Vėl RAG — derintas modelis negali parodyti, iš kur paėmė atsakymą.
- Modelis daro tai, ko reikia, tik ne tuo formatu ar tonu? Štai čia derinimas ir yra tinkamas įrankis.
- Nori pigesnio ir greitesnio modelio? Derinimas leidžia „perkelti“ didelio modelio elgseną į mažą (distiliacija).
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
- Deriname ne modelį, o pokytį Originalūs svoriai lieka užšaldyti. Treniruojamas mažas priedas, kuris prie jų pridedamas.
- Pokytis telpa į dvi plonas juostas Kaip daugybos lentelę galima atkurti iš eilučių ir stulpelių, taip ir svorių pokytį — iš dviejų mažų matricų.
- 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ų.
- Derinimas keičia elgseną, ne žinias Formatui, tonui ir stiliui — taip. Faktams, kurie keičiasi — RAG. Pradėti visada verta nuo prompto.
Šaltiniai
- LoRA: Low-Rank Adaptation of Large Language Models — Hu et al., 2021
- LoRA-FA: Memory-efficient Low-rank Adaptation — Zhang et al., 2023
- QLoRA: Efficient Finetuning of Quantized LLMs — Dettmers et al., 2023
- TinyLoRA: Learning to Reason in 13 Parameters — 2026
- LoRA Without Regret — Thinking Machines Lab, 2025