16 GB VRAM LLM benchmarks with llama.cpp (speed and context)
Szybkość przetwarzania tokenów llama.cpp na 16 GB VRAM (tabele).
Porównuję tutaj szybkość działania kilku modeli LLM uruchamianych na GPU z 16 GB pamięci VRAM i wybieram najlepszy z nich do samodzielnego hostowania (self-hosting).
Uruchamiałem te modele LLM w llama.cpp z oknami kontekstu wynoszącymi 19K, 32K oraz 64K tokenów.
Stylizowana grafika GPU z blokami VRAM i wykreślami w stylu benchmarkowym
W tym poście dokumentuję moje próby wyciśnięcia jak największej wydajności pod względem szybkości.
Tabela porównawcza szybkości LLM (tokeny na sekundę i VRAM)
| Model | Rozmiar | 19K VRAM | 19K GPU/CPU | 19K T/s | 32K VRAM | 32K Obciążenie | 32K T/s | 64K VRAM | 64K Obciążenie | 64K: T/s |
|---|---|---|---|---|---|---|---|---|---|---|
| Qwen3.6-35B-A3B-UD-IQ3_XXS | 13.2 | 13.8 GB | 96%/100% | 147.5 | 14.0 GB | 96%/101% | 149.1 | 14.7 GB | 96%/101% | 145.8 |
| Qwen3.6-35B-A3B-UD-IQ4_XS | 17.7 | 14.3 GB | 62%/266% | 95.0 | 14.9 GB | 58%/279% | 92.3 | 14.9 GB | 57%/293% | 86.4 |
| Qwen3.5-35B-A3B-UD-IQ3_S | 13.6 | 14.3 GB | 93%/100% | 136.4 | 14.6 GB | 93%/100% | 138.5 | 14.9 GB | 88%/115% | 136.8 |
| Qwen3.5-27B-IQ3_XXS-bartowsky | 11.3 | 12.8 GB | 98/100 | 44.9 | 13.5 GB | 98/100 | 44.9 | 14.5 GB | 45/415 | 23.6 |
| Qwen3.5-27B-UD-IQ3_XXS | 11.5 | 12.9 GB | 98/100 | 45.3 | 13.7 GB | 98/100 | 45.1 | 14.7 GB | 45/410 | 22.7 |
| Qwen3.5-27B-IQ4_XS.gguf | 15.0 | 14.6 GB | 49/406 | 20.5 | 14.7 GB | 37/465 | 17.4 | 14.7 GB | 23/533 | 13.3 |
| Qwen3.5-122B-A10B-UD-IQ3_XXS | 44.7 | 14.7 GB | 30/470 | 22.3 | 14.7 GB | 30/480 | 21.8 | 14.7 GB | 28/490 | 21.5 |
| Qwen3.5-122B-A10B-UD-IQ3_S | 46.5 | 14.7 GB | 25/516 | 19.4 | 14.7 GB | 24/516 | 19.5 | 14.7 GB | 24/516 | 19.6 |
| Mistral-Small-4-119B UD-IQ3_XXS | 42.8 | 14.8 GB | 28/585 | 30.4 | 14.7 GB | 27/574 | 28.5 | 14.9 GB | 20/590 | 31.5 |
| Qwen3-Coder-Next-UD-IQ4_XS | 38.4 | 14.6 GB | 32/460 | 41.1 | 14.7 GB | 29/440 | 41.3 | 14.8 GB | 32/460 | 38.3 |
| Nemotron Super 120b IQ3_XXS | 56.2 | 15.0 GB | 26/517 | 17.5 | 14.6 GB | 26/531 | 17.4 | 14.6 GB | 26/535 | 17.6 |
| gemma-4-26B-A4B-it-UD-IQ4_XS | 13.4 | 14.7 GB | 95/100 | 121.7 | 14.9 GB | 95/115 | 114.9 | 14.9 GB | 75/190 | 96.1 |
| gemma-4-31B-it-UD-IQ3_XXS | 11.8 | 14.8 GB | 68/287 | 29.2 | 14.8 GB | 41/480 | 18.4 | 14.8 GB | 18/634 | 8.1 |
| GLM-4.7-Flash-IQ4_XS | 16.3 | 15.0 GB | 66/240 | 91.8 | 14.9 GB | 62/262 | 86.1 | 14.9 GB | 53/313 | 72.5 |
| GLM-4.7-Flash-REAP-23B IQ4_XS | 12.6 | 13.7 GB | 92/100 | 122.0 | 14.4 GB | 95/102 | 123.2 | 14.9 GB | 71/196 | 97.1 |
19K, 32K i 64K to rozmiary kontekstu.
Pojęcie load (obciążenie) powyżej odnosi się do GPU Load (obciążenia GPU).
Jeśli widzisz niską wartość w tej kolumnie, oznacza to, że model działa głównie na CPU i nie może osiągnąć przyzwoitej szybkości na tym sprzęcie. Ten wzorzec jest zgodny z tym, co użytkownicy obserwują, gdy zbyt mała część modelu mieści się na GPU lub gdy kontekst przenosi obliczenia z powrotem na host (CPU).
O llama.cpp, wydajności LLM, OpenCode i innych porównaniach
Jeśli szukasz ścieżek instalacji, przykładów użycia llama-cli i llama-server oraz flag istotnych dla VRAM i tokenów na sekundę (rozmiar kontekstu, batching, -ngl), zacznij od Szybki start llama.cpp z CLI i Serwerem.
Aby uzyskać szerszy obraz wydajności (przepustowość vs. opóźnienie, limity VRAM, żądania równoległe oraz jak benchmarki łączą się między sprzętem i środowiskami uruchomieniowymi), zobacz Wydajność LLM w 2026 roku: Benchmarki, wąskie gardła i optymalizacja.
Jakość odpowiedzi jest analizowana w innych artykułach, na przykład:
- Najlepsze LLM dla OpenCode - Przetestowane Lokalnie. Więcej o OpenCode przeczytasz w Szybki start OpenCode: Instalacja, konfiguracja i użycie terminalowego agenta AI do kodowania
- Porównanie jakości tłumaczeń stron Hugo - LLM na Ollama
Przeprowadziłem podobne testy dla LLM na Ollama: Najlepsze LLM dla Ollama na GPU z 16 GB VRAM.
Jeśli uruchamiasz Qwen 3.6 27B lub 35B przez llama.cpp i chcesz jeszcze zwiększyć szybkość generowania, zobacz Qwen 3.6 MTP vs. Standardowe Dekodowanie na GPU 16GB — spekulacyjne dekodowanie MTP zwiększa przepustowość generowania do 67% dla gęstego modelu 27B, a tabele pokazują koszt VRAM i kompromisy związane z oknem kontekstu dla każdego poziomu --spec-draft-n-max.
Dlaczego długość kontekstu zmienia liczbę tokenów na sekundę
Gdy przechodzisz z 19K do 32K lub 64K tokenów, bufor KV (KV cache) rośnie, a presja na VRAM wzrasta. Niektóre wiersze pokazują duży spadek tokenów na sekundę przy 64K, podczas gdy inne pozostają na tym samym poziomie – jest to sygnał, aby ponownie rozważyć kwantyzację, limity kontekstu lub offloading warstw, zamiast zakładać, że model jest ogólnie „wolny”.
Modele i kwantyzacje, które wybrałem do testów, mają na celu sprawdzenie przez mnie, czy dają dobry wzrost pod względem stosunku kosztów do korzyści na tym sprzęcie, czy nie. Więc tutaj nie ma kwantyzacji q8 z kontekstem 200k :) …
GPU/CPU to obciążenie mierzona przez nvitop.
llama.cpp, konfigurując automatycznie warstwy do rozładowania na GPU, stara się trzymać 1 GB wolnej przestrzeni.
Ręcznie określamy ten parametr poprzez parametr linii poleceń -ngl, ale tutaj go nie stroję,
tylko chcę zrozumieć, że jeśli jest znaczący spadek wydajności przy zwiększaniu rozmiaru okna kontekstu z 32k do 64k - możemy próbować zwiększyć prędkość na 64k poprzez dostrojenie liczby rozładowanych warstw.
Sprzęt testowy i konfiguracja llama.cpp
Testowałem szybkość LLM na komputerze z tą konfiguracją:
- CPU i-14700
- RAM 64 GB 6000 Hz (2x32 GB)
- GPU RTX-4080
- Ubuntu z sterownikami NVidia
- llama.cpp/llama-cli, bez określonych rozładowanych warstw
- Początkowe zużycie VRAM przed uruchomieniem llama-cli: 300 MB
Dodatkowe uruchomienia z kontekstem 128K (Qwen3.5 27B i 122B)
| Model | 128K Obciążenie | 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 dostrojone
Dla niektórych ciekawych modeli i kwantyzacji próbowałem znaleźć specjalne parametry linii poleceń llama-cpp, aby lepiej wykorzystać VRAM. Oto co udało mi się osiągnąć:
| Model | Kontekst | Warstwy na GPU | Obciążenie CPU/CPU | Szybkość |
|---|---|---|---|---|
| Qwen3.5-27B-IQ4_XS.gguf | 18k | 65 | 98%/100% | 38.0 |
| Qwen3.5-27B-IQ4_XS.gguf | 64k | 53 | 33%/488% | 15.7 |
Podsumowanie dla konfiguracji z 16 GB VRAM
- Moim obecnym ulubionym modelem jest Qwen3.5-27B-UD-IQ3_XXS, który prezentuje się dobrze w swoim „sweetspot” okna kontekstu 50k (osiągam około 36t/s)
- Qwen3.5-122B-A10B-UD-IQ3_XXS wyprzedza pod względem wydajności Qwen3.5 27B w kontekstach powyżej 64K.
- Mogę zmusić Qwen3.5-35B-A3B-UD-IQ3_S do obsługi kontekstu 100k tokenów i mieści się on w VRAM, więc nie ma spadku wydajności
- Nie będę używać gemma-4-31B na 16 GB VRAM, ale gemma-4-26B może być średnio-dobry…, trzeba przetestować.
- Trzeba przetestować, jak dobrze radzą sobie Nemotron cascade 2 oraz GLM-4.7 Flash REAP 23B. Czy będą lepsze niż Qwen3.5-35B q3? Mam wątpliwości, ale nadal warto to przetestować, aby potwierdzić podejrzenia.