Benchmarks LLM avec llama.cpp sur 16 Go de VRAM (vitesse et contexte)
Vitesse de génération des jetons de llama.cpp sur 16 Go de VRAM (tableaux).
Ici, je compare la vitesse de plusieurs LLMs exécutés sur GPU avec 16 Go de VRAM, et je choisis le meilleur pour l’auto-hébergement.
J’ai exécuté ces LLMs sur llama.cpp avec des fenêtres de contexte de 19K, 32K et 64K jetons.
GPU stylisé avec des blocs VRAM et des graphiques de type benchmark
Dans cet article, je consigne mes tentatives pour extraire autant de performances que possible, en termes de vitesse.
Tableau comparatif de la vitesse des LLMs (jetons par seconde et VRAM)
| Modèle | Taille | VRAM 19K | GPU/CPU 19K | T/s 19K | VRAM 32K | Charge 32K | T/s 32K | VRAM 64K | Charge 64K | T/s 64K |
|---|---|---|---|---|---|---|---|---|---|---|
| Qwen3.6-35B-A3B-UD-IQ3_XXS | 13,2 | 13,8 Go | 96%/100% | 147,5 | 14,0 Go | 96%/101% | 149,1 | 14,7 Go | 96%/101% | 145,8 |
| Qwen3.6-35B-A3B-UD-IQ4_XS | 17,7 | 14,3 Go | 62%/266% | 95,0 | 14,9 Go | 58%/279% | 92,3 | 14,9 Go | 57%/293% | 86,4 |
| Qwen3.5-35B-A3B-UD-IQ3_S | 13,6 | 14,3 Go | 93%/100% | 136,4 | 14,6 Go | 93%/100% | 138,5 | 14,9 Go | 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 et 64K correspondent aux tailles de contexte.
Le load ci-dessus est une Charge GPU.
Si vous voyez un chiffre faible dans cette colonne, cela signifie que le modèle fonctionne principalement sur CPU et ne peut pas atteindre une vitesse correcte sur cet matériel. Ce schéma correspond à ce que les gens constatent lorsque trop peu du modèle tient sur le GPU ou lorsque le contexte renvoie le travail vers l’hôte.
À propos de llama.cpp, des performances des LLMs, d’OpenCode et d’autres comparaisons
Si vous souhaitez des chemins d’installation, des exemples de llama-cli et de llama-server, ainsi que les paramètres importants pour la VRAM et les jetons par seconde (taille de contexte, groupement, -ngl), commencez par Guide de démarrage rapide de llama.cpp avec CLI et Serveur.
Pour une vue d’ensemble plus large des performances (débit par rapport à la latence, limites de VRAM, requêtes parallèles et la façon dont les benchmarks s’articulent entre matériels et temps d’exécution), consultez Les performances des LLMs en 2026 : Benchmarks, goulots d’étranglement et optimisation.
La qualité des réponses est analysée dans d’autres articles, par exemple :
- Meilleurs LLMs pour OpenCode - Testés localement. Vous pouvez en savoir plus sur OpenCode dans Guide de démarrage rapide d’OpenCode : Installer, configurer et utiliser l’agent de codage IA terminal
- Comparaison de la qualité de la traduction de pages Hugo - LLMs sur Ollama
J’ai également effectué des tests similaires pour les LLMs sur Ollama : Meilleurs LLMs pour Ollama sur GPU 16GB VRAM.
Si vous exécutez Qwen 3.6 27B ou 35B via llama.cpp et souhaitez pousser plus loin la vitesse de génération, consultez Qwen 3.6 MTP vs décodage standard sur GPU 16GB — le décodage spéculatif MTP ajoute jusqu’à 67 % de débit de génération pour le modèle dense 27B, avec des tableaux montrant le coût en VRAM et le compromis sur la fenêtre de contexte à chaque niveau de --spec-draft-n-max.
Pourquoi la longueur du contexte modifie les jetons par seconde
En passant de 19K à 32K ou 64K jetons, le cache KV augmente et la pression sur la VRAM s’intensifie. Certaines lignes montrent une forte baisse des jetons par seconde à 64K tandis que d’autres restent stables, ce qui est le signal pour réviser les quantifications, les limites de contexte ou le déchargement des couches plutôt que de supposer que le modèle est « lent » en général. Pour les calculs budgétaires derrière ces chiffres — la formule exacte des octets KV par jeton, les tableaux de type de cache à 32K/64K/128K, et comment calculer votre propre marge de manœuvre — consultez Cache KV sur GPU 16 Go : Faire tenir réellement le contexte long.
Les modèles et quantifications que j’ai choisis pour tester sont pour les exécuter moi-même et voir s’ils apportent un bon gain en termes de rapport coût/bénéfice sur cet équipement ou non. Donc pas de quantifications q8 ici avec 200k contexte :) …
GPU/CPU est une charge, mesurée par nvitop.
llama.cpp, en configurant automatiquement le déchargement des couches sur le GPU, essaie de garder 1 Go libre.
Nous spécifions manuellement ce paramètre via le paramètre en ligne de commande -ngl, mais je ne l’ajuste pas finement ici,
il suffit de comprendre que s’il y a une baisse significative des performances lors de l’augmentation de la taille de la fenêtre de contexte de 32k à 64k - nous pouvons essayer d’augmenter la vitesse à 64k en ajustant finement le nombre de couches déchargées.
Matériel de test et configuration de llama.cpp
J’ai testé la vitesse des LLMs sur un PC avec cette configuration :
- CPU i-14700
- RAM 64Go 6000Hz (2x32Go)
- GPU RTX-4080
- Ubuntu avec pilotes NVidia
- llama.cpp/llama-cli, aucune couche non chargée spécifiée
- VRAM utilisée initialement, avant le démarrage de llama-cli : 300MB
Exécutions supplémentaires à 128K contexte (Qwen3.5 27B et 122B)
| Modèle | Charge 128K | T/s 128K |
|---|---|---|
| Qwen3.5-27B-UD-IQ3_XXS | 16/625 | 9,6 |
| Qwen3.5-122B-A10B-UD-IQ3_XXS | 27/496 | 19,2 |
Exécutions ajustées finement
Pour certains modèles et quantifications intéressants, j’ai essayé de trouver des paramètres en ligne de commande spécifiques de llama-cpp pour mieux utiliser la VRAM. Voici ce que j’ai pu obtenir :
| Modèle | Contexte | Couches sur GPU | Charge CPU/CPU | Vitesse |
|---|---|---|---|---|
| Qwen3.5-27B-IQ4_XS.gguf | 18k | 65 | 98%/100% | 38,0 |
| Qwen3.5-27B-IQ4_XS.gguf | 64k | 53 | 33%/488% | 15,7 |
Points clés pour les builds avec 16 Go de VRAM
- Mon modèle préféré actuel, Qwen3.5-27B-UD-IQ3_XXS, semble bien performant sur son point optimal de contexte 50k (j’obtiens environ 36 t/s)
- Qwen3.5-122B-A10B-UD-IQ3_XXS surpasse en termes de performances le Qwen3.5 27B sur les contextes supérieurs à 64K.
- Je peux pousser Qwen3.5-35B-A3B-UD-IQ3_S à gérer un contexte de 100k jetons, et il tient dans la vram, donc pas de baisse de performance
- Je n’utiliserai pas gemma-4-31B sur 16GB VRAM, mais gemma-4-26B pourrait être correct…, il faut tester.
- Il faut tester à quel point Nemotron cascade 2 et GLM-4.7 Flash REAP 23B fonctionnent bien. Seront-ils meilleurs que Qwen3.5-35B q3 ? J’en doute, mais je vais quand même tester pour confirmer le soupçon.
- Pour savoir pourquoi la bande 25–34B est la valeur par défaut en 2026 une fois que vous avez 24 Go, et pourquoi un Q4 Qwen3.8-27B n’appartient vraiment pas à cette carte de 16 Go, consultez La frontière efficace des modèles ouverts en 2026.