Testy wydajności LLM na 16 GB VRAM z llama.cpp (prędkość i kontekst)

Szybkość generowania tokenów llama.cpp na VRAM 16 GB (tabele).

Page content

Oto porównuję szybkość kilku modeli LLM działających na GPU z 16 GB pamięci VRAM i wybieram najlepszy z nich do samodzielnego hostingu.

Uruchamiałem te modele LLM w llama.cpp z oknami kontekstowymi o rozmiarze 19K, 32K i 64K tokenów.

Stylizowany GPU z blokami VRAM i wykresami w stylu testów wydajności

W tym poście zapisuję swoje próby wycisnięcia z sprzętu możliwie jak najlepszej wydajności pod względem szybkości.

Tabela porównawcza szybkości LLM (tokeny na sekundę i VRAM)

Model Size 19K VRAM 19K GPU/CPU 19K T/s 32K VRAM 32K Load 32K T/s 64K VRAM 64K Load 64K: T/s
Qwen3.6-35B-A3B-UD-IQ3_XXS 13.2 13.8GB 96%/100% 147.5 14.0GB 96%/101% 149.1 14.7GB 96%/101% 145.8
Qwen3.6-35B-A3B-UD-IQ4_XS 17.7 14.3GB 62%/266% 95.0 14.9GB 58%/279% 92.3 14.9GB 57%/293% 86.4
Qwen3.5-35B-A3B-UD-IQ3_S 13.6 14.3GB 93%/100% 136.4 14.6GB 93%/100% 138.5 14.9GB 88%/115% 136.8
Qwen3.5-27B-IQ3_XXS-bartowsky 11.3 12.8 98/100 44.9 13.5 98/100 44.9 14.5 45/415 23.6
Qwen3.5-27B-UD-IQ3_XXS 11.5 12.9 98/100 45.3 13.7 98/100 45.1 14.7 45/410 22.7
Qwen3.5-27B-IQ4_XS.gguf 15.0 14.6 49/406 20.5 14.7 37/465 17.4 14.7 23/533 13.3
Qwen3.5-122B-A10B-UD-IQ3_XXS 44.7 14.7 30/470 22.3 14.7 30/480 21.8 14.7 28/490 21.5
Qwen3.5-122B-A10B-UD-IQ3_S 46.5 14.7 25/516 19.4 14.7 24/516 19.5 14.7 24/516 19.6
Mistral-Small-4-119B UD-IQ3_XXS 42.8 14.8 28/585 30.4 14.7 27/574 28.5 14.9 20/590 31.5
Qwen3-Coder-Next-UD-IQ4_XS 38.4 14.6 32/460 41.1 14.7 29/440 41.3 14.8 32/460 38.3
Nemotron Super 120b IQ3_XXS 56.2 15.0 26/517 17.5 14.6 26/531 17.4 14.6 26/535 17.6
gemma-4-26B-A4B-it-UD-IQ4_XS 13.4 14.7 95/100 121.7 14.9 95/115 114.9 14.9 75/190 96.1
gemma-4-31B-it-UD-IQ3_XXS 11.8 14.8 68/287 29.2 14.8 41/480 18.4 14.8 18/634 8.1
GLM-4.7-Flash-IQ4_XS 16.3 15.0 66/240 91.8 14.9 62/262 86.1 14.9 53/313 72.5
GLM-4.7-Flash-REAP-23B IQ4_XS 12.6 13.7 92/100 122.0 14.4 95/102 123.2 14.9 71/196 97.1

19K, 32K i 64K to rozmiary okna kontekstowego.

Pojęcie load powyżej oznacza wykorzystanie GPU. Jeśli widzisz niską wartość w tej kolumnie, oznacza to, że model działa głównie na procesorze CPU i nie jest w stanie osiągnąć zadowalającej prędkości na tym sprzęcie. Taki wzorzec odpowiada temu, co użytkownicy obserwują, gdy zbyt mała część modelu mieści się na GPU lub gdy kontekst powoduje przemieszczenie obliczeń na procesor hosta.

O llama.cpp, wydajności LLM, OpenCode i innych porównaniach

Jeśli chcesz poznać ścieżki instalacji, przykłady użycia llama-cli i llama-server oraz parametry wpływające na zużycie VRAM i liczbę tokenów na sekundę (rozmiar kontekstu, partycjonowanie, -ngl), zacznij od artykułu Szybki start z llama.cpp: CLI i serwer.

Aby uzyskać szerszy obraz wydajności (przepustowość względem opóźnień, limity VRAM, równoległe żądania oraz sposób łączenia wyników testów wydajnościowych na różnych sprzętach i środowiskach wykonawczych), zobacz artykuł Wydajność LLM w 2026: Testy wydajności, wąskie gardła i optymalizacja.

Jakość odpowiedzi analizowana jest w innych artykułach, na przykład:

Przeprowadziłem podobny test dla LLM na Ollama: Najlepsze LLM dla Ollama na GPU z 16GB VRAM.

Jeśli uruchamiasz Qwen 3.6 27B lub 35B przez llama.cpp i chcesz zwiększyć szybkość generowania, zobacz Qwen 3.6 MTP vs Standardowe dekodowanie na GPU 16GB — speculacyjne dekodowanie MTP zwiększa przepustowość generowania o do 67% dla gęstego modelu 27B, z tabelami pokazującymi koszt VRAM i kompromisy związane z oknem kontekstowym na każdym poziomie --spec-draft-n-max.

Dlaczego długość kontekstu zmienia liczbę tokenów na sekundę

Przechodząc od 19K do 32K lub 64K tokenów, cache KV rośnie, a presja na pamięć VRAM wzrasta. W niektórych wierszach obserwujemy duży spadek liczby tokenów na sekundę przy 64K, podczas gdy w innych pozostaje ona bez zmian. Jest to sygnał, by ponownie rozważyć kwantyzację, limity kontekstu lub offloading warstw, zamiast zakładać, że model jest ogólnie „wolny”. Aby poznać kalkulacje budżetowe stojące za tymi liczbami — dokładny wzór na bity KV na token, tabele typów cache dla 32K/64K/128K oraz sposób obliczenia własnego zapasu pamięci — zobacz Cache KV na GPU 16 GB: Jak naprawdę pomieścić długi kontekst.

Modele i kwantyzacje, które wybrałem do testów, służą do samodzielnego sprawdzenia, czy dają dobre zyski w sensie stosunku kosztów do korzyści na tym sprzęcie. Dlatego nie ma tu kwantyzacji q8 z kontekstem 200k :) …

GPU/CPU to obciążenie, mierzone za pomocą nvitop.

llama.cpp przy automatycznej konfiguracji zrzucania warstw na GPU stara się utrzymać 1 GB wolnej pamięci. Parametr ten możemy ręcznie określić za pomocą argumentu wiersza poleceń -ngl, ale nie stroję go tu szczegółowo, chcę jedynie zrozumieć, że jeśli występuje znaczący spadek wydajności przy zwiększaniu okna kontekstowego z 32k do 64k - możemy spróbować zwiększyć szybkość przy 64k poprzez dostrojenie liczby zrzucanych warstw.

Sprzęt testowy i konfiguracja llama.cpp

Testowałem szybkość LLM na komputerze PC o następującej konfiguracji:

  • CPU i-14700
  • RAM 64GB 6000Hz (2x32GB)
  • GPU RTX-4080
  • Ubuntu z sterownikami NVidia
  • llama.cpp/llama-cli, bez określonych warstw zrzucanych na CPU
  • Początkowe zużycie VRAM, przed uruchomieniem llama-cli: 300MB

Dodatkowe uruchomienia z kontekstem 128K (Qwen3.5 27B i 122B)

Model 128K Load 128K: T/s
Qwen3.5-27B-UD-IQ3_XXS 16/625 9.6
Qwen3.5-122B-A10B-UD-IQ3_XXS 27/496 19.2

Uruchomienia zoptymalizowane

Dla niektórych interesujących modeli i kwantyzacji starałem się znaleźć specjalne parametry wiersza poleceń llama.cpp, aby lepiej wykorzystywać pamięć VRAM. Oto, co mi się udało osiągnąć:

Model Context Layers on GPU CPU/CPU load Speed
Qwen3.5-27B-IQ4_XS.gguf 18k 65 98%/100% 38.0
Qwen3.5-27B-IQ4_XS.gguf 64k 53 33%/488% 15.7

Wnioski dla konfiguracji z 16 GB VRAM

  • Mój obecny ulubieniec Qwen3.5-27B-UD-IQ3_XXS wygląda dobrze w swoim optymalnym zakresie 50k kontekstu (osiągam ok. 36 tokenów/s).
  • Qwen3.5-122B-A10B-UD-IQ3_XXS wyprzedza pod względem wydajności Qwen3.5 27B przy kontekstach powyżej 64K.
  • Mogę skłonić Qwen3.5-35B-A3B-UD-IQ3_S do obsługi kontekstu 100k tokenów i mieści się on w pamięci VRAM, więc nie ma spadku wydajności.
  • Nie będę używać gemma-4-31B na 16GB VRAM, ale gemma-4-26B może być średnio-dobry…, trzeba przetestować.
  • Muszę przetestować, jak dobrze działają Nemotron cascade 2 i GLM-4.7 Flash REAP 23B. Czy będą lepsze niż Qwen3.5-35B q3? Podejrzewam, że nie, ale mimo wszystko warto to sprawdzić, by potwierdzić podejrzenie.
  • Aby dowiedzieć się, dlaczego zakres 25–34B to domyślny wybór w 2026 roku, gdy masz 24 GB, oraz dlaczego Q4 Qwen3.8-27B nie nadaje się naprawdę na tę kartę 16 GB, zobacz Sprawna granica modeli otwartych w 2026.

Subskrybuj

Otrzymuj nowe wpisy o systemach, infrastrukturze i inżynierii AI.