geeks only · pitfalls · 2026-09-25

Pułapki przy optymalizacji lokalnego LLM

Rzeczy, na których straciliśmy godziny, żeby Ty nie musiał. Wszystko z działających maszyn: RTX 3090 i Intel Arc Pro B70 na vLLM (B70 do 26.09.2026 na llama.cpp SYCL). Liczby pochodzą z benchmarku.

vLLM 0.20.1 vLLM XPU (Intel) llama.cpp SYCL — historia vLLM 0.30.0 + łatki — Flash-Next 177B Qwen3.8-27B

Jak zmiany wpływały na szybkość

Ten sam model (Qwen3.8-27B), ta sama metoda: prompt 2 849 tokenów, 600 tokenów odpowiedzi, rozumowanie włączone, średnie z powtórzeń. Jaśniejszy pasek — stan przed zmianą, pełny — po zmianie. Pełne tabele są w benchmarku, a co dokładnie zmienialiśmy — w punktach niżej.

Jeden użytkownik — generowanie
3090 · Z420 · stan zastany
8,4
3090 · Z420 · po optymalizacji
28,9
3090 · Z440 · to samo przy 220 W
46,8
4× 3090 · Z820 · bez MTP
40,3
4× 3090 · Z820 · z MTP
55,5
Arc B70 · llama.cpp
20,1
Arc B70 · vLLM bez grafów
11,8
Arc B70 · vLLM, grafy XPU — teraz
32,7
0204060 tok/s
Trzech użytkowników — przepustowość łączna
3090 · Z420 · stan zastany
19,6
3090 · Z420 · po optymalizacji
50,0
3090 · Z440 · to samo przy 220 W
71,9
4× 3090 · Z820 · bez MTP
79,6
4× 3090 · Z820 · z MTP
82,4
Arc B70 · llama.cpp
26,7
Arc B70 · vLLM bez grafów
36,8
Arc B70 · vLLM, grafy XPU — teraz
75,5
0255075100 tok/s
Ośmiu użytkowników — przepustowość łączna
3090 · Z420 · stan zastany
19,0
3090 · Z420 · po optymalizacji
50,0
3090 · Z440 · to samo przy 220 W
69,1
4× 3090 · Z820 · bez MTP
140,0
4× 3090 · Z820 · z MTP
148,9
Arc B70 · llama.cpp
brak — 3 sloty
—
Arc B70 · vLLM bez grafów
84,3
Arc B70 · vLLM, grafy XPU — teraz
144,3
050100150 tok/s
Arc B70 — generowanie przy długim kontekście
llama.cpp · 15 tys. tokenów
17,8
llama.cpp · 60 tys.
12,0
llama.cpp · 120 tys.
8,4
vLLM · 15 tys. tokenów
31,5
vLLM · 60 tys.
28,0
vLLM · 120 tys.
24,5
010203040 tok/s
RTX 3090 — zysk leżał w ustawieniach. Wyłączenie --enforce-eager (grafy CUDA), spekulacja MTP i większa kolejka podniosły generowanie z 8,4 do 28,9 tok/s — ×3,4 bez zmiany sprzętu. Kolejne +45 % dał limit mocy 220 W zamiast 180 W na maszynie, której zasilacz go wytrzymuje (Z440: 32,3 → 46,8 tok/s).
Na czterech kartach (Z820) MTP dał +38 % jednemu użytkownikowi (40,3 → 55,5), ale przy ośmiu już tylko +6 % — karty i tak liczą pełnym wsadem.
Intel Arc Pro B70 — zysk leżał w zmianie silnika. Trzy tygodnie optymalizacji llama.cpp (większy wsad, trzy sloty, limit mocy) zostawiły generowanie na ~20 tok/s. Skok przyszedł dopiero z vLLM i grafami XPU: ×1,6 dla jednego użytkownika, ×2,8 dla trzech, przy 120 tys. kontekstu ×2,9 — a przy ośmiu osobach jedna karta za 6 800 zł dorównuje czterem 3090. Uwaga na szczegół: vLLM uruchomiony tak, jak w przykładach Intela (bez grafów), był wolniejszy od llama.cpp.
Na Intelu wszystko przychodzi z opóźnieniem. To, co na NVIDII działa od razu — grafy, spekulacja MTP, dojrzały vLLM — na kartach Arc dojrzewa tygodniami. vLLM dla Arc Pro jest osobnym projektem Intela (llm-scaler): grafy XPU weszły w lipcu 2026 jako eksperymentalne i w przykładach dalej są wyłączone, MTP dla Qwen 27B doszło 4 sierpnia, poprawki cache prefiksu i współbieżności — 9 września, a MTP przy wielu użytkownikach wciąż się sypie. Nasza B70 pracowała od 2 września; przez pierwsze trzy tygodnie jedyną stabilną drogą było llama.cpp. Kupując Intela, kupujesz tańszą pamięć od razu, a wydajność — z opóźnieniem, razem z oprogramowaniem.

Uwagi do liczb z benchmarku

Pobór mocy

Mierzone wyłącznie GPU i pakiet CPU, z liczników energii sterownika i RAPL. Nie obejmuje płyty, dysków, wentylatorów obudowy, strat sekcji zasilania ani sprawności zasilacza — rzeczywisty pobór z gniazdka jest wyższy.

Co dają same ustawienia

Ta sama maszyna, ta sama karta, ten sam limit mocy 180 W i ta sama blokada zegara 1500 MHz. Zmieniona wyłącznie konfiguracja silnika vLLM. Pomiar na Z420 z 24.09.2026, średnie z dwóch powtórzeń każdego przebiegu.

Limit mocy a wydajność — 1× 3090 na Z440

Ta sama maszyna, ta sama konfiguracja vLLM, zmieniany wyłącznie limit mocy karty. Blokada zegara na 1500 MHz pozostaje włączona przez cały pomiar.

Kontekst pomiarów

Ta sama karta w dwóch maszynach, w tych samych ustawieniach, obie zmierzone 24.09.2026. Z420 ma pamięć DDR3 i Xeona E5-2660 v2, Z440 — DDR4 i E5-2683 v3. Przy jednym użytkowniku Z440 jest szybszy o 12 % (32,3 wobec 28,9 tok/s generowania).
Przy wielu użytkownikach tych dwóch maszyn nie porównujemy. Powody są dwa: rozrzut między powtórzeniami sięgał na Z420 18 % przy trzech zapytaniach, a pomiary prowadzono przy różnym obciążeniu tła — na Z440 w tle pracowały usługi RAG zepchnięte na procesor, na Z420 były wyłączone. Wszystkie liczby w tabelach to średnie z powtórzeń, nie najlepsze przebiegi.
O oknie kontekstu. Obie maszyny z pojedynczą 3090 pracują z oknem 65 536 tokenów przy --max-num-seqs 4 i --gpu-memory-utilization 0.94. Pula cache KV wynosi wtedy 111 287 tokenów, czyli 1,7 zapytania pełnej długości naraz albo odpowiednio więcej krótszych.
Wiersze o wielu użytkownikach zmierzono w wariancie ze skróconym oknem (32 tys.) i większą kolejką (--max-num-seqs 8), bo przy tych ustawieniach silnik obsługuje więcej zapytań naraz. Prędkość dla jednego użytkownika jest w obu wariantach taka sama — 28,9 tok/s przy 32 tys. i 28,9 tok/s przy 64 tys. — więc wiersze jednoosobowe obowiązują dla obu. Kluczowa dla pamięci jest wielkość kolejki, nie samo okno: grafy CUDA zajmują tym więcej, im więcej rozmiarów wsadu muszą przechwycić.
Kolumna Arc Pro B70 od 26.09.2026 to vLLM XPU (obraz Intela llm-scaler-vllm:0.26.0-b2, GPTQ int4, cache KV fp8, grafy XPU, cache prefiksu), zmierzony tym samym promptem (2 849 tok.) i tą samą metodą co Z820 i Z440, przy limicie 250 W. Wcześniejsze liczby z llama.cpp — w sekcji o B70 niżej, jako historia. Pobór w spoczynku pochodzi z 10.09.
Karta ma przy tym mocny argument cenowy. Przy 6 800 zł (cena w Polsce, wrzesień 2026) i 32 GB pamięci wychodzi 212 zł za 1 GB VRAM — najtaniej za 32 GB na jednej nowej karcie z gwarancją. Używane RTX 3090 wypadają taniej na gigabajt (188 zł), ale to rynek wtórny, bez gwarancji i z ograniczoną dostępnością.
* W pomiarze z 10.09 na Z420 prefill liczony był pośrednio i jest zaszumiony. Pomiary z 24.09 i 25.09 (Z820, Z440 i Arc B70) są strumieniowe, więc czas do pierwszego tokenu i samo generowanie liczone są osobno. „Czytanie promptu" to tokeny promptu podzielone przez czas do pierwszego tokenu — przy wielu użytkownikach zawiera czekanie w kolejce. Każde zapytanie ma unikalny znacznik, który psuje cache prefiksu. Wiersz „1 użytkownik — tok/s" to 600 tokenów podzielone przez czas całkowity, więc jest porównywalny między wszystkimi kolumnami.
Arc pobiera więcej w spoczynku (43 W wobec 31 W) i kręci wentylatorem bez przerwy — 1629 obr./min przy 48 °C. Przy pracy ciągłej z rzadkim użyciem to realna pozycja w rachunku.
Obie maszyny z pojedynczą 3090 pracują teraz z grafami CUDA i obie stoją na limicie 180 W — 175 W i 179 W średnio. Dla porównania: bez grafów ta sama karta pobierała 131–138 W i nie dochodziła nawet do własnego limitu, bo czekała na procesor. Pomiary spoczynkowe pochodzą z 10.09.2026 i nie były powtarzane.
Co dokładnie zmienione: zdjęty --enforce-eager (czyli włączone grafy CUDA), zachowana spekulacja MTP, kolejka --max-num-seqs podniesiona z 3 do 8, włączony --enable-chunked-prefill, okno kontekstu skrócone do 32 tys. tokenów, żeby starczyło pamięci na grafy. Żadnej zmiany w sprzęcie.
Najciekawszy jest pobór mocy. W stanie zastanym karta ciągnęła 131–138 W przy limicie 180 W — nie dochodziła nawet do własnego limitu, bo czekała na procesor. Przy --enforce-eager host musi ręcznie wystrzelić każde jądro obliczeniowe. Po włączeniu grafów karta pracuje na limicie i to ona jest wąskim gardłem, a nie maszyna. Stąd też trzykrotny skok wydajności bez wymiany czegokolwiek.
Podniesienie limitu ze 180 do 220 W daje +45 % generowania (32,3 → 46,8 tok/s) i +48 % przepustowości zbiorczej przy trzech użytkownikach. Przy 220 W pojedyncza karta generuje dla jednego użytkownika niewiele wolniej niż zestaw czterokartowy ze spekulacją MTP (46,8 wobec 55,5 tok/s) — przewaga czterech kart leży w obsłudze wielu osób naraz i w długości kontekstu, nie w prędkości pojedynczego strumienia.
Zysk pojawia się tylko wtedy, gdy karta faktycznie stoi na limicie. Przy wyłączonych grafach CUDA ta sama karta pobierała 131–138 W i podnoszenie limitu nic nie dawało. Limit mocy jest ograniczeniem zasilania konkretnej maszyny — w tej obudowie 250 W raz już wywaliło zabezpieczenie nadprądowe zasilacza, dlatego 220 W testowano stopniowo, z blokadą zegara i nadzorem temperatury.
Wiersze „zmierzone" to twarde liczby z liczników energii. Wiersze „z gniazdka" to szacunek z doliczoną płytą, dyskami i sprawnością zasilacza 85 %. Realny rachunek leży między nimi — maszyna pracująca ciągle stoi bezczynnie większość czasu.
Podsumowanie (stan na 04.10.2026): w przeliczeniu na 1 tok/s dla jednej osoby najtańsze są dziś cztery 3090 z Flash-Next (178 zł), tuż przed pojedynczą 3090 w Z420 (187 zł); ta ostatnia ma najlepszą wydajność na wat przy jednym użytkowniku. Arc B70 na vLLM ma najlepszą wydajność na wat przy trzech, a przy ośmiu osobach dorównuje czterem kartom z 27B (144 wobec 149 tok/s) — na jednej karcie za 6 800 zł. Cztery karty z Flash-Next dają najszybszy pojedynczy strumień (120 tok/s), najkrótszy czas do pierwszego tokenu (0,95 s), największą przepustowość przy ośmiu (291 tok/s) i największą pulę kontekstu (807 tys. tokenów). Dawne wyniki pojedynczej 3090 w Z440 — w części historycznej.
To nie jest czysty pomiar krzemu. Konfiguracje różnią się kwantyzacją (int4 AutoRound, UD-Q4_K_M, BF16), silnikiem inferencji, rozmiarem kontekstu i limitem mocy. To porównanie trzech działających konfiguracji produkcyjnych, nie samych kart w identycznych warunkach.

Historia: 1× RTX 3090 w Z440 (kolumna benchmarku 24.09–04.10.2026)

Do 4 października 2026 czwartą kolumną benchmarku była pojedyncza RTX 3090 w HP Z440 (Xeon E5-2683 v3, 62 GB DDR4). Zastąpiły ją cztery 3090 z Flash-Next; wyniki zostają tutaj, bo to wciąż najtańsza droga do lokalnego modelu. Qwen3.8-27B int4 AutoRound, KV fp8, okno 65 536, max-num-seqs 8, vLLM 0.20.1, pomiar 24.09.2026.

3090 · Z440 · 180 W
1 użytkownik — czas / tok/s22,7 s / 26,4
Samo generowanie32,3 tok/s
Czas do 1. tokenu / czytanie promptu4,2 s / 675 tok/s
3 użytkowników — łącznie / na osobę48,5 / 16,2 tok/s
8 użytkowników — łącznie45,8 tok/s
Pobór GPU / CPU / razem179 W / 43 W / ~222 W
Prąd pod obciążeniem — zmierzone / z gniazdka160 zł / 239 zł mies.
Sprzęt na 1 tok/s (1 / 3 użytk.)171 zł / 93 zł
Wydajność na wat (1 / 3 użytk.)0,147 / 0,271 tok/s/W

Limit mocy a wydajność — ta sama karta

Limit mocyGenerowanie
1 użytkownik
1 użytkownik
tok/s
3 naraz
łącznie
8 naraz
łącznie
Czas do
1. tokenu
Czytanie
promptu
Temp.
180 W32,3 tok/s26,448,5 tok/s45,8 tok/s4,2 s675 tok/s74 °C
200 W38,5 tok/s31,360,1 tok/s57,7 tok/s3,6 s790 tok/s79 °C
220 W46,8 tok/s37,771,9 tok/s69,1 tok/s3,1 s919 tok/s82 °C

Obserwacje techniczne

1

Współbieżność decyduje o przepustowości przy wielu użytkownikach

Domyślna konfiguracja obu silników ogranicza liczbę równolegle przetwarzanych sekwencji do jednej. To nie jest ograniczenie sprzętu — to jedna wartość w konfiguracji, która nie kosztuje dodatkowego VRAM, bo pula KV jest przydzielana raz, przy starcie.

SilnikParametrZmianaPrzepustowość, 3 użytkowników
vLLM--max-num-seqs3 → 2433,3 → 63,7 tok/s przy 8 użytkownikach (×1,91)
llama.cpp--parallel1 → 318,95 → 27,05 tok/s (×1,43)

Kolejka działa jednak tylko wtedy, gdy nie ma spekulacji. Z włączoną spekulacją MTP podniesienie kolejki z 3 do 8 nie zmieniło prawie nic (45,6 → 46,1 tok/s przy ośmiu użytkownikach) — spekulacja zużywa ten sam zapas obliczeniowy, z którego żyje batching.

Dlaczego Arc skaluje słabiej (×1,44 wobec ×1,91): przy jednym strumieniu Arc już wykorzystuje moc obliczeniową — przepustowość na użytkownika spada z 19 do 10 tok/s przy trzech. RTX 3090 przy jednym strumieniu jest ograniczona przepustowością pamięci i ma zapas obliczeniowy. Paradoksalnie: im szybsza karta na pojedynczym strumieniu, tym mniej zyskuje na batchingu.

2

Tryb rozumowania wymaga hojnego budżetu tokenów

Z włączonym rozumowaniem model zużywa około 350 tokenów na sam blok myślenia. Przy limicie 600 tokenów odpowiedź wraca losowo pusta — w jednym przebiegu 996 znaków treści, w kolejnym zero, przy identycznej konfiguracji. To wariancja na granicy budżetu, nie usterka.

Przy 2500 tokenach: 1407 znaków rozumowania i 6986 znaków właściwej odpowiedzi. Praktyczne minimum to 1500–2000 tokenów.

3

Blokada zegara podniosła wydajność, a nie obniżyła

Karta 3090 pracuje z limitem mocy 180 W. Dołożenie blokady zegara na 1500 MHz — mimo że karta potrafi 1980 MHz — podniosło przepustowość z 6,8 do 8,0 tok/s przy jednym użytkowniku.

Przy samym limicie mocy karta boostuje do maksimum, natychmiast uderza w sufit poboru i zostaje ostro zdławiona — pracuje w piłę. Przypięta do niższego, stałego zegara mieści się w budżecie mocy w sposób ciągły. Stabilny niższy zegar bije oscylujący wyższy, a przy okazji znosi mikrosekundowe szpilki poboru, na które sam limit mocy nie działa.

4

Kontekst kosztuje w pamięci więcej, niż się wydaje

Na Arcu kontekst 262 144 tokenów przy KV w q8_0 zajmuje około 11,5 GiB ponad same wagi modelu (14,3 GiB). Podniesienie całkowitego kontekstu do 393 216 i rozdzielenie go na trzy sloty daje po 131 072 tokeny na użytkownika:

przed: 25,76 GiB / 32    1 slot × 262 144
po:    30,65 GiB / 32    3 sloty × 131 072   bez błędów alokacji

Na vLLM zależność działa w drugą stronę: włączenie grafów CUDA ścięło dostępny KV cache z 4,61 do 2,24 GiB, a na 64 tys. tokenów kontekstu potrzeba 2,3 GiB — silnik odmówił startu. Przy włączonej spekulacji grafy schodzą do trybu częściowego (PIECEWISE), bo backend FlashInfer nie obsługuje pełnego.

Mimo trybu częściowego zysk jest duży: 13,3 → 31,7 tok/s na użytkownika na tej samej maszynie i przy tym samym limicie mocy. Sama spekulacja MTP odpowiada za ×1,7 — bez niej te same ustawienia dają 19,0 tok/s. Pułapka jest w rachunku pamięci: grafy alokują się poza budżetem --gpu-memory-utilization, więc trzeba obniżyć budżet albo skrócić kontekst. Przy kolejce 24 i włączonej spekulacji nie udało się znaleźć ustawienia, przy którym silnik w ogóle wstaje na 24 GB.

5

Intel udostępnia więcej danych pomiarowych niż NVIDIA

Sterownik xe wystawia w systemie plików to, czego karty GeForce nie pokazują: liczniki energii osobno dla karty i pakietu, temperatury rdzenia, pamięci, kontrolera i magistrali PCIe, a do tego szesnaście kanałów VRAM osobno, obroty wentylatora oraz limit i próg krytyczny mocy.

RTX 3090 nie raportuje żadnych napięć — to celowe ograniczenie kart konsumenckich — ani temperatur poza rdzeniem. Jedynym zamiennikiem jest licznik hamowania mocy, rosnący, gdy karcie brakuje zasilania.

6

Czym ten pomiar jest, a czym nie jest

To nie jest czysty pomiar krzemu. Konfiguracje różnią się kwantyzacją (int4 AutoRound, UD-Q4_K_M, BF16), silnikiem inferencji, rozmiarem kontekstu i limitem mocy. To porównanie trzech działających konfiguracji produkcyjnych, nie samych kart w identycznych warunkach.
  • Koszty „z gniazdka" są szacunkiem, nie pomiarem — bez watomierza nie da się ich domknąć
  • Zestaw czterokartowy mierzono wyłącznie w spoczynku, ponieważ pracuje produkcyjnie
  • Prefill na silniku vLLM mierzony pośrednio; wiarygodne są tam czasy całkowite
  • Ceny sprzętu to ceny zakupu z rynku wtórnego, nie ceny katalogowe

vLLM na 24 GB

7

--enforce-eager potrafi zabrać ×3

Bez grafów CUDA host odpala każde jądro osobno. Na starym Xeonie karta czekała na procesor i ciągnęła 131–138 W przy limicie 180 W. Po zdjęciu flagi: 8,4 → 28,9 tok/s na tej samej maszynie.

Jak rozpoznać: karta nie dochodzi do własnego limitu mocy pod obciążeniem. Wtedy wąskim gardłem jest host, nie GPU.

8

Grafy CUDA żyją poza --gpu-memory-utilization

Włączenie grafów ścięło dostępny KV cache z 4,61 do 2,24 GiB, a silnik odmówił startu przy 64k kontekstu. Im większe --max-num-seqs, tym więcej rozmiarów wsadu do przechwycenia i tym więcej pamięci.

# działa na 1× 3090, 64k, pula KV 111 287 tok.
--max-num-seqs 4 --gpu-memory-utilization 0.94 --max-model-len 65536

Przy kolejce 24 z włączoną spekulacją nie znaleźliśmy ustawienia, które w ogóle wstaje na 24 GB.

9

Spekulacja MTP i batching jedzą ten sam zapas

MTP daje ×1,7 dla jednego użytkownika. Ale z MTP podniesienie kolejki z 3 do 8 nic nie dało (45,6 → 46,1 tok/s przy 8 użytkownikach). Wybierz pod swój ruch: pojedynczy strumień → MTP, wiele osób naraz → kolejka bez spekulacji.

Z MTP grafy schodzą do trybu PIECEWISE (FlashInfer nie obsługuje pełnego). I tak się opłaca.

10

Unikalny prompt w teście, inaczej mierzysz cache

Cache prefiksu sprawia, że drugi przebieg z tym samym promptem jest „magicznie” szybszy. Wstaw do każdego zapytania unikalny znacznik. Mierz strumieniowo, żeby oddzielić czas do pierwszego tokenu od generowania.

11

Rozumowanie i za mały max_tokens = losowo pusta odpowiedź

Blok myślenia to ~350 tokenów. Przy limicie 600 odpowiedź raz ma 996 znaków, raz zero, w identycznej konfiguracji. Minimum praktyczne: 1500–2000 tokenów.

12

--gpu-memory-utilization 0.96 startuje, a potem pada

Silnik wstaje normalnie, a pod obciążeniem: torch.OutOfMemoryError: Tried to allocate 56.00 MiB. Najpodstępniejszy błąd, bo start wygląda na sukces. Nie idź powyżej 0.95. Podnoszenie budżetu dodatkowo zmniejsza miejsce na grafy — właściwą dźwignią jest --max-num-seqs.

13

Placebo i brakujące opcje

  • --enable-chunked-prefill w vLLM 0.20.1 jest domyślnie włączony — w logu enable_chunked_prefill=True bez tej flagi
  • vLLM nie ma czterobitowego cache KV: --kv-cache-dtype przyjmuje tylko auto i warianty fp8. 4-bit KV ma llama.cpp
  • Na 24 GB wybierasz: duża kolejka bez spekulacji albo MTP z kolejką 4–8. Kolejka 12–24 z MTP nie wstała przy budżecie 0.80, 0.85 ani 0.93
14

vLLM wypisuje klucz API otwartym tekstem

W logu startowym, w linii non-default args, stoi 'api_key': [...]. Kto czyta dziennik, ma klucz. Przed udostępnieniem logów albo maszyny — wymień klucz.

15

Stary host dusi kartę tylko przy eager

Ta sama 3090 na DDR3 i na DDR4: przy --enforce-eager różnica 35 %, po włączeniu grafów 12 %. Nie wymieniaj płyty ani pamięci, zanim nie sprawdzisz konfiguracji silnika.

Moc, zegar, zasilacz

16

Sam power limit to piła. Zablokuj zegar.

Przy samym limicie 180 W karta boostuje, uderza w sufit i jest dławiona. Blokada na 1500 MHz: 6,8 → 8,0 tok/s, mimo niższego zegara. Znika też część szpilek poboru, na które limit mocy nie reaguje.

nvidia-smi -pl 180
nvidia-smi -lgc 1500,1500
17

Podnoszenie limitu pomaga tylko, gdy karta na nim stoi

180 → 220 W dało +45 % generowania, ale dopiero po włączeniu grafów. Przy eager zmiana limitu nic nie robiła, bo karta i tak nie dochodziła do 180 W.

18

Stara stacja robocza + 3090 = zabezpieczenie nadprądowe

Na 250 W w starej obudowie HP wyzwoliło się OCP zasilacza przy jednoczesnym obciążeniu CPU i GPU. Maszyna po prostu gaśnie, bez logów. Sam limit mocy ogranicza średnią w oknie milisekund, a nie mikrosekundowe szpilki przy batchingu — to one wywalają OCP. Na innej takiej maszynie padało już przy 200 W. Limit mocy to cecha zasilacza obudowy, nie karty — podnoś po 20 W.

Cztery karty RTX 3090 (Z820)

19

MTP na czterech kartach: +38 % dla jednego, +4–6 % dla wielu

--speculative-config '{"method": "mtp", "num_speculative_tokens": 2}' na Qwen3.8-27B w BF16, tensor-parallel 4: generowanie jednego użytkownika 40,3 → 55,5 tok/s. Przy trzech i ośmiu osobach zysk topnieje do 4–6 % (79,6 → 82,4 i 140,0 → 148,9 tok/s łącznie), bo karty i tak liczą pełnym wsadem. Akceptacja szkicu w godzinnym teście: 73 % — 82 % na pierwszej pozycji, 64 % na drugiej.

20

--disable-custom-all-reduce na czterech kartach PCIe nic nie zmienia

vLLM przy starcie wypisuje: Custom allreduce is disabled because it's not supported on more than two PCIe-only GPUs. Bez NVLinka, przy więcej niż dwóch kartach, custom all-reduce jest wyłączony zawsze. Porównaliśmy „z flagą” i „bez flagi” i przy ośmiu użytkownikach wyszło 136 wobec 162 tok/s — to był jeden słaby przebieg na cztery, nie efekt flagi. Zanim przypiszesz różnicę zmianie, sprawdź w logu silnika, czy zmiana w ogóle zadziałała.

21

Godzina pełnego obciążenia: stabilnie. Wąskie gardło — pula KV

Ośmiu użytkowników przez 60 minut, każdy co rundę wkleja długi dokument, rozmowy do 50 tys. tokenów: 215 rund, zero błędów, zero restartów, zero Xid/AER, karty na limicie 220 W, najgorętsza 81 °C. Ale cache prefiksu trafiał tylko w 40 % — ośmiu rozmówców po ~50 tys. tokenów to prawie cała pula KV (431 tys. w BF16), więc bloki jednej rozmowy są wypychane przez zapytania innych, zanim ten sam użytkownik wróci. vLLM czyta wtedy całą rozmowę od nowa (~2 200 tok/s na czterech kartach) i czas do pierwszego tokenu rośnie do ~33 s. Dźwignią jest KV w fp8 — dwa razy większa pula kosztem jakości.

Qwen3.8-Flash-Next 177B na czterech RTX 3090 (od 04.10.2026)

Ta sama maszyna Z820, nowy model. Flash-Next ma 125 mld parametrów głównych, 51 mld w tablicy n-gramów i głowicę MTP. Warstwy ekspertów mają po 512 ekspertów, z których na token pracuje 10 plus jeden wspólny — razem ok. 6 mld aktywnych parametrów. Trzy warstwy na cztery to Gated DeltaNet z pamięcią o stałym rozmiarze, co czwarta to Qwen Sparse Attention, która czyta tylko wybrane bloki tekstu. Natywnie 262 144 tokeny.

F1

Oficjalny checkpoint FP8 na 3090 nie ruszy

Ampere (sm86) nie ma sprzętowego FP8. Oficjalny vLLM obsługuje ten model od wersji 0.30.0 (22.09.2026), ale na 3090 tylko z pamięcią rozmów (KV) w 16 bitach — wtedy pula wychodzi ok. 400 tys. tokenów. Drogą jest kwantyzacja INT4 W4A16 liczona jądrami Marlin plus łatki społeczności, które dodają odczyt KV w fp8 dla rzadkiej uwagi na sm86. Efekt: pula 806 792 tokeny, czyli trzy pełne sesje po 262 tys. albo pięć po ~160 tys. naraz.

F2

Łatki społeczności: najpierw audyt, potem własna kompilacja

Łatki to 58 commitów od autora z kontem założonym w lipcu 2026 — dlatego zanim cokolwiek trafiło na serwer, pięciu agentów równolegle przeczytało 15,5 tys. linii kodu, który działa w produkcji: jądra CUDA, transport tablicy n-gramów, telemetrię, silnik oraz skrypty i 196 zależności. Wynik: żadnej komunikacji z siecią, żadnego czytania kluczy, żadnego zapisu treści promptów. Sprawdziliśmy też, że paczka to dokładnie oficjalny v0.30.0 plus te commity (zgodny hash drzewa). Dwa moduły CUDA kompilujemy sami (18 min), resztę bierzemy z oficjalnego pakietu vLLM z PyPI — gotowych binarek autora nie używamy. Jego skrypty instalacyjne tworzyły uprzywilejowany kontener i wystawiały API bez klucza, więc też poszły w odstawkę.

F3

Oficjalny vLLM ma tu lukę między użytkownikami, łatka ją zamyka

Bufor pierścieniowy rzadkiej uwagi nie jest zerowany, gdy blok pamięci trafia do nowego zapytania — w oficjalnym v0.30.0 nowe zapytanie mogło więc teoretycznie natrafić na bajty poprzedniego. Łatka dopisuje do każdego wiersza znacznik pozycji i odrzuca wiersze, które do zapytania nie należą. Działa to tylko przy tzw. fused pre-indexerze — z konfiguracji modelu sprawdziliśmy, że używają go wszystkie warstwy. Kod od społeczności bywa bezpieczniejszy od oficjalnego — ale trzeba to sprawdzić, a nie założyć.

F4

Tablica n-gramów: 48 GB w RAM, jedna kopia

51 mld parametrów tablicy n-gramów nie musi siedzieć w VRAM — na token czyta się z niej kilka wierszy. Oficjalny vLLM trzyma osobną kopię dla każdej karty (4 × 48 GB), łatka obsługuje ją w osobnym procesie, w jednej kopii (~50 GB z 256 GB RAM). Ten proces rozmawia z resztą przez gniazdo uniksowe z pickle, więc usługa dostaje prywatny katalog 0700, umask 077 i sprzątanie /dev/shm przy każdym starcie — po awarii zostają tam tokeny ostatniego zapytania.

F5

TP=2 × PP=2 zamiast TP=4

Dwie pary kart w potoku z równoległością ekspertów, każda karta ~22,5 GB z 24. Pierwszy start trwa ok. 12 minut — ładowanie 115 GiB wag i kompilacja grafów CUDA. MTP z trzema tokenami szkicu, rozumowanie domyślnie w trybie „low”, a klucz API, wyłączona telemetria vLLM i automatyczny restart są w usłudze systemd, nie w skrypcie autora.

F6

Pierwsze przejście przy nowym rozmiarze wsadu jest wolniejsze

Przy trzech osobach pierwsza powtórka dała 118 tok/s, druga 189; przy pięciu 155 i 239. FlashInfer kompiluje jądra przy pierwszym napotkanym rozmiarze wsadu. W tabelach podajemy drugą powtórkę. Mierz zawsze co najmniej dwa razy i nie bierz pierwszego przebiegu po starcie za wynik.

F7

Długi kontekst nie spowalnia generowania

Przy dokumencie 47 tys. tokenów Flash-Next generuje 134 tok/s, przy 189 tys. — 140 tok/s. Qwen3.8-27B na tych samych kartach spada z 59 do 26, a potem do 9 tok/s. Czekanie na pierwszy token nadal rośnie z długością dokumentu (15 s → 64 s), bo tekst trzeba przeczytać — ale czyta go 2–2,5 raza szybciej niż 27B.

F8

Godzina pod ośmioma użytkownikami

Ten sam stresstest co dla 27B, z sufitem rozmów podniesionym do 95 tys.: 62 minuty, 339 rund, rozmowy do 107 tys. tokenów, zero błędów, zero restartów, zero Xid/AER, karty na 220 W, najgorętsza 79 °C. Przy tej samej długości rozmowy Flash-Next generuje 2–2,7 raza szybciej (45–60 tys.: 2,9 → 7,4 tok/s), ale liczby bezwzględne nadal są niskie: długie prompty ośmiu osób zjadają moc, którą karty dałyby na generowanie, a PCIe Gen3 bez NVLinka dokłada swoje.

F9

Czego jeszcze nie wiemy

Jak bardzo 4 bity szkodzą jakości odpowiedzi względem 27B w pełnej precyzji — porównanie dokładności jest w toku. Skale KV fp8 pochodzą od autora łatek; jeśli będziemy kalibrować sami, to tylko na korpusie bez danych klientów.

Skąd się wziął Flash-Next — krótka historia pomysłów

Flash-Next nie jest jednym wynalazkiem, tylko złożeniem kilku idei z ostatnich trzech lat. Każda z nich rozwiązuje inny problem: jak mieć dużo wiedzy bez dużego liczenia, jak czytać długi tekst bez spowalniania i co trzymać w drogiej pamięci karty, a co w taniej pamięci komputera.

KiedyCoCo z tego wynikło
12.2023Mixtral 8×7B (Mistral)Mieszanka ekspertów w otwartym modelu: dużo parametrów, mało liczenia na token.
12.2023MambaWarstwy z pamięcią o stałym rozmiarze zamiast uwagi, której koszt rośnie z długością tekstu.
2024DeepSeek-V2 i V3Wielu drobnych ekspertów plus ekspert wspólny; w V3 przewidywanie kilku tokenów naraz (MTP), które dziś przyspiesza generowanie.
2024–2025DeltaNet → Gated DeltaNetLiniowa uwaga, która potrafi nadpisywać i wygaszać pamięć — dużo lepsza w wyszukiwaniu w tekście niż wcześniejsze warianty.
2025Gemma 3n (Google)Osadzenia per warstwa trzymane poza akceleratorem — wzorzec dla tablicy n-gramów w RAM.
09.2025Qwen3-Next 80B-A3BPierwszy hybrydowy Qwen: trzy warstwy Gated DeltaNet na jedną warstwę pełnej uwagi, 512 ekspertów, MTP.
09.2025DeepSeek-V3.2-ExpRzadka uwaga z lekkim indekserem, który wybiera, które fragmenty tekstu w ogóle czytać.
2026Qwen3.8-Flash-NextWszystko naraz: hybryda 3:1, rzadka uwaga QSA w co czwartej warstwie, 51 mld parametrów w tablicy n-gramów, MTP. 177 mld parametrów, ok. 6 mld aktywnych.
31.08.2026vLLMObsługa modelu w głównej gałęzi; wydanie v0.30.0 — 22.09.2026. Na Ampere z KV w fp8 — tylko z łatkami społeczności.

Nasza historia na Z820

KiedyCoJeden użytkownikOśmiu — łącznie
08.2026Twarde resety pod obciążeniem: jedna karta w gnieździe na chipsecie, inna z łączem x2 zamiast x8 przez riser. Naprawione przełożeniem kart.——
25.09.2026Qwen3.8-27B BF16, bez MTP → z MTP (2 tokeny)40,3 → 55,5 tok/s140,0 → 148,9 tok/s
04.10.2026Qwen3.8-Flash-Next 177B INT4, KV fp8, MTP (3 tokeny)120,6 tok/s290,7 tok/s
Ten sam sprzęt za 18 000 zł w ciągu dziesięciu dni: generowanie dla jednej osoby ×2,2, przepustowość dla ośmiu ×2, pamięć rozmów ×1,9 — wyłącznie przez oprogramowanie i wybór modelu.

Arc Pro B70 — od 26.09.2026 na vLLM

Do 25 września 2026 roku B70 pracował u nas na llama.cpp SYCL — na Intelu to przez długi czas była jedyna droga, która działała stabilnie. Na vLLM dla kart Arc Pro czekaliśmy, aż dojrzeje: Intel wydaje go w projekcie llm-scaler, obsługę MTP dla Qwen 27B dodał w wersji z 4 sierpnia 2026, a wersję intel/llm-scaler-vllm:0.26.0-b2 z poprawkami cache prefiksu i współbieżności — 9 września. Do tego społeczność opublikowała kwantyzację GPTQ int4 Qwen3.8-27B z zachowaną wizją i warstwą MTP. 25.09.2026 zmierzyliśmy vLLM na tej samej karcie, a 26.09.2026 przełączyliśmy na niego model. Klienci nie zauważyli zmiany — wszyscy łączą się przez bramę API pod stałą nazwą modelu, więc backend podmienia się w jednym miejscu.

Te same testy, ta sama karta, ten sam limit 250 W, prompt 2 849 tokenów, 600 tokenów odpowiedzi:

llama.cpp SYCL
(do 26.09)
vLLM XPU
bez grafów
vLLM XPU
grafy + cache — teraz
1 użytkownik — generowanie20,1 tok/s11,8 tok/s32,8 tok/s
1 użytkownik — łącznie z promptem17,8 tok/s11,5 tok/s30,3 tok/s
Czas do 1. tokenu / czytanie promptu3,9 s / 735 tok/s1,4 s / 1 975 tok/s1,5 s / 1 917 tok/s
3 użytkowników — łącznie26,7 tok/s36,8 tok/s75,5 tok/s
8 użytkowników — łącznie— (3 sloty)84,3 tok/s144,3 tok/s
Generowanie przy 15k / 60k / 120k kontekstu17,8 / 12,0 / 8,412,1 / 12,0 / 12,031,5 / 28,0 / 24,5
Czytanie promptu przy 15k / 60k / 120k937 / 814 / 6931 789 / 1 273 / 9181 739 / 1 273 / 919
Powrót do rozmowy (cache prefiksu)1,5–2,6 s8–131 s (brak cache)0,5–1,2 s
Stress: 2 osoby × 30 min, do 122k40 rund, 0 błędów—49 rund, 0 błędów
Stress: 8 osób × 60 min, do 61k——160 rund, 0 błędów
Kwantyzacja / cache KVGGUF UD-Q4_K_M / q8_0GPTQ int4 / fp8GPTQ int4 / fp8
Kontekst3 × 131 072131 072131 072 na rozmowę, pula wspólna
Przy ośmiu użytkownikach jedna B70 na vLLM (144,3 tok/s) dorównuje czterem RTX 3090 na Z820 (148,9 tok/s) — i ma najlepszą wydajność na wat ze wszystkich maszyn w benchmarku przy trzech użytkownikach.
22

Przykłady Intela mają --enforce-eager — kosztuje ×2,8

Wszystkie przepisy w dokumentacji llm-scaler uruchamiają vLLM z --enforce-eager. Z nim jeden użytkownik dostaje 11,8 tok/s — wolniej niż na llama.cpp. Grafy XPU włącza zmienna VLLM_XPU_ENABLE_XPU_GRAPH=1 (bez --enforce-eager): 32,8 tok/s. Kompilacja grafu przy pierwszym starcie trwa ~150 s — trzymaj cache kompilacji na trwałym dysku, to ten sam błąd co --enforce-eager na 3090 (punkt wyżej), tylko w innej zmiennej.

23

Model hybrydowy: cache prefiksu tylko z jawnym --enable-prefix-caching

Qwen3.8 to model hybrydowy (warstwy Gated DeltaNet + attention). W tej wersji vLLM bez jawnego --enable-prefix-caching cache prefiksu jest wyłączony — powrót do rozmowy na 120 tys. tokenów oznaczał 131 s czytania od nowa. Z flagą vLLM przechodzi w tryb mamba_cache_mode 'align' (oznaczony jako eksperymentalny) i powrót trwa 0,5–1,2 s.

24

Grafy XPU leżą poza --gpu-memory-utilization

Budżet pamięci vLLM obejmuje wagi i cache KV, a grafy XPU (2,84 GiB) dochodzą ponad niego. Zajętość rośnie jeszcze w trakcie pracy, gdy pula KV się zapełnia i przy pierwszym obrazie. Przy 0.90 po długim kontekście karta miała zajęte 31,78 z 31,89 GiB. Stąd niższy budżet niż na NVIDII (tam 0.94) — i powód jest poważniejszy niż wydajność:

25

Za mało VRAM = staje cały host, nie tylko kontener

Gdy na B70 kończy się VRAM, sterownik xe (TTM) wypycha bufory karty do RAM-u hosta, zamiast zwrócić błąd alokacji. To pamięć jądra — limit RAM-u kontenera jej nie obejmuje. U nas 16 GB hosta zniknęło w minutę: [TTM] Buffer eviction failed, globalny OOM, host bez SSH przez 23 minuty. Zmiany, które dokładają VRAM, sprawdzaj od bezpiecznej wartości w górę, z zapasem ≥ 1 GiB po pierwszym obrazie (bufor wizji alokuje się dopiero wtedy, +0,5 GiB), i ze strażnikiem, który zabije serwer przy pierwszym wpisie TTM w dmesg.

26

MTP w vLLM: +50 % dla jednego, pad przy ośmiu

Spekulacja MTP (qwen3_5_mtp, 2 tokeny) dała jednemu użytkownikowi ~51 tok/s generowania. Ale dokłada ~0,8 GiB wag i powiększa grafy z 2,8 do 4,75 GiB — przy budżecie 0.90 karta była pełna już po starcie (31,84 GiB). Przy trzech osobach jeden przebieg zawisł na 31 s, przy ośmiu VRAM się przepełnił. Na serwerze dla wielu osób — bez MTP. Wariant dla ≤ 5 osób z niższym budżetem sprawdzimy osobno.

27

Pełna pula KV = wywłaszczenia

Przy ośmiu osobach wklejających po ~50 stron co rundę pula KV (191 tys. tokenów) się przepełnia i vLLM odkłada zapytania, licząc je potem od nowa — mediana czasu do pierwszego tokenu 92 s, pojedyncze do 4,5 minuty. Zero błędów, ale przy takim ruchu to czuć. Z820 z pulą 431 tys. w tym samym teście nie wywłaszczał ani razu. Kontekst jednej rozmowy (131 072) od budżetu nie zależy — budżet decyduje, ile długich rozmów zmieści się naraz.

Arc Pro B70 — historia na llama.cpp SYCL (do 26.09.2026)

28

Przypnij wersję oneAPI

Build llama.cpp SYCL jest wrażliwy na wersję oneAPI i runtime'u. Aktualizacja „przy okazji” potrafi zepsuć działający stack. Blokujemy wersje pakietów i aktualizujemy świadomie.

29

--parallel dzieli kontekst

W llama.cpp -c to kontekst całkowity, dzielony na sloty. -c 393216 --parallel 3 daje 3 × 131 072, a nie 3 × 393 216. KV w q8_0: 262k kontekstu ≈ 11,5 GiB ponad wagi.

30

Co zadziałało: większy wsad

-b 4096 -ub 1024 zamiast domyślnych 2048/512: czytanie promptu 579 → 716 tok/s (+24 %), czas do pierwszego tokenu −19 %. Generowanie bez zmian — i tak ma być.

31

Co nie zadziałało: --spec-type ngram-cache

Serwer wstaje w 150 s i pada przy pierwszym zapytaniu. Sześć prób, zawsze „connection refused”, dziennik pusty. Pozostałe warianty n-gramowe czekają na sprawdzenie.

32

Limit mocy B70 — nie ma czego podnosić

Pod obciążeniem 237 W przy limicie 250 W. Podniesienie do 275 W: +0,2 % dla jednego użytkownika, +4 % dla trzech. Za 20 W i głośniejszy wentylator — nie warto.

33

Cache promptów w RAM: domyślnie 8 GiB

Nowsze llama.cpp trzyma zapisane rozmowy w RAM-ie hosta — --cache-ram, domyślnie 8192 MiB. Stan jednej rozmowy na ~120 tys. tokenów z KV q8_0 to u nas 5,9 GB. Kontener z 8 GB RAM-u padał na tym po 13 minutach stress testu (OOM killer), a przy mniejszym kontekście zawisał na 20 minut w swapie. Poprawka: --cache-ram poniżej limitu pamięci kontenera (u nas 2048). Po zmianie: 30 minut, dwóch użytkowników, rozmowy do 122 tys. tokenów — bez restartu, RAM maks. 5,3 GB.

34

Spekulacja MTP w llama.cpp: +34 % dla jednego, −46 % dla trzech

GGUF Qwen3.8-27B ma warstwę MTP (blk.64.nextn.*), a llama.cpp ma --spec-type draft-mtp. Jeden użytkownik: 20,1 → 26,9 tok/s. Trzech naraz: 26,7 → 14,3 tok/s łącznie — szkic liczony jest osobno dla każdego slotu. Do tego +2,6 GiB VRAM. Na serwerze dla kilku osób — nie.

35

Długi kontekst: generowanie z 20 do 8,4 tok/s

Czysty pomiar, jeden użytkownik, nikt inny na serwerze: przy 15 / 60 / 120 tys. tokenów kontekstu generowanie 17,8 / 12,0 / 8,4 tok/s, czytanie promptu 937 / 814 / 693 tok/s. Powrót do tej samej rozmowy z cache — 1,5–2,6 s do pierwszego tokenu. Szybka ścieżka flash attention dla Battlemage (llama.cpp PR #25222) działa tylko przy KV f16 i jednej sekwencji: KV f16 dało u nas +16 % generowania przy 60 tys., ale kosztuje połowę kontekstu.

Pułapki pomiaru — tu straciliśmy najwięcej czasu

36

Skrypt nie widział tokenów i mierzył szum

Liczyliśmy tokeny po polu reasoning_content, a vLLM 0.20.1 wysyła reasoning. Zero rozpoznanych tokenów, TTFT równy całej odpowiedzi, „6,66 tok/s” zamiast prawdziwych 8,4. Zawsze wypisz, ile kawałków strumienia niesie treść. Zero = mierzysz szum.

37

max() z powtórzeń odwraca ranking

Rozrzut sięgał 18 % (45,5 i 54,5 tok/s w tej samej konfiguracji). Najlepszy przebieg zamiast średniej potrafił postawić słabszą maszynę przed mocniejszą. Zawsze średnia, zawsze z rozrzutem.

38

nvidia-smi mierzy nie tę kartę

W maszynie z B70 i RTX 3060 skrypt raportował 15 W i 210 MHz — bezczynną 3060. Telemetria Intela jest w /sys/class/hwmon/*/ z name = xe: energy1_input (µJ), power1_cap, temp*_input.

39

Tło, prompt i nieoddany VRAM

  • Inny prompt (1 344 vs 2 849 tok.) = liczby nie leżą na jednej skali
  • Reranker czy ollama w tle na jednej z maszyn psują porównanie przy wielu użytkownikach
  • Po restarcie silnika poprzedni proces jeszcze trzyma VRAM — „brak pamięci” przy ustawieniu, które przed chwilą działało. Czekaj na spadek memory.used
40

Zawis to nie restart

Skrypt porównywał licznik restartów usługi przed i po teście. Serwer 20 minut wisiał w swapie, ale się nie zrestartował — więc „przetrwał cały test”, a dwie ostatnie rundy wróciły puste (0 tokenów, 1 187 s do pierwszego tokenu) zamiast z błędem. Sprawdzaj liczbę tokenów w odpowiedzi, czas do pierwszego tokenu i zdarzenia OOM w cgroupie, nie tylko restarty.

41

„Prędkość generowania” w stress teście to głównie czekanie

Gdy jeden użytkownik wkleja 15 tys. tokenów, jego prompt idzie w tych samych krokach co generowanie drugiego — ten dostaje token co kilka sekund. Stąd „4 tok/s” przy dwóch osobach na B70 i 2,4–3,2 tok/s przy ośmiu na Z820. To nie jest spowolnienie od długiego kontekstu — do tego potrzebny jest osobny pomiar jednego użytkownika.

42

Licznik energii czytany raz na pół godziny

Średnia moc z różnicy licznika na początku i na końcu 30-minutowego testu wyszła 93 W, a próbkowanie co sekundę w trakcie dawało 242 W. Czytaj licznik często i sumuj przyrosty.

Hugging Face: która kwantyzacja w ogóle ruszy

43

Nowy format ≠ szybciej na starym krzemie

Format / repoWerdykt dla RTX 3090 (Ampere) i Arc B70
NVFP4 (unsloth/…-NVFP4 i in.)tylko Blackwell (RTX 50xx) — odpada
FP8 (Qwen/…-FP8)Ada lub Hopper — na Ampere odpada
NVFP4-MTP-GGUFma głowicę MTP, ale NVFP4 — dla Intela bezużyteczny
MLXformat Apple Silicon
int4 AutoRound / AWQ-INT4działa na 3090 (ścieżka Marlin) — tego używamy
GGUF UD-Q4_K_M / ggml-orgdziała na B70 przez llama.cpp SYCL (do 26.09 nasz wybór)
GPTQ int4 + MTP (SergiioB/Qwen3.8-27B-GPTQ-Int4-sym-G128-MTP-BF16)działa na B70 przez vLLM XPU (intel/llm-scaler-vllm), wizja w komplecie — tego używamy od 26.09

Na 3090 żaden nowy format nie pomoże. Na B70 pomógł nie format, tylko silnik — ten sam model w GPTQ int4 pod vLLM XPU jest 1,6–2,9× szybszy niż GGUF pod llama.cpp. Zanim pobierzesz 20 GB, sprawdź, czy Twoja architektura w ogóle go obsługuje.

Masz inną pułapkę albo lepsze liczby? Wyniki i konfiguracje trzymamy też na Hugging Face i GitHubie jako local-ai-company. Chcesz to samo bez tracenia weekendu — umów konsultację.
Stan na 2026-09-26vLLM 0.20.1 (CUDA) · vLLM 0.26 XPU (Intel)Qwen3.8-27B
Strona główna Stack Warto wiedzieć Firmowy RAG Benchmark Umów konsultację © 2026 BASIC ECONOMY sp. z o.o.