Fine-tuning LLM na technickou dokumentaci ve stylu devadesátých let
Fabrizio Ferri Benedetti popisuje experiment s fine-tuningem lokálních modelů na historické dokumentaci Microsoftu.
Fabrizio Ferri Benedetti popsal experiment, ve kterém se pokusil jemně doladit jazykový model tak, aby psal technickou dokumentaci podobnou manuálům z 80. a 90. let.
Není to článek o tom, jak nahradit technického autora. Spíš praktický zápis z experimentu: co se stane, když vezmete historickou dokumentaci, vyčistíte ji, připravíte tréninková data a pomocí QLoRA doladíte menší open-source modely.
Proč fine-tuning a ne RAG
Autor vysvětluje, že mu nešlo o doplňování faktů z dokumentace. Cílem nebylo, aby model odpovídal na otázky nad konkrétním manuálem.
Cílem bylo přenést styl a chování: strukturu odpovědi, dobový jazyk, způsob vysvětlování API, sekce typu "Synopsis", "Return Value" nebo "Remarks" a celkový tón starší technické dokumentace.
Proto zvolil fine-tuning místo RAG. RAG by byl vhodný, kdyby chtěl modelu dodat znalosti. Tady šlo o to, aby model jinak psal.
Data: historická dokumentace Microsoftu
Jako základ použil kolekci dokumentů Microsoftu z Bitsavers. Podle článku šlo o materiály z let 1977 až 2005 a více než 37 milionů slov.
Data ale nebyla připravená k přímému tréninku. Texty pocházely z OCR a obsahovaly šum, artefakty a části, které se do tréninku nehodily. Autor proto napsal skripty na čištění a zároveň použil model přes OpenRouter k rozhodování, které odstavce ponechat a které zahodit. Tuhle klasifikaci odstavců odhaduje zhruba na 8 dolarů.
Po vyčištění rozdělil text na chunky. Snažil se držet hranice odstavců a sekcí, zachovat celé bloky kódu a vytvářet krátké příklady kolem 512 tokenů. Výsledkem bylo 192 456 JSONL příkladů se syntetickými instrukcemi.
Autor zároveň jasně uvádí, že jde o nezávislý nekomerční experiment. Není spojený s Microsoftem a corpus, tréninková data ani adaptéry nedistribuuje.
Jak trénink probíhal
Pro samotný fine-tuning použil QLoRA a GPU pody na Runpodu. V článku zmiňuje mimo jiné B200 s cenou pod 6 dolarů za hodinu. Trénink adaptérů ho vyšel zhruba na 50 dolarů a zabral přibližně jeden den.
Testoval hlavně menší modely:
- Llama 3.1 8B Instruct
- Qwen 2.5 7B Instruct
- kontrolní Llama base model bez instruct ladění
Experimentoval s různou velikostí dat, počtem epoch a rankem adaptéru. Zmiňuje například varianty se 40 tisíci nebo 192 tisíci příklady, jednu až tři epochy a rozdíl mezi rankem 8 a 16.
Zajímavý detail: autor přišel o dva adaptéry, protože Runpod smaže pody, když dojde kredit. To je přesně ten praktický typ bolesti, který se do uhlazených tutorialů často nedostane.
Co se testovalo
Autor modely nehodnotil obecným benchmarkem. Vyzkoušel je na několika zadáních:
- napsat dokumentaci k
malloc() - popsat fiktivní Win32 API
ConnectWifi() - vysvětlit REST API stylem dokumentace z 90. let
To poslední je docela dobrý test generalizace. REST API nepatří do stejné doby jako starší systémová dokumentace, takže model musel přenést styl na novější koncept.
Výsledky nebyly jednoduché
Podle článku nemodifikované modely psaly spíše moderní markdownovou dokumentaci. Fine-tunované modely se častěji držely dobové struktury a stylu.
Nejlépe se autorovi jevil Qwen fine-tune, hlavně varianta trénovaná na větším datasetu. U příkladu s REST API působil výstup jako něco blízké starší dokumentaci typu Windows Resource Kit.
Zároveň se ukázalo, že výsledky nejsou jen o velikosti dat. Některé modely u fiktivního API začaly upozorňovat, že ConnectWifi() není skutečná Win32 funkce. Jen jedna z trénovaných variant podle autora udržela fikční rámec konzistentně.
Kontrolní base model bez instruct ladění dopadl špatně: místo užitečné dokumentace produkoval spíš surový nebo chaotický text podobný částem korpusu.
Autor také porovnává chování adaptérů s různým rankem. Levnější rank 8 se podle něj snáz zavázal k imitaci stylu, zatímco rank 16 měl v některých případech větší tendenci se od korpusu odpojit nebo produkovat méně stabilní výstupy. Není to univerzální pravidlo, ale dobrý příklad toho, že fine-tuning není jen "přidáme data a bude hotovo".
Co si z toho vzít
Nejsilnější pointa článku není, že fine-tuning dokázal dokonale napodobit historickou dokumentaci. Spíš že i menší modely dokážou po cíleném doladění překvapivě dobře převzít styl, strukturu a tón konkrétního typu textu.
Zároveň ale zůstává mnoho caveatů: kvalita dat, volba základního modelu, parametry tréninku, množství šumu v korpusu a schopnost modelu držet zadaný rámec.
Moje čtení je, že podobné experimenty jsou důležité hlavně pro specializované lokální modely. Ne proto, že by mělo smysl vyrábět "model na všechno", ale proto, že v některých profesních nikách může být styl, formát a disciplína výstupu stejně důležitá jako samotné znalosti.
Pro technické psaní je závěr poměrně střízlivý: fine-tunovaný model může být velmi přesvědčivý imitátor. Ale pořád potřebuje člověka, který rozumí dokumentovanému systému, umí posoudit přesnost a ví, kdy výstup jen dobře vypadá.