Badania
Helix, część 1: trenujemy europejski model językowy
Trenujemy własny model językowy. Jest mały – 320 milionów parametrów – ale czyta we wszystkich 24 językach urzędowych Unii Europejskiej i trenuje na kartach graficznych zbudowanych do gier. Ta pierwsza część opowiada, jak do tego doszliśmy; druga pojawi się, gdy trening się skończy.

Spis treści
Po co studiu gier własny model językowy
NETBYTE tworzy gry, aplikacje i strony internetowe. Modele językowe coraz częściej siedzą w środku takich produktów: jako postacie, które odpowiadają, jako pomoc, która rozumie pytanie, jako narzędzia, które coś robią. Większość otwartych modeli myśli najpierw po angielsku; estoński, irlandzki czy maltański są gdzieś na marginesie. Chcieliśmy sami zrozumieć cały łańcuch – dane, tokenizer, architekturę, trening – i sprawdzić, na co naprawdę idą pieniądze.
- parametrów
- 320 mln
- języki urzędowe UE
- 24
- tokenów treningowych
- 6,5 mld
- za wynajęte GPU
- ≈ 12 $
Helix zaczynał jako prototyp badawczy. Wszystko, co dalej, to decyzje, które go ukształtowały, każda poparta pomiarem – oraz błędy, które kosztowały nas najwięcej czasu.
Cztery pomysły, przetrwał jeden
Prototyp celował w cztery znane słabości dzisiejszych generatorów tekstu. Pisze blokami po 16 tokenów zamiast po jednym, może wielokrotnie przechodzić przez wspólny rdzeń warstw, przewiduje zwięzły „plan” dla każdego bloku i łączy tanią uwagę lokalną z uwagą liniową dla dużych odległości.
Pisanie blokami zadziałało od razu: mały model testowy zapisał 64 tokeny w 13 przejściach przez sieć, podczas gdy zwykły model potrzebuje jednego przejścia na token – to mniej więcej jedna piąta pracy. Pozostałe trzy pomysły oblały trudniejszy test. Zbudowaliśmy zadania, w których odpowiedź leży daleko poza lokalnym oknem, więc model musi spojrzeć wstecz przez cały tekst.
Pokaż dane
| Wariant | Poprawnie |
|---|---|
| Tylko lokalne okno | 23,1% |
| + uwaga liniowa, plan i pętle | 23,1% |
| + 2 dokładne głowice globalne | 49,4% |
| Pełna uwaga (kontrola) | 49,0% |
| Przypadek (25%) | 25,0% |
Rozwiązała je tylko dokładna uwaga na całym dystansie. Uwaga liniowa, plan i pętle zostały na poziomie przypadku; optymalizator skręcił nawet pamięć liniową do okresu półtrwania krótszego niż jeden token. Dwie dokładne globalne głowice wystarczyły, by dorównać pełnej uwadze.
Dlatego ostateczny model zachowuje w każdej warstwie osiem lokalnych głowic z oknem 256 tokenów i dodaje dwie dokładne globalne głowice w co drugiej warstwie; warstwy pomiędzy mają dwie głowice bramkowanej uwagi liniowej. Plan i pętle są wyłączone. Nadal są w kodzie i mają testy, ale na prawdziwym tekście nie zarobiły na swój koszt.
- Lokalna, okno 256 tokenów
- Dokładna uwaga globalna
- Bramkowana uwaga liniowa
Pokaż dane
| Typ głowicy | Warstwy | Głowice na warstwę |
|---|---|---|
| Lokalna, okno 256 tokenów | 1–12 | 8 |
| Dokładna uwaga globalna | 1, 3, 5, 7, 9, 11 | 2 |
| Bramkowana uwaga liniowa | 2, 4, 6, 8, 10, 12 | 2 |
Mierzyć, nie zakładać
Każdą sztuczkę treningową testowaliśmy na modelu z 94 milionami parametrów, z tym samym budżetem na przebieg: 29,5 miliona tokenów, ten sam seed, ta sama kolejność danych. Dwa przebiegi tej samej konfiguracji różnią się o ±0,03, więc wszystko poniżej to szum.
Pokaż dane
| Zmiana | Δ straty (naty) |
|---|---|
| Muon + harmonogram WSD | -0,587 |
| Optymalizator Muon | -0,347 |
| Głębsza, węższa sieć | -0,099 |
| Harmonogram WSD | -0,080 |
| Rezydualne wartości | -0,007 |
| z-loss | +0,029 |
| Uwaga z grupowanymi zapytaniami | +0,088 |
Optymalizator Muon był jedyną dużą dźwignią i dobrze łączy się z harmonogramem współczynnika uczenia warmup-stable-decay. Przeniesienie embeddingu i warstwy wyjściowej z powrotem na AdamW, jak zalecają autorzy Muona, dało kolejne 0,12 i przyspieszyło trening o 5%. Kombinacje nie sumują się po prostu: głębsza i węższa sieć pomagała z AdamW, a szkodziła z Muonem. Dlatego każda obiecująca kombinacja dostała własny przebieg.
24 języki, 6,5 miliarda tokenów
Helix czyta teksty z sieci z FineWeb-Edu dla angielskiego i z FineWeb-2 dla pozostałych 23 języków – w przypadku większych z jego górnej dziesiątej części, filtrowanej pod kątem jakości. Kod, matematyka i niewielki syntetyczny strumień czatów uzupełniają mieszankę. Angielski dostaje jedną trzecią. Pozostałe języki są ważone według ilości dostępnego tekstu, wygładzonej tak, by irlandzki i maltański nie utonęły, a żadne źródło nie powtarza się więcej niż cztery razy – do tej granicy powtórka jest prawie tak dobra jak świeże dane.
Pokaż dane
| Źródło | Udział |
|---|---|
| 23 pozostałe języki UE | 51,6% |
| Angielski | 33,0% |
| Kod i znaczniki | 10,0% |
| Matematyka | 3,0% |
| Syntetyczne czaty i narzędzia | 2,4% |
Strumień czatów jest ekstrakcyjny: odpowiedzi są kopiowane z prawdziwych akapitów, a wyniki narzędzi są obliczane, a nie wymyślane. Uczy formatu, nie wiedzy. Tokenizer to bajtowy BPE z 64 000 wpisów; dla każdego języka zapisywanego alfabetem łacińskim mieści w jednym tokenie od 3,3 do 4 bajtów tekstu.
Trzy błędy warte opowiedzenia
- Model, który czytał odpowiedź. W jednej ścieżce kodu globalne głowice ignorowały maskę przyczynową i widziały przyszłe tokeny. Strata spadła z 6,85 do 1,71 w 75 krokach, a 16-godzinny przebieg okazał się bezwartościowy. Podejrzanie dobra strata to zgłoszenie błędu; teraz pilnuje tego dokładnie test regresji.
- Znaki to nie bajty. Kompresję liczono w znakach zamiast w bajtach UTF-8. To wymyśliło „słabość” chińskiego, a grecki i bułgarski wyglądały prawie dwa razy gorzej, niż są w rzeczywistości.
- Dokumenty rozcięte na każdej pustej linii. Enkoder dzielił dokumenty na każdej pustej linii – a puste linie są w środku niemal każdego pliku z kodem. Przepadło do 35% tekstu z kodem i matematyką. Naprawiliśmy separator i 31 października przebudowaliśmy cały korpus; zajęło to 2 godziny i 12 minut.
Z biurka na wynajętą maszynę
Pierwsze 1,66 miliarda tokenów przeszło na jednej karcie AMD Radeon RX 7800 XT. Dwie rzeczy sprawiły, że dało się z tego korzystać: flaga jądra uwagi, domyślnie wyłączona – bez niej uwaga była 12 razy wolniejsza – oraz kompilacja każdej warstwy przez torch.compile. Przy medianie 11 800 tokenów na sekundę reszta trwałaby jeszcze prawie pięć dni.
Napisaliśmy więc autopilota. Wynajmuje GPU na Vast.ai, wysyła kod, korpus i checkpoint, trenuje, co trzy godziny ściąga checkpoint do domu i zatrzymuje się, zanim skończą się środki. 2 listopada przeszedł przez trzy maszyny, których dostawcy nigdy nie uruchomili, a potem zatrzymał się na dwóch RTX 4070 Ti Super w Niemczech za 0,363 $ za godzinę. Wysyłka 15,4 GiB trwała 40 minut.
Pokaż dane
| Konfiguracja | Tokeny/s |
|---|---|
| Lokalnie, przed optymalizacją | 8319 |
| Lokalnie, po kompilacji | 11 830 |
| Wynajem, 2 GPU | 41 367 |
41 400 tokenów na sekundę to 3,5 raza więcej niż przy biurku. Wynajęta część – 4,8 miliarda tokenów w około 33 godziny – kosztuje mniej więcej 12 $.
Gdzie Helix jest dzisiaj
- Odłożony
- Trening
Strata (naty na token)
Przeczytane tokeny w miliardach
Pokaż dane
| Przeczytane tokeny w miliardach | Odłożony | Trening |
|---|---|---|
| 0,06 | 4,571 | 4,261 |
| 0,55 | 3,776 | 3,574 |
| 1,04 | 3,694 | 3,469 |
| 1,54 | 3,596 | 3,421 |
| 2,03 | 3,426 | 3,238 |
| 2,52 | 3,329 | 3,143 |
| 3,01 | 3,291 | 3,113 |
| 3,50 | 3,263 | 3,076 |
| 3,99 | 3,225 | 3,079 |
| 4,49 | 3,244 | 3,076 |
| 4,98 | 3,218 | 3,036 |
| 5,35 | 3,123 | 2,884 |
Na dzień 3 listopada 2026 roku Helix przeczytał 5,35 z 6,5 miliarda tokenów. Od 5,2 miliarda trwa faza wygaszania: współczynnik uczenia spada, a mieszanka przesuwa się w stronę matematyki, kodu i czatów. Na odłożonym tekście ze wszystkich strumieni strata wynosi 3,12 nata na token.
Pokaż dane
| Język | Bity na bajt |
|---|---|
| grecki | 0,721 |
| bułgarski | 0,844 |
| francuski | 1,065 |
| angielski | 1,086 |
| hiszpański | 1,135 |
| portugalski | 1,219 |
| niemiecki | 1,257 |
| niderlandzki | 1,268 |
| włoski | 1,277 |
| polski | 1,355 |
| duński | 1,364 |
| węgierski | 1,407 |
| słowacki | 1,412 |
| maltański | 1,415 |
| rumuński | 1,416 |
| szwedzki | 1,418 |
| irlandzki | 1,422 |
| słoweński | 1,431 |
| czeski | 1,444 |
| litewski | 1,450 |
| łotewski | 1,451 |
| chorwacki | 1,507 |
| fiński | 1,508 |
| estoński | 1,727 |
Co to oznacza w praktyce, najlepiej widać na nieedytowanej próbce z checkpointu przy około 4,9 miliarda tokenów. Początek jest nasz, reszta pochodzi od Helix:
Początek tekstu: The history of the printing press begins in the fifteenth century, when Johannes Gutenberg introduced movable type to Europe. Before that, books
Odpowiedź 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.
Gramatyka, dobór słów i temat się trzymają; fakty nie. Mniej więcej tego można się spodziewać po 320 milionach parametrów i 6,5 miliarda tokenów: płynnego modelu, który zmyśla.
Co dalej
Pretrening kończy się za kilka godzin. Potem przyjdą etap długiego kontekstu z książkami z Project Gutenberg i unijnymi tekstami prawnymi z EUR-Lex, dostrajanie do rozmów i korzystania z narzędzi oraz mały model szkicowy, który przyspiesza generowanie.