EUGEN 160M — mój model do kodu, dotknij, aby go wypróbować
EUGEN 160M
EUGEN 160M to mały model językowy, który pomaga w pisaniu kodu: uzupełnia go na bieżąco (autocomplete) i podpowiada kolejną linię. Jest trenowany także do uzupełniania kodu w środku pliku (fill-in-the-middle) i specjalizuje się w tłumaczeniu z Pythona na C++. Ma 164,5 mln parametrów i jest trenowany od podstaw na jednej karcie graficznej NVIDIA RTX PRO 6000 (96 GB). Dzięki niewielkim rozmiarom szybko generuje odpowiedzi także na zwykłym procesorze, osiągając prędkość generacji dochodzącą do 270 tokenów na sekundę. Model można wypróbować w terminalu: wystarczy kliknąć przycisk poniżej.
Pierwsze wyniki
Trening jest na wczesnym etapie, a wyniki już teraz dają powody do optymizmu. W teście HumanEval, w którym model pisze funkcję w Pythonie na podstawie opisu, najlepsze zmierzone wyniki EUGEN to 18,9% zadań przy jednej próbie i 32,9% przy dziesięciu. W tłumaczeniu z Pythona na C++ z weryfikacją – kompilator i testy wybierają działającą wersję spośród kilku propozycji modelu – 77 na 100 programów się kompiluje, a 53 przechodzi wszystkie testy. Stos modelu pilnuje, żeby do użytkownika trafiały tylko te propozycje tłumaczeń, które przeszły kontrolę. Wykres zestawia wyniki EUGEN z modelami do 0,5 mld parametrów.
Architektura modelu
EUGEN to transformer dekoderowy z 36 warstwami, trenowany optymalizatorem MuonH – odmianą Muon, która utrzymuje stałą normę macierzy wag. Model jest na etapie treningu bazowego. Ok. 0,35% danych to dane własne: rozwiązania STaR, które wygenerował sam EUGEN i które przeszły testy, oraz pary tłumaczeń między Pythonem a C++, Javą, Go i Rustem, sprawdzone kompilacją i testami.
Rzadki FFN i kernel Triton
Prowadzę też prace nad optymalizacją i przyspieszeniem treningu modelu w oparciu o rzadki FFN i w tym celu opracowałem własny kernel GPU, napisany w Tritonie. Przy modelu o 306 mln parametrów (FFN 4096) zoptymalizowany kernel osiągnął przepustowość o 36% wyższą od swojej pierwszej wersji. Nasze wczesne testy pokazują, że przy modelu większych rozmiarów i FFN 8192, używając kernela z projektu EUGEN, można uzyskać przyspieszenie przekraczające 40% względem modelu gęstego. Otwarte pozostaje, czy model trenowany jako rzadki i zagęszczony na końcu dorówna modelowi gęstemu, ale wczesne wyniki skłaniają mnie do trenowania tą metodą kolejnego, większego modelu.
TetherGate to mechanizm, który chroni uczone bramki przed zamknięciem. Bramka skalująca gałąź rezydualną – eksperta, adapter lub nowo dodaną warstwę – bywa stopniowo spychana przez optymalizator do zera i gałąź przestaje wnosić cokolwiek do modelu. TetherGate łączy podłogę zależną od kroku treningu ze sprężyną, która przyciąga próg bramki do ruchomej kotwicy wyznaczanej z bieżącego sygnału sterującego. Sygnałem może być dowolna statystyka. Mechanizm testowałem eksperymentalnie we własnych modelach.
Cały czas prowadzę własne badania nad AI. Dotyczą one m.in. sygnałów z wnętrza sieci: aktywacji bramek w warstwach FFN i opartego na nich wskaźnika GSI (Gate Sparseness Index), który według wstępnych wyników może pomagać jeszcze przed wygenerowaniem odpowiedzi odróżnić pytania, na które model zna odpowiedź, od tych, przy których zaczyna konfabulować. Późniejsza analiza pokazała, że część efektu wynika z długości pytań — po jej uwzględnieniu sygnał utrzymuje się w modelu Llama, pozostałe wyniki wymagają powtórzenia. Nie mam formalnego wykształcenia w tej dziedzinie, ale staram się prowadzić badania możliwie profesjonalnie: z publicznie udostępnionymi danymi, powtarzalnymi pomiarami i jasno opisanymi ograniczeniami.
Jak pracuję z AI
Nie piszę kodu ręcznie. Projektuję zadania i prowadzę zespoły agentów AI, a każdy wynik sprawdzam. Zespół pracuje w trzech etapach: research, wykonanie i weryfikacja. Nad wykonaniem czuwa dwóch niezależnych kontrolerów: jeden pilnuje zakresu zadania, drugi jakości technicznej.
Prowadzę równolegle dwa–trzy takie zespoły, więc gdy jedno zadanie wymaga mojej uwagi, pozostałe idą dalej. Gdy model utyka, konsultuję problem z modelem innej firmy.
Zlecam duże porcje pracy, ale tylko do granicy, w której potrafię je rzetelnie sprawdzić, a potem rezerwuję czas na poprawki. O tym, czy coś jest gotowe, decyduje test lub pomiar, nie deklaracja modelu.