Testy wydajności LLM z 16 GB VRAM przy użyciu llama.cpp (prędkość i kontekst)
Prędkość tokenów llama.cpp przy 16 GB VRAM (tabele).
Porównuję tutaj szybkość kilku modeli LLM działających na GPU z 16 GB VRAM, wybierając najlepszy do hostowania własnego.
Uruchniałem te modele LLM w ramach llama.cpp z oknami kontekstu o długości 19K, 32K i 64K tokenów.

W tym poście dokumentuję moje próby wydobywania jak największej wydajności pod kątem 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.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-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-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 |
| nvidia Nemotron-Cascade-2-30B IQ4_XS | 18.2 | 14.6 | 60/305 | 115.8 | 14.7 | 57/311 | 113.6 | 14.7 | 55/324 | 103.4 |
| 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 kontekstu.
Powyższy parametr load to Obciążenie GPU.
Jeśli widzisz niską liczbę w tej kolumnie, oznacza to, że model działa głównie na CPU i nie osiąga na tym sprzęcie żadnej godnej uwagi szybkości. Ten wzorzec jest zgodny z tym, co obserwują użytkownicy, gdy zbyt mała część modelu zmieści się na GPU lub gdy kontekst zmusza do przenoszenia pracy z powrotem na hosta.
O llama.cpp, wydajności LLM, OpenCode i innych porównaniach
Jeśli chcesz uzyskać ścieżki instalacji, przykłady llama-cli i llama-server, a także flagi istotne dla VRAM i liczby tokenów na sekundę (rozmiar kontekstu, grupowanie, -ngl), zacznij od Szybki start llama.cpp z CLI i serwerem.
Aby uzyskać szerszy obraz wydajności (przepustowość vs opóźnienia, limity VRAM, równoległe żądania oraz jak benchmarky łączą się w zależności od sprzętu i środowisk uruchomieniowych), zobacz Wydajność LLM w 2026: Benchmarki, wąskie gardła i optymalizacja.
Jakość odpowiedzi analizowana jest w innych artykułach, na przykład:
- Najlepsze LLM do OpenCode – testy lokalne. Więcej o OpenCode możesz przeczytać w Szybki start OpenCode: Instalacja, konfiguracja i użycie terminalowego agenta AI do kodowania.
- Porównanie jakości tłumaczenia stron Hugo – LLM na Ollama
Przeprowadziłem podobny test dla LLM na Ollama: Najlepsze LLM dla Ollama na GPU z 16 GB VRAM.
Dlaczego długość kontekstu zmienia liczbę tokenów na sekundę
Przy przejściu od 19K do 32K lub 64K tokenów rośnie pamięć podręczna KV, a presja na VRAM się zwiększa. Niektóre wiersze pokazują duży spadek liczby tokenów na sekundę przy 64K, podczas gdy inne pozostają płaskie – to sygnał, że należy ponownie przemyśleć kwantyzację, limity kontekstu lub offload warstw, zamiast zakładać, że model jest ogólnie „wolny".
Modele i kwantyzacje, które wybrałem do testów, mają na celu sprawdzenie, czy dają dobry zysk pod względem kosztu i korzyści na tym sprzęcie, czy nie. Więc tu nie ma kwantyzacji q8 z kontekstem 200k :) …
GPU/CPU to obciążenie, mierzone przez nvitop.
llama.cpp przy automatycznej konfiguracji warstw odciążanych do GPU stara się zachować 1 GB wolnej pamięci.
Mamy możliwość ręcznego ustawienia tego parametru za pomocą parametru linii poleceń -ngl, ale tutaj nie dostosowuję go precyzyjnie,
po prostu trzeba zrozumieć, że jeśli nastąpił znaczący spadek wydajności przy zwiększaniu rozmiaru okna kontekstu z 32k do 64k – możemy spróbować zwiększyć prędkość przy 64k, dostosowując liczbę odciążonych 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 odciążonych
- Początkowe zużycie VRAM przed uruchomieniem llama-cli: 300MB
Dodatkowe testy 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 |
Wnioski dla budów z 16 GB VRAM
- Moim obecnym faworytem, Qwen3.5-27B-UD-IQ3_XXS, wygląda dobrze w swoim optymalnym zakresie kontekstu 50k (osiągam około 36t/s).
- Qwen3.5-122B-A10B-UD-IQ3_XXS pod względem wydajności wyprzedza Qwen3.5 27B w kontekstach powyżej 64K.
- Mogę wymusić na Qwen3.5-35B-A3B-UD-IQ3_S obsłużenie kontekstu 100k tokenów, a on mieści się w 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 dobra…, trzeba przetestować.
- Należy przetestować, jak dobrze działają Nemotron cascade 2 i GLM-4.7 Flash REAP 23B. Czy będą lepsze niż Qwen3.5-35B q3? Wątpię, ale i tak warto przetestować, aby potwierdzić podejrzenia.