NETBYTE
Розпочати проєкт

Дослідження

Helix, частина 1: навчаємо європейську мовну модель

Ми навчаємо власну мовну модель. Вона невелика — 320 мільйонів параметрів, — але читає всіма 24 офіційними мовами Європейського Союзу й навчається на відеокартах, створених для ігор. Ця перша частина розповідає, як ми до цього дійшли; друга вийде, коли навчання завершиться.

Автор: Marcus Weitschat 8 хв читання

Точкова матриця того, на що може дивитися кожен токен у Helix: синя смуга — локальне вікно, жовті точки — власний блок, розкидані помаранчеві точки — пригадування на великих відстанях.

Навіщо ігровій студії власна мовна модель

NETBYTE створює ігри, застосунки й сайти. Мовні моделі дедалі частіше живуть усередині таких продуктів: персонажі, що відповідають, допомога, яка розуміє запитання, інструменти, що щось роблять. Більшість відкритих моделей думають насамперед англійською; естонська, ірландська чи мальтійська лишаються на узбіччі. Ми хотіли самі розібратися в усьому ланцюжку — дані, токенізатор, архітектура, навчання — і з’ясувати, куди насправді йдуть гроші.

параметрів
320 млн
офіційні мови ЄС
24
токенів навчання
6,5 млрд
за орендовані GPU
≈ 12 $

Helix починався як дослідницький прототип. Усе, що далі, — рішення, які його сформували, кожне підкріплене вимірюванням, а також помилки, що забрали в нас найбільше часу.

Чотири ідеї, вижила одна

Прототип цілився в чотири відомі слабкі місця сучасних генераторів тексту. Він пише блоками по 16 токенів замість одного за раз, може кілька разів проганяти спільне ядро шарів, передбачає компактний «план» для кожного блоку й поєднує дешеву локальну увагу з лінійною увагою для далеких відстаней.

Блоковий запис запрацював одразу: невелика тестова модель написала 64 токени за 13 проходів мережею, тоді як звичайній моделі потрібен один прохід на токен — приблизно п’ята частина роботи. Інші три ідеї провалили жорсткіший тест. Ми побудували завдання, де відповідь лежить далеко за межами локального вікна, тож модель мусить озиратися на весь текст.

Рисунок 1 Пригадування на великих відстанях Частка правильних відповідей у завданні на пригадування, де підказка лежить поза локальним вікном. Невелика еталонна модель, однаковий бюджет для кожного варіанта.
  1. Лише локальне вікно 23,1%
  2. + лінійна увага, план і цикли 23,1%
  3. + 2 точні глобальні голови 49,4%
  4. Повна увага (контроль) 49,0%
Показати дані
ВаріантПравильно
Лише локальне вікно23,1%
+ лінійна увага, план і цикли23,1%
+ 2 точні глобальні голови49,4%
Повна увага (контроль)49,0%
Випадковість (25 %)25,0%

Розв’язала їх лише точна увага на всю відстань. Лінійна увага, план і цикли лишилися на рівні випадкового вгадування; оптимізатор навіть звів лінійну пам’ять до періоду напіврозпаду, меншого за один токен. Двох точних глобальних голів вистачило, щоб зрівнятися з повною увагою.

Тому фінальна модель лишає в кожному шарі вісім локальних голів із вікном у 256 токенів і додає дві точні глобальні голови через шар; проміжні шари зберігають дві голови лінійної уваги з гейтом. План і цикли вимкнено. Вони залишилися в коді й покриті тестами, але на реальному тексті не виправдали своєї вартості.

Рисунок 2 Куди дивиться кожен шар Десять голів уваги на шар, дванадцять шарів. Кожен шар має вісім локальних голів; непарні шари додають дві точні глобальні голови, парні — дві голови лінійної уваги з гейтом.
  • Локальна, вікно 256 токенів
  • Точна глобальна увага
  • Лінійна увага з гейтом
Показати дані
Тип головиШариГолів на шар
Локальна, вікно 256 токенів1–128
Точна глобальна увага1, 3, 5, 7, 9, 112
Лінійна увага з гейтом2, 4, 6, 8, 10, 122

Вимірювати, а не припускати

Кожен прийом навчання ми перевіряли на моделі з 94 мільйонами параметрів з однаковим бюджетом на запуск: 29,5 мільйона токенів, той самий seed, той самий порядок даних. Два запуски однієї конфігурації відрізняються на ±0,03, тож усе менше — шум.

Рисунок 3 Що допомогло — а що було шумом Зміна валідаційного loss відносно базової лінії з AdamW. Модель на 94 млн параметрів, 29,5 мільйона токенів на запуск. Нижче нуля — краще; сіра смуга — шум між запусками (±0,03).
  1. Muon + розклад WSD -0,587
  2. Оптимізатор Muon -0,347
  3. Глибша й вужча мережа -0,099
  4. Розклад WSD -0,080
  5. Залишковий зв’язок значень -0,007
  6. z-loss +0,029
  7. Увага з групованими запитами +0,088
Показати дані
ЗмінаΔ loss (нати)
Muon + розклад WSD-0,587
Оптимізатор Muon-0,347
Глибша й вужча мережа-0,099
Розклад WSD-0,080
Залишковий зв’язок значень-0,007
z-loss+0,029
Увага з групованими запитами+0,088

Оптимізатор Muon виявився єдиним великим важелем, і він добре поєднується з розкладом швидкості навчання warmup-stable-decay. Повернення ембедингу й вихідного шару до AdamW, як радять автори Muon, дало ще 0,12 і пришвидшило навчання на 5 %. Комбінації не додаються просто так: глибша й вужча мережа допомагала з AdamW і шкодила з Muon. Тому кожна перспективна комбінація отримала власний запуск.

24 мови, 6,5 мільярда токенів

Helix читає вебтексти з FineWeb-Edu для англійської та з FineWeb-2 для решти 23 мов — для великих із його верхньої десятої частини, відібраної за якістю. Код, математика й невеликий синтетичний потік чатів доповнюють суміш. Англійській дістається третина. Інші мови зважено за обсягом наявного тексту зі згладжуванням, щоб ірландська й мальтійська не потонули, і жодне джерело не повторюється більше чотирьох разів: до цієї межі повтор майже такий самий добрий, як свіжі дані.

Рисунок 4 Що читає Helix Частка токенів навчання за групами джерел. Корпус із 6,5 мільярда токенів у 34 потоках; код і розмітка охоплюють Python, JavaScript, C, C++, Java, HTML, CSS і Markdown.
  1. Ще 23 мови ЄС 51,6%
  2. Англійська 33,0%
  3. Код і розмітка 10,0%
  4. Математика 3,0%
  5. Синтетичні чати й інструменти 2,4%
Показати дані
ДжерелоЧастка
Ще 23 мови ЄС51,6%
Англійська33,0%
Код і розмітка10,0%
Математика3,0%
Синтетичні чати й інструменти2,4%

Потік чатів екстрактивний: відповіді беруться з реальних абзаців, а результати інструментів обчислюються, а не вигадуються. Він навчає формату, а не знань. Токенізатор — байтовий BPE на 64 000 записів; для кожної мови на латиниці він пакує в один токен від 3,3 до 4 байтів тексту.

Три баги, про які варто розповісти

  • Модель, що підглядала відповідь. В одній гілці коду глобальні голови ігнорували каузальну маску й бачили майбутні токени. Loss упав із 6,85 до 1,71 за 75 кроків, і 16-годинний запуск виявився марним. Підозріло добрий loss — це баг-репорт; тепер саме цей випадок стереже регресійний тест.
  • Символи — не байти. Стиснення рахували в символах, а не в байтах UTF-8. Це вигадало «слабкість» китайської й змусило грецьку та болгарську виглядати майже вдвічі гіршими, ніж вони є.
  • Документи, розірвані на кожному порожньому рядку. Кодувальник ділив документи на кожному порожньому рядку, а порожні рядки трапляються посеред майже будь-якого файлу з кодом. Зникло до 35 % тексту коду й математики. Ми виправили роздільник і 31 жовтня перебудували весь корпус; це зайняло 2 години 12 хвилин.

Зі столу на орендовану машину

Перші 1,66 мільярда токенів пройшли на одній AMD Radeon RX 7800 XT. Зробити це придатним допомогли дві речі: прапорець ядра уваги, за замовчуванням вимкнений, — без нього увага працювала в 12 разів повільніше, — і компіляція кожного шару через torch.compile. За медіани 11 800 токенів на секунду решта забрала б ще майже п’ять днів.

Тож ми написали автопілот. Він орендує GPU на Vast.ai, вивантажує код, корпус і чекпойнт, навчає, щотри години забирає чекпойнт додому й зупиняється, перш ніж закінчиться баланс. 2 листопада він перебрав три машини, які хости так і не запустили, а потім зупинився на двох RTX 4070 Ti Super у Німеччині за 0,363 $ на годину. Вивантаження 15,4 ГіБ тривало 40 хвилин.

Рисунок 5 Швидкість навчання Токенів на секунду для моделі на 320 млн параметрів за довжини послідовності 1024 (медіана). Локально: одна AMD Radeon RX 7800 XT. В оренді: дві NVIDIA RTX 4070 Ti Super.
  1. Локально, до оптимізації 8 319
  2. Локально, з компіляцією 11 830
  3. Оренда, 2 GPU 41 367
Показати дані
КонфігураціяТокенів/с
Локально, до оптимізації8 319
Локально, з компіляцією11 830
Оренда, 2 GPU41 367

41 400 токенів на секунду — це в 3,5 раза більше, ніж на столі. Орендована частина — 4,8 мільярда токенів приблизно за 33 години — коштує близько 12 $.

Де Helix сьогодні

Рисунок 6 Навчання на сьогодні Loss у натах на токен, що нижче, то краще. Відкладений: текст, на якому модель ніколи не навчається. Навчання: середнє за кожні 50 мільйонів токенів; у фазі охолодження він падає швидше, частково тому, що змінюється суміш даних. Вісь закінчується на запланованих 6,5 мільярда токенів.
  • Відкладений
  • Навчання

Loss (натів на токен)

Прочитано токенів, млрд

Показати дані
Прочитано токенів, млрдВідкладенийНавчання
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

Станом на 3 листопада 2026 року Helix прочитав 5,35 зі своїх 6,5 мільярда токенів. Від позначки 5,2 мільярда триває фаза охолодження: швидкість навчання знижується, а суміш зміщується до математики, коду й чатів. На відкладеному тексті з усіх потоків loss становить 3,12 ната на токен.

Рисунок 7 Де перебуває кожна мова Біт на байт на відкладеному тексті після 5,35 мільярда токенів, що нижче, то краще. Грецька й болгарська виглядають кращими частково тому, що кожна їхня літера займає два байти.
  1. грецька 0,721
  2. болгарська 0,844
  3. французька 1,065
  4. англійська 1,086
  5. іспанська 1,135
  6. португальська 1,219
  7. німецька 1,257
  8. нідерландська 1,268
  9. італійська 1,277
  10. польська 1,355
  11. данська 1,364
  12. угорська 1,407
  13. словацька 1,412
  14. мальтійська 1,415
  15. румунська 1,416
  16. шведська 1,418
  17. ірландська 1,422
  18. словенська 1,431
  19. чеська 1,444
  20. литовська 1,450
  21. латиська 1,451
  22. хорватська 1,507
  23. фінська 1,508
  24. естонська 1,727
Показати дані
МоваБіт на байт
грецька0,721
болгарська0,844
французька1,065
англійська1,086
іспанська1,135
португальська1,219
німецька1,257
нідерландська1,268
італійська1,277
польська1,355
данська1,364
угорська1,407
словацька1,412
мальтійська1,415
румунська1,416
шведська1,418
ірландська1,422
словенська1,431
чеська1,444
литовська1,450
латиська1,451
хорватська1,507
фінська1,508
естонська1,727

Що це означає на практиці, найкраще видно з невідредагованого зразка з чекпойнта приблизно на 4,9 мільярда токенів. Початок наш, решта — від Helix:

Зразок англійською, чекпойнт на 4,9 мільярда токенів, без правок

Початок тексту: The history of the printing press begins in the fifteenth century, when Johannes Gutenberg introduced movable type to Europe. Before that, books Відповідь моделі: 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.

Граматика, вибір слів і тема тримаються; факти — ні. Приблизно цього й варто чекати від 320 мільйонів параметрів і 6,5 мільярда токенів: вільна у мовленні модель, яка вигадує.

Що далі

Попереднє навчання завершиться за кілька годин. Потім будуть етап довгого контексту з книжками з Project Gutenberg і правовими текстами ЄС з EUR-Lex, донавчання для діалогу й роботи з інструментами та невелика чорнеткова модель, що пришвидшує генерацію.

До всіх статей

Наступний крок

Що має з'явитися далі?

Розкажіть нам про свою гру, застосунок, сайт чи ШІ-проєкт. Для початку достатньо короткого повідомлення.