Aller au contenu
Benchmarks

Méthodologie de benchmark reproductible

Protocole du laboratoire : llama-bench, llama-batched-bench, vllm bench serve et autres outils de charge, métriques standard, prompts de référence, grille 1/2/3/5/10 utilisateurs, conditions à consigner et pièges.

Confirmée#benchmark#llama-cpp#vllm#multi-utilisateurs#monitoringPublié le 16 sept. 2026Mis à jour le 16 sept. 2026Vérifié le 16 sept. 2026À revérifier le 15 déc. 2026

L'essentiel

  • Trois niveaux de mesure : llama-bench (poids et backend, mono-séquence), llama-batched-bench (multi-séquences synthétiques, KV) et un test de charge HTTP réaliste (vllm bench serve ou équivalent) contre le serveur tel qu'il sera déployé.
  • Métriques à rapporter systématiquement : TTFT, TPOT (ou ITL), latence de bout en bout, débit agrégé et par utilisateur, p50/p95/p99, goodput.
  • Tout résultat sans ses conditions (build, backend, flags, noyau, contexte, température) est inexploitable : la liste à consigner est ci-dessous.
  • Les pièges connus : premier run (chargement, compilation de noyaux), cache de prompt, dérive thermique, prompts identiques entre slots.

Niveau 1 : llama-bench (mono-séquence)

Outil de référence pour comparer poids, quantifications et backends 1. Valeurs par défaut : -p 512 (prompt), -n 128 (génération), -d 0 (profondeur), -b 2048, -ub 512, -ctk/-ctv f16, -fa auto, -r 5 répétitions, sortie md (aussi csv, json, jsonl, sql). Notation : pp512 = prompt processing sur 512 tokens ; tg128 = génération de 128 tokens ; pp512 @ d4096 = mesure avec 4 096 tokens déjà en contexte.

Protocole : garder les défauts pp512/tg128 pour rester comparable aux publications, et ajouter des profondeurs -d 0,4096,32768 pour voir la dégradation en long contexte. Les pratiques communautaires sur Strix Halo ajoutent -ngl 999 -fa 1 --no-mmap 10 ; les flags de build ROCm (GGML_HIP_ROCWMMA_FATTN, GGML_HIP_NO_VMM, ROCBLAS_USE_HIPBLASLT=1) changent les résultats 11 et doivent être consignés.

Sortie : -o jsonl archivée avec la fiche benchmark.

Niveau 2 : llama-batched-bench (multi-séquences)

Mesure le débit agrégé et l'effet du KV cache pour B séquences parallèles 2. Paramètres : -npp (tokens de prompt), -ntg (tokens générés), -npl (nombre de séquences parallèles), -pps (prompt partagé entre séquences). Deux modes : prompt non partagé (N_KV = B × (PP + TG)) et prompt partagé (N_KV = PP + B × TG). Colonnes : PP, TG, B, N_KV, T_PP (≈ TTFT), S_PP, T_TG, S_TG, T, S.

Protocole pour la Box : -npl 1,2,3,4,5,8,10 -npp 512,2048,8192 -ntg 256, avec et sans -pps (le prompt système partagé est le cas réel d'une interface). Ce niveau dimensionne -np et -c avant le test HTTP.

Niveau 3 : charge HTTP réaliste

Contre llama-server (ou vLLM) configuré comme en production, via l'API OpenAI.

  • vllm bench serve 4 : --backend openai-chat, --dataset-name (sharegpt, random ou fichier personnalisé), --num-prompts, --max-concurrency (utilisateurs simultanés), --request-rate (arrivées par seconde, inf par défaut), --percentile-metrics ttft,tpot,itl,e2el, --metric-percentiles 50,95,99, --save-result. Fonctionne contre tout endpoint OpenAI, donc contre llama-server.
  • GenAI-Perf (NVIDIA) 6 : mêmes métriques, --concurrency, --request-rate, --streaming ; en cours de remplacement par AIPerf.
  • k6 : le k6 standard bufferise le flux SSE et ne mesure pas le TTFT ; utiliser l'extension xk6-llm (TTFT, ITL, TPOT, goodput, export Prometheus) 7 pour des scénarios réalistes (arrivées irrégulières, mélange de requêtes).

Pendant le test, relever côté serveur : llama-server --metrics (llamacpp:prompt_tokens_seconds, llamacpp:predicted_tokens_seconds, llamacpp:requests_processing) et /slots 3 ; ou vllm:time_to_first_token_seconds, vllm:num_requests_waiting, vllm:kv_cache_usage_perc 5. Voir Monitoring.

Métriques standard

MétriqueDéfinitionSource
TTFTtemps entre l'envoi du prompt et le premier token8
TPOT(latence E2E − TTFT) ÷ (N − 1) tokens générés8
ITLintervalle entre deux tokens successifs (distribution)8
Latence E2ETTFT + TPOT × tokens générés9
Débit agrégétokens de sortie par seconde, tous utilisateurs9
Débit par utilisateur1 ÷ TPOT d'un client
Requêtes/srequêtes terminées par seconde
p50 / p95 / p99percentiles de chaque latence sur l'ensemble des requêtes8
Goodputpart des requêtes respectant les objectifs (TTFT, TPOT) fixés dans Dimensionnement8

Dans les fiches benchmark : tokensPerSecond = débit par utilisateur ; l'agrégé se note dans le corps.

Prompts de référence

Trois jeux en français, versionnés dans le dépôt (à constituer ; contenu anonymisé ou synthétique) :

JeuLongueur du promptRéponse attendueUsage
Courts300 à 1 500 tokens (système + question)200 à 600 tokensconversation, reformulation
Longs (RAG)3 000 à 8 000 tokens (5 à 10 passages injectés)300 à 1 000 tokensquestion documentaire
Dossier15 000 à 40 000 tokens (contrat ou dossier complet)500 à 2 000 tokensanalyse longue, test du prefill

Chaque run mélange les jeux selon le profil d'usage retenu (par exemple 60 % courts, 30 % longs, 10 % dossier ; hypothèse) et fixe max_tokens pour rendre les réponses comparables.

Grille de charge

Pour chaque configuration (modèle, quantification, backend, -np, -c, KV) :

Utilisateurs simultanésObjectif de la mesure
1référence : TTFT et débit nominaux
2premier partage : perte par utilisateur
3pointe attendue d'un cabinet de 10 (hypothèse Q-001)
5pointe haute
10tous les comptes actifs : comportement de la file, dégradation

Au moins 30 requêtes par niveau de concurrence, prompts tirés au sort, 3 répétitions à des moments différents.

Conditions à consigner

Pour chaque fiche : modèle et fichier exact (quantification, taille en Go, hash si possible) ; runtime, build ou version (b10333, 0.26.0), image Docker ; backend (Vulkan RADV + version Mesa, ou ROCm + version) ; flags de build et variables d'environnement ; options de lancement (-np, -c, --kv-unified, -fa, -ctk/-ctv, -b/-ub, --no-mmap) ; noyau Linux, distribution, BIOS et réglage mémoire (VRAM dédiée, limite GTT) ; profondeur de contexte au moment de la mesure ; puissance (W) et température (°C) pendant le run ; date et heure ; outil de mesure et sa version.

Pièges

  • Premier run : le premier appel après chargement inclut l'allocation mémoire et la compilation de noyaux ; l'exclure (-r 5 avec réchauffement, ou une requête d'échauffement avant le test HTTP).
  • Cache de prompt : llama-server réutilise le KV d'un préfixe identique ; des prompts répétés donnent un TTFT artificiellement bas. Varier les prompts ou désactiver le cache pour les mesures de TTFT brut ; le garder pour les mesures « réalistes » (le système partagé est un cas légitime).
  • Thermique : un mini-PC dérive après quelques minutes de charge ; relever la puissance et la fréquence, faire durer les runs au moins 5 minutes, mesurer aussi en régime établi.
  • Prompts identiques entre slots : -pps mesure un cas favorable ; toujours donner aussi le cas non partagé.
  • Débit agrégé vs par utilisateur : la confusion la plus fréquente dans les publications ; relire la définition de l'outil.
  • Quantifications non équivalentes entre moteurs (GGUF Q4 vs GPTQ) : signaler, ne pas conclure.
  • Version de master : llama.cpp change chaque jour ; figer un build et le noter.

Ce qu'il reste à faire

Sources

  1. 1llama.cpp — README de llama-benchGitHubFiabilité hauteggml-org · publié 2026 (master) · consulté le 16 sept. 2026 · fiche source
  2. 2llama.cpp — README de llama-batched-benchGitHubFiabilité hauteggml-org · publié 2026 (master) · consulté le 16 sept. 2026 · fiche source
  3. 3llama.cpp — README de llama-server (tools/server)GitHubFiabilité hauteggml-org · publié 2026 (master) · consulté le 16 sept. 2026 · fiche source
  4. 4vLLM — commande vllm bench serveDocumentation officielleFiabilité hautevLLM · publié 2026 · consulté le 16 sept. 2026 · fiche source
  5. 5vLLM — conception des métriques PrometheusDocumentation officielleFiabilité hautevLLM · publié 2026 · consulté le 16 sept. 2026 · fiche source
  6. 6NVIDIA — GenAI-Perf (Triton docs)Documentation officielleFiabilité hauteNVIDIA · publié 2026 · consulté le 16 sept. 2026 · fiche source
  7. 7xk6-llm — extension k6 pour LLMGitHubFiabilité faibleGitHub (communauté) · msradam · publié 2026 · consulté le 16 sept. 2026 · fiche source
  8. 8Anyscale — Understand LLM latency and throughput metricsDocumentation officielleFiabilité hauteAnyscale · publié 2026 · consulté le 16 sept. 2026 · fiche source
  9. 9Databricks — LLM Inference Performance Engineering: Best PracticesArticle techniqueFiabilité hauteDatabricks (Mosaic) · publié 2023-10-12 · consulté le 16 sept. 2026 · fiche source
  10. 10amd-strix-halo-toolboxes (README)GitHubFiabilité moyenneGitHub (communauté) · kyuz0 · publié 2025–2026 · consulté le 16 sept. 2026 · fiche source
  11. 11I tuned llama.cpp on a Strix Halo mini-PC — why « Vulkan beats ROCm » is a myth (Medium)BlogFiabilité faibleMedium · Bkpaine · publié 2026-07 · consulté le 16 sept. 2026 · fiche source
content/docs/benchmarks/methodologie.md1095 mots