veilletech.fr
19 sept. Feed du jour
#08 LLM Article

AIPerf : mesurer son serveur LLM sans se tromper

Un benchmark qui ne sature pas le serveur mesure surtout votre script de benchmark.

NVIDIA présente AIPerf, successeur réécrit de GenAI-Perf, pour mesurer un serveur d'inférence LLM sans que le client de test devienne le goulot. L'article vaut surtout pour la méthode : streaming obligatoire pour mesurer le premier token, longueur de sortie forcée pour des débits reproductibles, arrivées de Poisson pour voir la dispersion réelle.

3 min de lectureavancévidéo 1:24
Partager
Sommaire5 sections
  1. Ce qui se passe
  2. Comment s'y prendre
  3. Passer à une charge réaliste
  4. Ce que ça change
  5. À retenir

Ce qui se passe

Un modèle tourne sur votre serveur, les réponses arrivent : est-ce rapide ? La boucle de curl ou le script asyncio écrit en dix minutes donnent un chiffre, mais pas forcément celui du serveur. Un client mono-processus plafonne vite, le GIL de Python limitant la concurrence, et c'est lui qui devient le goulot.

NVIDIA présente AIPerf, désigné comme successeur de GenAI-Perf et réécrit de zéro. Il ne repose plus sur Perf Analyzer : des processus générateurs de charge, des services séparés pour traiter les résultats, le tout coordonné par ZeroMQ. Il gère plus de quinze types de points d'accès (chat, responses, rankings, génération d'images…), les jeux de données publics comme ShareGPT et le rejeu de traces de production (formats Mooncake, Baseten, WEKA).

Comment s'y prendre

Avec un serveur vLLM servant Qwen/Qwen3-0.6B sur le port 8000 :

Terminal
uv tool install aiperf

aiperf profile \
  --model Qwen/Qwen3-0.6B \
  --endpoint-type chat \
  --streaming \
  --url localhost:8000 \
  --synthetic-input-tokens-mean 128 --synthetic-input-tokens-stddev 0 \
  --output-tokens-mean 128 --output-tokens-stddev 0 \
  --extra-inputs min_tokens:128 \
  --extra-inputs ignore_eos:true

Trois options portent l'essentiel de la méthode :

Passer à une charge réaliste

Terminal
aiperf profile --model Qwen/Qwen3-0.6B --endpoint-type chat --streaming \
  --url localhost:8000 \
  --request-rate 10 --arrival-pattern poisson \
  --synthetic-input-tokens-mean 512 --synthetic-input-tokens-stddev 128 \
  --output-tokens-mean 128 --output-tokens-stddev 32 \
  --random-seed 42 --request-count 200

Les requêtes arrivent en moyenne à 10 par seconde, avec des rafales et des creux, et des prompts de 154 à 818 tokens dans l'exemple publié. La graine rend la séquence rejouable. Résultat : la distribution du TTFT s'étale nettement par rapport au cas d'un seul utilisateur, parce que préremplissage et décodage se chevauchent.

Ce que ça change

AIPerf rend TTFT, ITL, latence de requête et débit en tokens par seconde, en percentiles (p25, p50, p75, p90, p95, p99), en CSV et en JSON, avec la commande pour refaire le test. Avec DCGM ou pynvml, il ajoute puissance, utilisation et mémoire du GPU dans la même sortie. Le p99 est le chiffre à regarder : une moyenne saine peut cacher une queue de distribution qui casse en production.

Limite pratique : sur aarch64, la dépendance crick n'existe qu'en source et demande une chaîne de compilation C (build-essential sur Debian/Ubuntu).

Source : Benchmarking LLM Inference at Scale with AIPerf, NVIDIA Developer, 18 septembre 2026. Dépôt : ai-dynamo/aiperf.