Testy wydajności modeli LLM z 16 GB VRAM przy użyciu llama.cpp (prędkość i kontekst)
Szybkość generowania tokenów llama.cpp przy 16 GB VRAM (tabele).
Porównuję tutaj prędkość kilku modeli LLM uruchamianych na GPU z 16 GB pamięci VRAM i wybieram najlepszy do samodzielnej hostowania.
Uruchamiałem te modele LLM za pomocą llama.cpp z oknami kontekstu o rozmiarze 19K, 32K i 64K tokenów.

W tym wpisie dokumentuję moje próby wyciśnięcia jak największej wydajności, rozumianej jako prędkość.
Tabela porównawcza prędkości LLM (tokeny na sekundę i VRAM)
| Model | Rozmiar | 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-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 |
| 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.
Wartość load powyżej oznacza 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 zadowalającej prędkości. Ten wzorzec pasuje do tego, co ludzie obserwują, gdy zbyt mała część modelu mieści się na GPU lub gdy kontekst zmusza pracę do powrotu na host.
O llama.cpp, wydajności LLM, OpenCode i innych porównaniach
Jeśli chcesz poznać ścieżki instalacji, przykłady llama-cli i llama-server oraz flagi istotne dla VRAM i tokenów na sekundę (rozmiar kontekstu, batchowanie, -ngl), zacznij od Szybki start z llama.cpp z CLI i serwerem.
Dla szerszego obrazu wydajności (przepustowość vs opóźnienia, limity VRAM, równoległe żądania i jak benchmarky współgrają z różnym sprzętem i środowiskami wykonawczymi), 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 do OpenCode - przetestowane lokalnie. Więcej o OpenCode możesz przeczytać w Szybki start z 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ę
Gdy przechodzisz z 19K do 32K lub 64K tokenów, bufor KV rośnie, a presja na VRAM się zwiększa. Niektóre wiersze pokazują duży spadek tokenów na sekundę przy 64K, podczas gdy inne pozostają stabilne, co jest sygnałem, aby ponownie rozważyć kwantyzację, limity kontekstu lub offload warstw, zamiast zakładać, że model jest po prostu „wolny".
Modele i kwantyzacje, które wybrałem do przetestowania, mają na celu sprawdzenie, czy dają dobry zysk w sensie kosztu/korzyści na tym sprzęcie, czy nie. Więc tutaj nie ma kwantyzacji q8 z kontekstem 200k :) …
GPU/CPU to obciążenie, mierzone przez nvitop.
llama.cpp przy automatycznej konfiguracji warstw zrzucanych na GPU stara się zachować 1 GB wolnej pamięci.
Ręcznie określamy ten parametr poprzez parametr linii poleceń -ngl, ale tutaj nie przeprowadzam jego dostrajania,
tylko trzeba zrozumieć, że jeśli występuje 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 przez dostrajanie liczby zrzucanych warstw.
Sprzęt testowy i konfiguracja llama.cpp
Testowałem prędkość LLM na komputerze z taką konfiguracją:
- CPU i-14700
- RAM 64GB 6000Hz (2x32GB)
- GPU RTX-4080
- Ubuntu z sterownikami NVidia
- llama.cpp/llama-cli, bez określonych zrzucanych warstw
- Początkowo używana 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 z dostrajaniem
Dla niektórych interesujących modeli i kwantyzacji próbowałem znaleźć specjalne parametry linii poleceń llama-cpp, aby lepiej wykorzystać VRAM. Oto, co mi się udało osiągnąć:
| Model | Kontekst | Warstwy na GPU | CPU/CPU load | Prędkość |
|---|---|---|---|---|
| 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
- Moim obecnym faworytem jest Qwen3.5-27B-UD-IQ3_XXS, który wygląda świetnie w swoim idealnym kontekście 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 on mieści się 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-dobrze…, 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 nadal, może przetestuję, aby potwierdzić podejrzenie.