NETBYTE
Začať projekt

Výskum

Helix, časť 1: trénujeme európsky jazykový model

Trénujeme vlastný jazykový model. Je malý – 320 miliónov parametrov –, ale číta všetkých 24 úradných jazykov Európskej únie a trénuje na grafických kartách určených na hry. Táto prvá časť rozpráva, ako sme sa sem dostali; druhá vyjde, keď sa tréning skončí.

Autor: Marcus Weitschat 8 min čítania

Bodková matica toho, čomu môže každý token v Helixe venovať pozornosť: modrý pás pre lokálne okno, žlté body pre vlastný blok, roztrúsené oranžové body pre vybavovanie na veľké vzdialenosti.

Prečo herné štúdio trénuje jazykový model

NETBYTE robí hry, aplikácie a weby. Jazykové modely sú v takých produktoch čoraz častejšie: ako postavy, ktoré odpovedajú, ako pomoc, ktorá rozumie otázke, ako nástroje, ktoré niečo urobia. Väčšina otvorených modelov myslí najmä po anglicky; estónčina, írčina či maltčina prichádzajú až na okraji. Chceli sme celému reťazcu porozumieť sami – dáta, tokenizér, architektúra, tréning – a zistiť, kam skutočne idú peniaze.

parametrov
320 mil.
úradných jazykov EÚ
24
tréningových tokenov
6,5 mld.
za prenajaté GPU
≈ 12 $

Helix začal ako výskumný prototyp. Všetko nižšie je rozhodnutie, ktoré ho sformovalo, každé podložené meraním – a k tomu chyby, ktoré nás stáli najviac času.

Štyri nápady, prežil jeden

Prototyp mieril na štyri známe slabiny dnešných generátorov textu. Píše po blokoch 16 tokenov namiesto po jednom, vie niekoľkokrát prejsť zdieľaným jadrom vrstiev, pre každý blok predpovedá kompaktný „plán“ a kombinuje lacnú lokálnu pozornosť s lineárnou pozornosťou pre veľké vzdialenosti.

Písanie po blokoch fungovalo hneď: malý testovací model napísal 64 tokenov v 13 prechodoch sieťou, kde bežný model potrebuje jeden prechod na token – zhruba pätinu práce. Zvyšné tri nápady neprešli tvrdším testom. Postavili sme úlohy, v ktorých odpoveď leží ďaleko za lokálnym oknom, takže model sa musí obzrieť cez celý text.

Obrázok 1 Vybavovanie na veľké vzdialenosti Podiel správnych odpovedí v úlohe na vybavovanie, ktorej nápoveda leží mimo lokálneho okna. Malý referenčný model, rovnaký rozpočet pre každú variantu.
  1. Len lokálne okno 23,1 %
  2. + lineárna pozornosť, plán a slučky 23,1 %
  3. + 2 presné globálne hlavy 49,4 %
  4. Plná pozornosť (kontrola) 49,0 %
Zobraziť údaje
VariantaSprávne
Len lokálne okno23,1 %
+ lineárna pozornosť, plán a slučky23,1 %
+ 2 presné globálne hlavy49,4 %
Plná pozornosť (kontrola)49,0 %
Náhoda (25 %)25,0 %

Vyriešila ich len presná pozornosť cez celú vzdialenosť. Lineárna pozornosť, plán a slučky zostali na úrovni náhody; optimalizátor dokonca stiahol lineárnu pamäť na polčas kratší ako jeden token. Dve presné globálne hlavy stačili na to, aby sa vyrovnali plnej pozornosti.

Výsledný model preto ponecháva v každej vrstve osem lokálnych hláv s oknom 256 tokenov a v každej druhej vrstve pridáva dve presné globálne hlavy; vrstvy medzi nimi si ponechávajú dve hlavy lineárnej pozornosti s hradlom. Plán a slučky sú vypnuté. Zostávajú v kóde a sú otestované, no na skutočnom texte sa ich cena nevyplatila.

Obrázok 2 Kam sa pozerá každá vrstva Desať hláv pozornosti na vrstvu, dvanásť vrstiev. Každá vrstva má osem lokálnych hláv; nepárne vrstvy pridávajú dve presné globálne hlavy, párne dve hlavy lineárnej pozornosti s hradlom.
  • Lokálna, okno 256 tokenov
  • Presná globálna pozornosť
  • Lineárna pozornosť s hradlom
Zobraziť údaje
Typ hlavyVrstvyHláv na vrstvu
Lokálna, okno 256 tokenov1–128
Presná globálna pozornosť1, 3, 5, 7, 9, 112
Lineárna pozornosť s hradlom2, 4, 6, 8, 10, 122

Merať, nie predpokladať

Každý tréningový trik sme testovali na modeli s 94 miliónmi parametrov s rovnakým rozpočtom na beh: 29,5 milióna tokenov, rovnaký seed, rovnaké poradie dát. Dva behy tej istej konfigurácie sa líšia o ±0,03, takže čokoľvek menšie je šum.

Obrázok 3 Čo pomohlo – a čo bol šum Zmena validačnej straty oproti základu s AdamW. Model s 94 mil. parametrov, 29,5 milióna tokenov na beh. Pod nulou je lepšie; sivý pás je šum medzi behmi (±0,03).
  1. Muon + rozvrh WSD -0,587
  2. Optimalizátor Muon -0,347
  3. Hlbšia a užšia sieť -0,099
  4. Rozvrh WSD -0,080
  5. Rezíduum hodnôt -0,007
  6. z-loss +0,029
  7. Pozornosť so zoskupenými dopytmi +0,088
Zobraziť údaje
ZmenaΔ straty (naty)
Muon + rozvrh WSD-0,587
Optimalizátor Muon-0,347
Hlbšia a užšia sieť-0,099
Rozvrh WSD-0,080
Rezíduum hodnôt-0,007
z-loss+0,029
Pozornosť so zoskupenými dopytmi+0,088

Optimalizátor Muon bol jedinou veľkou pákou a dobre sa kombinuje s rozvrhom rýchlosti učenia warmup-stable-decay. Vrátenie embeddingu a výstupnej vrstvy späť na AdamW, ako odporúčajú autori Muonu, prinieslo ďalších 0,12 a zrýchlilo tréning o 5 %. Kombinácie sa jednoducho nesčítavajú: hlbšia a užšia sieť pomáhala s AdamW a škodila s Muonom. Preto každá sľubná kombinácia dostala vlastný beh.

24 jazykov, 6,5 miliardy tokenov

Helix číta webový text z FineWeb-Edu pre angličtinu a z FineWeb-2 pre zvyšných 23 jazykov – pri väčších z jeho hornej desatiny vybranej podľa kvality. Kód, matematika a malý syntetický prúd chatov zmes dopĺňajú. Angličtina dostáva tretinu. Ostatné jazyky sú vážené podľa množstva dostupného textu, vyhladeného tak, aby írčina a maltčina nezapadli, a žiadny zdroj sa neopakuje viac ako štyrikrát – do tejto hranice je opakovanie takmer rovnako dobré ako čerstvé dáta.

Obrázok 4 Čo Helix číta Podiel tréningových tokenov podľa skupín zdrojov. Korpus so 6,5 miliardy tokenov v 34 prúdoch; kód a značkovanie zahŕňa Python, JavaScript, C, C++, Javu, HTML, CSS a Markdown.
  1. Ďalších 23 jazykov EÚ 51,6 %
  2. Angličtina 33,0 %
  3. Kód a značkovanie 10,0 %
  4. Matematika 3,0 %
  5. Syntetické chaty a nástroje 2,4 %
Zobraziť údaje
ZdrojPodiel
Ďalších 23 jazykov EÚ51,6 %
Angličtina33,0 %
Kód a značkovanie10,0 %
Matematika3,0 %
Syntetické chaty a nástroje2,4 %

Prúd chatov je extraktívny: odpovede sa preberajú zo skutočných odsekov a výsledky nástrojov sa počítajú, nie vymýšľajú. Učí formát, nie vedomosti. Tokenizér je bajtový BPE so 64 000 položkami; pre každý jazyk písaný latinkou vtesná do jedného tokenu 3,3 až 4 bajty textu.

Tri chyby, ktoré stoja za rozprávanie

  • Model, ktorý čítal odpoveď. V jednej vetve kódu globálne hlavy ignorovali kauzálnu masku a videli budúce tokeny. Strata klesla za 75 krokov zo 6,85 na 1,71 a šestnásťhodinový beh bol na nič. Podozrivo dobrá strata je hlásenie o chybe; presne toto teraz stráži regresný test.
  • Znaky nie sú bajty. Kompresia sa počítala v znakoch namiesto v bajtoch UTF-8. To si vymyslelo „slabinu“ v čínštine a gréčtina s bulharčinou vyzerali takmer dvakrát horšie, než v skutočnosti sú.
  • Dokumenty polámané na každom prázdnom riadku. Enkodér delil dokumenty na každom prázdnom riadku – a prázdne riadky sú uprostred takmer každého zdrojového súboru. Stratilo sa až 35 % textu s kódom a matematikou. Opravili sme oddeľovač a 31. októbra prestavali celý korpus; trvalo to 2 hodiny a 12 minút.

Od stola k prenajatému stroju

Prvých 1,66 miliardy tokenov prebehlo na jedinej AMD Radeon RX 7800 XT. Použiteľné to urobili dve veci: príznak jadra pozornosti, ktorý je predvolene vypnutý – bez neho bola pozornosť 12-krát pomalšia –, a kompilácia každej vrstvy cez torch.compile. Pri mediáne 11 800 tokenov za sekundu by zvyšok trval ešte takmer päť dní.

Napísali sme preto autopilota. Prenajíma GPU na Vast.ai, nahrá kód, korpus a checkpoint, trénuje, každé tri hodiny stiahne checkpoint domov a zastaví sa skôr, než dôjde kredit. Druhého novembra prešiel tromi strojmi, ktoré poskytovatelia nikdy nespustili, a potom zakotvil pri dvoch RTX 4070 Ti Super v Nemecku za 0,363 $ za hodinu. Nahranie 15,4 GiB trvalo 40 minút.

Obrázok 5 Rýchlosť tréningu Tokeny za sekundu pre model s 320 mil. parametrov pri dĺžke sekvencie 1 024 (medián). Lokálne: jedna AMD Radeon RX 7800 XT. Prenájom: dve NVIDIA RTX 4070 Ti Super.
  1. Lokálne, pred optimalizáciou 8 319
  2. Lokálne, skompilované 11 830
  3. Prenájom, 2 GPU 41 367
Zobraziť údaje
ZostavaTokeny/s
Lokálne, pred optimalizáciou8 319
Lokálne, skompilované11 830
Prenájom, 2 GPU41 367

41 400 tokenov za sekundu je 3,5-násobok stola. Prenajatá časť – 4,8 miliardy tokenov zhruba za 33 hodín – stojí asi 12 $.

Kde je Helix dnes

Obrázok 6 Doterajší tréning Strata v natoch na token, nižšia je lepšia. Odložený: text, na ktorom model nikdy netrénuje. Tréning: priemer za každých 50 miliónov tokenov; pri dochladzovaní klesá rýchlejšie, čiastočne preto, že sa mení zmes dát. Os končí pri plánovaných 6,5 miliardy tokenov.
  • Odložený
  • Tréning

Strata (naty na token)

Prečítané tokeny v miliardách

Zobraziť údaje
Prečítané tokeny v miliardáchOdloženýTréning
0,064,5714,261
0,553,7763,574
1,043,6943,469
1,543,5963,421
2,033,4263,238
2,523,3293,143
3,013,2913,113
3,503,2633,076
3,993,2253,079
4,493,2443,076
4,983,2183,036
5,353,1232,884

K 3. novembru 2026 prečítal Helix 5,35 zo svojich 6,5 miliardy tokenov. Od 5,2 miliardy beží fáza dochladzovania: rýchlosť učenia klesá a zmes sa posúva k matematike, kódu a chatom. Na odloženom texte zo všetkých prúdov je strata 3,12 natu na token.

Obrázok 7 Kde je ktorý jazyk Bity na bajt na odloženom texte po 5,35 miliardy tokenov, nižšie je lepšie. Gréčtina a bulharčina vyzerajú lepšie čiastočne preto, že každé ich písmeno zaberá dva bajty.
  1. gréčtina 0,721
  2. bulharčina 0,844
  3. francúzština 1,065
  4. angličtina 1,086
  5. španielčina 1,135
  6. portugalčina 1,219
  7. nemčina 1,257
  8. holandčina 1,268
  9. taliančina 1,277
  10. poľština 1,355
  11. dánčina 1,364
  12. maďarčina 1,407
  13. slovenčina 1,412
  14. maltčina 1,415
  15. rumunčina 1,416
  16. švédčina 1,418
  17. írčina 1,422
  18. slovinčina 1,431
  19. čeština 1,444
  20. litovčina 1,450
  21. lotyština 1,451
  22. chorvátčina 1,507
  23. fínčina 1,508
  24. estónčina 1,727
Zobraziť údaje
JazykBity na bajt
gréčtina0,721
bulharčina0,844
francúzština1,065
angličtina1,086
španielčina1,135
portugalčina1,219
nemčina1,257
holandčina1,268
taliančina1,277
poľština1,355
dánčina1,364
maďarčina1,407
slovenčina1,412
maltčina1,415
rumunčina1,416
švédčina1,418
írčina1,422
slovinčina1,431
čeština1,444
litovčina1,450
lotyština1,451
chorvátčina1,507
fínčina1,508
estónčina1,727

Čo to znamená v praxi, najlepšie ukazuje neupravená ukážka z checkpointu pri zhruba 4,9 miliardy tokenov. Začiatok je náš, zvyšok je od Helixu:

Ukážka v angličtine, checkpoint pri 4,9 miliardy tokenov, bez úprav

Začiatok textu: The history of the printing press begins in the fifteenth century, when Johannes Gutenberg introduced movable type to Europe. Before that, books Výstup modelu: for printing were usually in the form of texts, usually in the format of illustrations. In its introduction to the printing press, Gutenberg uses one line-of-action model to illustrate a series of printed pieces of a book.

Gramatika, voľba slov a téma držia; fakty nie. Približne to sa dá čakať od 320 miliónov parametrov a 6,5 miliardy tokenov: plynulý model, ktorý si vymýšľa.

Čo príde ďalej

Predtréning sa skončí o pár hodín. Potom príde fáza dlhého kontextu s knihami z Project Gutenberg a právnymi textami EÚ z EUR-Lex, doladenie na konverzáciu a prácu s nástrojmi a malý návrhový model, ktorý zrýchli generovanie.

Späť na všetky články

Ďalší krok

Čo má vzniknúť ďalej?

Povedzte nám o svojej hre, aplikácii, webe alebo AI projekte. Na začiatok stačí krátka správa.