Artykuł · · 15 min czytania
Model 125B na RTX 3060, pod warunkiem dużej ilości RAM-u. Testuję Stratę
Strata uruchamia Qwen3.8-Flash-Next, model o 125 mld parametrów, na komputerze z jedną kartą graficzną. To otwarty silnik na licencji MIT, publikowany przez autora o pseudonimie Niko1221 i niezwiązany z zespołem Qwen. Karta z 12 GB wystarcza, bo większość modelu leży w RAM-ie: z taką kartą testowany wariant potrzebuje według dokumentacji około 60 GB RAM-u, a w praktyce 64 GB. Sprawdziłem go na komputerze z GeForce RTX 3060 (12 GB), procesorem Intel Xeon E5-2699 v4 z 2016 roku i 121 GB RAM-u.
Strata pisała tam odpowiedzi z prędkością 43–54 tokenów na sekundę, najwolniej po polsku, i czytała długie prompty z prędkością około 800 tokenów na sekundę. Ten sam plik modelu w llama.cpp, z ekspertami w RAM-ie, pisał 16 tokenów na sekundę i czytał najwyżej 226. W 17 sprawdzalnych zadaniach po polsku Strata bez trybu myślenia odpowiadała poprawnie w 88% prób, a z myśleniem w 97%. Dwa mniejsze modele uruchomione dla porównania na tym samym komputerze, gemma-4-E4B i Qwen3.6-27B, odpowiadały poprawnie w 41–71% prób i zmyślały fakty.
Jak 125 mld parametrów mieści się w 12 GB
Qwen3.8-Flash-Next jest modelem typu mixture of experts (MoE). Każda z jego 48 warstw ma 512 „ekspertów”, czyli osobnych bloków sieci, a router, mała sieć na początku warstwy, wybiera dla każdego tokena 10 z nich i jednego eksperta wspólnego. Według karty modelu przy jednym tokenie pracuje około 6 mld parametrów, mniej niż 5% całości. Pozostałe wagi nie muszą leżeć na karcie graficznej, muszą być tylko dostępne dostatecznie szybko.
Karta modelu liczy 125 mld parametrów samej sieci i dolicza do nich dwa składniki, razem 180 mld w plikach. Pierwszy to tablica osadzeń n-gramów (51 mld parametrów): gotowe wektory liczb dla 20 mln częstych par i trójek tokenów, które model na drugiej warstwie odczytuje zamiast je obliczać. Drugi to warstwa MTP (multi-token prediction, 4 mld parametrów), opisana niżej.
Strata rozkłada to wszystko na trzy poziomy pamięci:
- Karta graficzna trzyma warstwy uwagi (części sieci, które porównują bieżący token z wcześniejszym tekstem), routery, wspólnych ekspertów, pamięć podręczną kontekstu (KV cache) i zapas najczęściej używanych ekspertów. Na mojej karcie zmieściło się ich 1891 (3,9 GB), czyli 8% wszystkich. Mimo to w zapytaniach z moich testów 55–69% ekspertów wybranych przez router było już na karcie; silnik wymienia je w trakcie pracy, a w pierwszym zapytaniu po starcie było ich na karcie tylko 29%.
- RAM trzyma wszystkich 24 576 ekspertów, w testowanym wariancie 50 GB. Eksperta, którego nie ma na karcie, oblicza procesor, równolegle z kartą. U mnie robiło to 20 z 22 rdzeni (jeden Strata zostawia systemowi, na jednym działa wątek sterujący), instrukcjami AVX2, bo ten procesor nie ma AVX-512.
- Dysk SSD trzyma tablicę n-gramów (29 GB). Model czyta z niej kilka wierszy na token. Gdy RAM jest bardzo duży (dla tego wariantu od 107 GB według dokumentacji), Strata na Linuksie ładuje ją jednak do pamięci, bo według jej pomiarów skraca to czytanie promptu o 18% przy 4 tys. tokenów i o 2% przy 98 tys. Tak było u mnie, dlatego proces silnika zajmował 83 GB RAM-u.
Wagi są skompresowane przez kwantyzację, czyli zapis liczb na mniejszej liczbie bitów. Nazwa wariantu IQ3_S oznacza schemat kompresji, w którym ekspert zajmuje średnio około 3,3 bita na wagę zamiast 16. Autorzy Straty piszą, że ten wariant „wypada tak samo jak pełny model na opublikowanych testach”, ale nie podają, o które testy chodzi. Liczby daje ich własny pomiar na 5 tys. tokenów tekstu (kod, dokumentacja, proza w kilku językach): IQ3_S wybiera ten sam najbardziej prawdopodobny następny token co wariant 8-bitowy w 87,7% pozycji, a perplexity, czyli miara zaskoczenia modelu tekstem, rośnie z 4,052 do 4,097, o około 1%. Inny token nie musi zmieniać sensu odpowiedzi, ale dokumentacja nie pokazuje, jak często go zmienia.
Warstwa MTP proponuje do trzech kolejnych tokenów, a pełny model sprawdza je w jednym przebiegu i zostawia trafne. To odmiana dekodowania spekulatywnego: odpowiedź jest taka sama, tylko szybsza. Na kartach z 12–16 GB Strata domyślnie pomija też rzadko wybieranych ekspertów, których akurat nie ma na karcie. Według dokumentacji na RTX 3060 model wybiera wtedy ten sam najbardziej prawdopodobny token co przy dokładnym obliczeniu w 97,7% pozycji. Wszystkie moje testy jakości szły z tym ustawieniem; jego wpływu na wyniki zadań nie mierzyłem, zmierzyłem tylko, ile oba przyspieszenia dają w prędkości (niżej).
Projekt Dana Woodsa, który uruchomił Qwena 397B na MacBooku z 48 GB pamięci, czytał ekspertów na bieżąco z dysku. Strata trzyma ich w RAM-ie: potrzebuje go znacznie więcej, ale nie czeka na dysk.
Ile pamięci potrzeba
Strata uruchamia ten sam model w kilku stopniach kompresji. Instalator dodaje RAM do pamięci karty, odejmuje 5 GB na system i według wyniku proponuje wariant:
| Próg instalatora (RAM + VRAM − 5 GB) | Wariant | Zajmuje (RAM + VRAM) | Uwagi |
|---|---|---|---|
| 32 GB | Coder IQ1_M | ok. 32 GB | połowa ekspertów, wybranych pod programowanie; słabszy poza kodem |
| 40 GB | IQ2_XS | 39,2 GB | |
| 48 GB | IQ3_XXS | 47,0 GB | |
| 64 GB | IQ3_S | 54,8 GB | najwolniejszy i najdokładniejszy z wariantów 2–3-bitowych; testowany tutaj |
Rozmiary w tabeli nie obejmują tablicy n-gramów, która domyślnie zostaje na dysku. Próg jest wyższy od zajmowanej pamięci, bo eksperci muszą zmieścić się w samym RAM-ie: dokumentacja zaleca RAM równy rozmiarowi ekspertów plus około 10 GB, dla IQ3_S około 60 GB. Z kartą 12 GB próg 64 GB oznacza 57 GB RAM-u, a dokumentacja pisze, że przy 64 GB RAM-u IQ3_S działa, gdy niewiele innych programów jest otwartych. W komputerach z pamięcią wspólną dla procesora i grafiki, jak Mac z procesorem Apple, liczy się jej całkowity rozmiar.
Przy progu 96 GB i więcej dostępne są też 4–8-bitowe warianty przygotowane przez Unsloth, firmę publikującą skompresowane wersje otwartych modeli: od UD-IQ4_XS (94 GB do pobrania, eksperci zajmują w RAM-ie około 72 GB) do Q8_0 (188 GB do pobrania, około 136 GB RAM-u na ekspertów). Instalator nadal proponuje wtedy IQ3_S, a większy wariant trzeba wybrać ręcznie; ja zostałem przy IQ3_S.
Karta musi mieć co najmniej 12 GB pamięci (NVIDIA od serii RTX 20, nowsze Radeony, Intel Arc), a procesor obsługiwać AVX2. Większa karta przyspiesza model, bo mieści więcej ekspertów, ale nie zmniejsza zapotrzebowania na RAM.
Model obsługuje natywnie 262 144 tokeny kontekstu. Instalator ustawia 32K dla kart poniżej 14 GB, ale limit można podnieść przy starcie. Od 64K Strata trzyma większą część pamięci kontekstu w RAM-ie i zostawia na karcie tylko okno 32K. Przy ustawionych przeze mnie 128K zajmowała na to 1,7 GB RAM-u, a zużycie pamięci karty się nie zmieniło.
Instalacja na Ubuntu
Wybrałem instalację przez polecenie strata w terminalu, która nie wymaga uprawnień administratora:
curl -fsSL https://github.com/Niko1221/Strata/releases/latest/download/install.sh | sh
strata launch --plan --model iq3_s # pokazuje plan, niczego nie zmienia
strata launch --model iq3_s --context 128k --yes --no-tui
Skrypt instalacyjny sprawdza sumę SHA-256 archiwum i podpis wydania, a wszystko zapisuje w katalogu domowym. Pobranie silnika i modelu z dodatkami (razem 90 GB) zajęło około 3 godzin 20 minut przy 4–9 MB/s. Ładowanie modelu trwa około minuty. Serwer udostępnia API zgodne z OpenAI (http://127.0.0.1:8080/v1) i Anthropic (http://127.0.0.1:8080) oraz czat w przeglądarce.
Przy starcie Strata ostrzegła, że na karcie zostaje tylko 200–450 MB wolnej pamięci, bo część zajmuje pulpit, i zaproponowała --vram-reserve-mib 1024. Przy tak zapełnionej karcie sterownik może przenosić pamięć GPU do RAM-u, a pisanie spada wtedy do kilku tokenów na sekundę. W moich testach do tego nie doszło.
Warunki pomiarów
- Ubuntu 26.04.1, jądro 7.0, sterownik NVIDIA 595.99, Strata 0.2.3 z silnikiem 0.1.48 dla CUDA 13, wariant IQ3_S, kontekst 128K, pulpit graficzny włączony.
- RAM DDR4 (Xeon E5 v4 ma cztery kanały pamięci), karta na PCIe 3.0 x16; Strata zmierzyła transfer do karty 10,5 GB/s.
- Prędkości pochodzą z pola
timingsw odpowiedziach serwera; Strata i llama.cpp raportują je tak samo. Prędkość pisania obejmuje tokeny przyjęte z MTP. Odsetek ekspertów na karcie, rozmiar ich pamięci i liczbę rdzeni podaje log silnika. - Strata i llama.cpp liczą tokeny tak samo: ten sam tekst dał w nich 7911 i 7922 tokeny (różnica to szablon czatu), więc prędkości w tokenach na sekundę da się porównać.
Prędkość pisania i co ją daje
Cztery polecenia: funkcja w Pythonie, esej po polsku i po angielsku (po około 400 słów) i lista 30 nazw z uzasadnieniem. Każde wysłałem dwa razy, z temperaturą 0, po świeżym starcie serwera; w tabeli jest średnia z obu przebiegów w tokenach na sekundę:
| Konfiguracja | kod | esej PL | esej EN | lista |
|---|---|---|---|---|
| Strata, ustawienia domyślne | 53,8 | 42,9 | 50,3 | 49,2 |
| Strata bez MTP | 40,3 | 42,4 | 42,1 | 42,2 |
| Strata bez pomijania rzadkich ekspertów | 45,5 | 37,8 | 43,2 | 43,1 |
llama.cpp, wszyscy eksperci w RAM-ie (--cpu-moe) | 15,6 | 15,6 | 15,6 | 15,7 |
llama.cpp, eksperci 2 warstw na karcie (--n-cpu-moe 46 -ub 2048) | 15,9 | 16,0 | 16,0 | 15,9 |
W zwykłej pracy, przy domyślnych temperaturach (0,7 bez myślenia, 1,0 z myśleniem), Strata pisała podobnie: w testach jakości mediana dla odpowiedzi dłuższych niż 150 tokenów wyniosła 52 tokeny na sekundę bez myślenia i 49,5 z myśleniem.
MTP przyspiesza pisanie kodu o jedną trzecią, angielskiej prozy i listy o 17–19%, a polskiej prozy prawie wcale (1%). W polskim tekście model przyjmował około 40% proponowanych tokenów, w kodzie ponad 70%, a sprawdzanie odrzuconych propozycji też zajmuje czas. Dokumentacja Straty obiecuje 1,6–1,8 raza; na tym sprzęcie i tych tekstach zysk był mniejszy. Pomijanie rzadkich ekspertów dało 13–18%, zgodnie z dokumentacją.
Llama.cpp (wersja b10809) wczytał ten sam plik bez zmian, ale pisał trzy razy wolniej. W tej konfiguracji nie używał warstwy MTP, a ekspertów liczył procesor. Przeniesienie na kartę ekspertów dwóch warstw i przetwarzanie promptu w porcjach po 2048 tokenów (parametry -ub i -b) prawie nie zmieniło pisania; więcej warstw nie zmieściło się na karcie.
Długi kontekst
Do pomiarów kontekstu brałem losowy fragment angielskiej dokumentacji Straty o długości od 1 do 115 tys. tokenów, za każdym razem inny, żeby silnik nie wykorzystał zapisanego wcześniej promptu. W środek wstawiałem jedno polskie zdanie z hasłem i prosiłem o hasło oraz jedno zdanie o treści dokumentacji. Sześć długości zmierzyłem po dwa razy, a cztery z nich jeszcze raz z prośbą o dłuższe streszczenie, razem 16 prób.
Czytanie promptu, czyli prefill, trwało od 4 s dla 1 tys. tokenów do 140 s dla 115 tys. Od około 17 tys. tokenów prędkość wynosiła 790–850 tokenów na sekundę; przy krótkich promptach jest niższa, bo dominuje stały narzut. Llama.cpp czytał ten sam rodzaj tekstu z prędkością 85–91 tokenów na sekundę, a przy porcjach po 2048 tokenów 226. Przy czytaniu promptu Strata przesyła ekspertów do karty przez PCIe, więc PCIe 3.0 jest tu prawdopodobnie najwolniejszym ogniwem. Dokumentacja Straty podaje dla RTX 5070 z procesorem Ryzen 5 7600 około 1620 tokenów na sekundę przy prompcie 32K, dwa razy więcej niż u mnie. Tamten komputer ma jednak także inny procesor i pamięć, a pomiar zrobiono starszą wersją silnika, więc przyczyny różnicy nie da się wskazać.
Pisanie prawie nie zależało od długości kontekstu: przy 500-tokenowym streszczeniu 46 tokenów na sekundę dla 1,3 tys. tokenów kontekstu i 42 dla 115 tys. Tylko 12 z 48 warstw modelu to warstwy uwagi, a i one czytają dla każdego tokena ograniczoną liczbę bloków kontekstu (do 2048 tokenów według karty modelu). Pozostałe 36 warstw (Gated DeltaNet) nie przegląda kontekstu, tylko aktualizuje stan o stałym rozmiarze.
Hasło model podał w 15 z 16 prób, także przy 115 tys. tokenów. W jednej próbie, przy 66 tys. tokenów, odmówił: uznał zdanie z hasłem za próbę prompt injection, czyli ukrytego w danych polecenia. Polskie zdanie w angielskim tekście łatwo jednak wyłowić, więc dodałem trudniejszy test, w osobnych pięciu promptach o długości od 9 do 122 tys. tokenów. Dwa angielskie zdania w stylu dokumentacji wstawiłem w jedną czwartą i trzy czwarte tekstu: „nocne testy regresji działają na maszynie ORCA-7” oraz „maszyna ORCA-7 stoi w biurze we Frankfurcie”. Na pytanie, w jakim mieście stoi maszyna z nocnymi testami, model odpowiedział poprawnie we wszystkich pięciu próbach.
Jakość odpowiedzi
Przygotowałem 20 zadań po polsku, bo chciałem sprawdzić model w języku innym niż angielski; wyniki po angielsku mogą być inne. W 17 zadaniach odpowiedź da się sprawdzić automatycznie: rachunki (mnożenie, rabat i VAT, liczenie dni w roku przestępnym), zagadki logiczne, pytania o fakty, odpowiedź w formacie JSON, polecenie z kilkoma ograniczeniami naraz, pytanie o nieistniejącą powieść Bolesława Prusa (XIX-wiecznego polskiego pisarza, autora „Lalki”) oraz trzy funkcje w Pythonie, które uruchamiałem z testami. Najtrudniejsza z nich zapisuje liczby od 0 do 999 999 polskimi słowami; polskie liczebniki zmieniają formę zależnie od liczby („dwa tysiące”, „pięć tysięcy”), a polecenie wymagało zapisu „tysiąc” zamiast „jeden tysiąc”. Trzy zadania (wyjaśnienie techniczne, mail do klienta, tłumaczenie idiomów) oceniałem, czytając odpowiedzi.
Strata używa domyślnie temperatur z karty modelu, więc odpowiedzi różnią się między przebiegami. Zestaw bez myślenia przeszedłem trzy razy, z myśleniem dwa razy. Modele odniesienia uruchomiłem przez llama.cpp w wariantach Q4_K_M (około 4,8 bita na wagę), z temperaturami z ich kart: gemma-4-E4B trzy razy bez myślenia i dwa razy z myśleniem, Qwen3.6-27B dwa razy i tylko bez myślenia, bo przy jego prędkości przebieg z myśleniem trwałby według mojego szacunku ponad godzinę.
| Model i tryb | Poprawne odpowiedzi w 17 zadaniach | Czas całego zestawu (20 zadań) |
|---|---|---|
| Strata, Qwen3.8-Flash-Next, bez myślenia (3 przebiegi) | 45 z 51 (88%) | 83–96 s |
| Strata, Qwen3.8-Flash-Next, z myśleniem (2 przebiegi) | 33 z 34 (97%) | 412–534 s |
| gemma-4-E4B, bez myślenia (3 przebiegi) | 21 z 51 (41%) | 78–88 s |
| gemma-4-E4B, z myśleniem (2 przebiegi) | 21 z 34 (62%) | 215–216 s |
| Qwen3.6-27B, bez myślenia (2 przebiegi) | 24 z 34 (71%) | 658–690 s |
Bez myślenia Strata myliła się w czterech zadaniach, najczęściej w dwóch. Zagadkę o trzech osobach, z których część zawsze kłamie, rozwiązała raz na trzy próby, za każdym razem odpowiadając w niecałą sekundę. Funkcja zapisująca liczby słownie nie przeszła testów w dwóch próbach na trzy: raz pisała „jeden tysiąc”, choć polecenie wprost wymagało „tysiąc”, raz gubiła słowo „tysięcy”. W jednym przebiegu pomyliła też wynik mnożenia (40 701 304 zamiast 40 701 104), a funkcja zamieniająca zapis „1h 30m 15s” na sekundy odrzucała wielkie litery, choć polecenie kazało je przyjmować. Z myśleniem jedynym błędem było znowu „jeden tysiąc”. Na pytanie o „Szklany ogród” Prusa model we wszystkich pięciu próbach odpowiedział, że takiej powieści nie ma.
Myślenie kosztuje dużo czasu. Zestaw trwał pięć razy dłużej, a najwięcej zajmowały proste zadania programistyczne: wspomniana funkcja z czasem trwania powstawała 101 s i 4712 tokenów zamiast 6 s, przy takim samym wyniku testów.
Gemma-4-E4B (5 GB) mieści się w całości na karcie i pisze 75 tokenów na sekundę, półtora raza szybciej niż Strata. Bez myślenia odpowiadała poprawnie w 21 z 51 prób, z myśleniem w 21 z 34. We wszystkich pięciu przebiegach pomyliła się w mnożeniu, w liczeniu liter i w pytaniu o system, na którym powstał Linux, i za każdym razem wymyśliła fabułę nieistniejącej powieści Prusa, z coraz innym bohaterem. W pierwszym przebiegu bez myślenia dwie jej odpowiedzi programistyczne urwał limit 1200 tokenów, bo model dopisywał do kodu własne testy.
Qwen3.6-27B (17 GB) to model gęsty, czyli przy każdym tokenie liczy wszystkie wagi. Na karcie z 12 GB część z nich zostaje w RAM-ie, więc pisał 5 tokenów na sekundę, a zestaw trwał 11 minut. Odpowiadał poprawnie w 24 z 34 prób. W obu przebiegach pomylił rok wydania „Lalki”, zagadkę z kłamcami i funkcję z liczbami słownie. Na pytanie o „Szklany ogród” oba razy odpowiedział, że Prus go nie napisał, ale dodawał zmyślone fakty, np. przypisał Prusowi „W pustyni i w puszczy”, powieść Henryka Sienkiewicza.
Producent podaje dla pełnego modelu Qwen3.8-Flash-Next m.in. 91,7 w GPQA Diamond i 62,5 w SWE-bench Pro; to wyniki Qwen dla modelu bez kompresji, których mój zestaw nie sprawdza.
Claude Code i inni agenci
Polecenie strata connect wypisuje i zapisuje konfigurację dla OpenCode, Codex CLI, Claude Code, Hermes Agent (agenta open source od Nous Research), OpenClaw i kilku innych narzędzi. Z opcją --check wysyła jedno pytanie i jedno wywołanie narzędzia (tool calling, czyli prośbę modelu o uruchomienie funkcji) tak, jak robi to dana aplikacja. Dla Claude Code i Hermes Agent oba sprawdzenia przeszły w 3–4 sekundy.
Prawdziwe zadanie dałem Claude Code (wersja 2.1.310, w trybie --bare, czyli bez wtyczek i serwerów MCP): mały projekt w Pythonie z błędem w liczeniu słów, niezaimplementowaną funkcją top_words i sześcioma testami, z których pięć nie przechodziło. Agent uruchomił testy, poprawił błąd, napisał funkcję i ponownie uruchomił testy. Zajęło to 19 kroków i 133 sekundy, wszystkie testy przeszły, a plik z testami został nietknięty. W kodzie została jedna niekonsekwencja: pomocnicza funkcja ma adnotację zwracanej listy, a zwraca generator. To jedna próba na jednym prostym zadaniu, nie ocena pracy z większym repozytorium.
Pierwszy krok wysłał 4,6 tys. tokenów promptu systemowego i opisów narzędzi, które Strata czytała 6,3 s. W kolejnych krokach 95–99% promptu było już zapamiętane, więc silnik czytał tylko dopisany fragment w 0,3–1,1 s, choć rozmowa urosła do 8,3 tys. tokenów. Strata przechowuje w RAM-ie przeczytane prompty kilku rozmów (u mnie do 8 GB), ale obsługuje je po kolei: domyślnie odpowiada na jedno zapytanie naraz. Pełny prompt Claude Code bez trybu --bare ma według dokumentacji Straty 15,6 tys. tokenów, a Hermes Agent 12,9 tys., dlatego do pracy z agentami warto podnieść kontekst z domyślnych 32K.
Kiedy to się opłaca
Możliwość wykonania części pracy zupełnie lokalnie, na modelu mniejszym od czołowych modeli w chmurze, jest kusząca, a ten test pokazuje, ile do tego potrzeba. Gemma-4-E4B, która mieści się w całości na karcie, odpowiadała najszybciej, ale myliła się w ponad połowie prób i zmyślała fakty. Qwen3.8-Flash-Next przez Stratę bez myślenia odpowiadał poprawnie w 88% prób przy 43–54 tokenach na sekundę, a z myśleniem w 97%, choć zestaw trwał wtedy pięć razy dłużej. Wymaga za to około 60 GB RAM-u i prawie całej karty. Qwen3.6-27B, gęsty model, który na karcie się nie mieści, wypadł gorzej od Straty i był od niej dziesięć razy wolniejszy: w tym zestawieniu o prędkości decydowało to, ile wag trzeba policzyć dla jednego tokena, a nie rozmiar całego modelu.
Na komputerze z dużą ilością RAM-u lokalny model ma więc sens przy danych, których nie chcę wysyłać do chmury, przy szukaniu informacji w długich dokumentach (115 tys. tokenów czyta w około 2,5 minuty), przy prostszych zadaniach programistycznych i przy agentach, którzy w kolejnych krokach dopisują do rozmowy niewiele. Gorzej sprawdzi się, gdy z serwera korzysta kilka osób naraz, gdy karta graficzna jest potrzebna do czegoś innego albo gdy każde zadanie wymaga myślenia. Opłat za tokeny nie ma, ale komputer pod obciążeniem zużywa prąd: sama karta pobierała przy pisaniu około 140 W, poboru całego komputera nie mierzyłem.
Źródła
- Strata, repozytorium i dokumentacja, Niko1221, wersja 0.2.3, silnik 0.1.48: README,
docs/MODELS.md,docs/DETAILS.md,docs/QUANTS.md,docs/HOW_IT_WORKS.md. - Qwen3.8-Flash-Next, karta modelu, Qwen.
- llama.cpp, ggml-org, wersja b10809.
- Hermes Agent, Nous Research.