Le paysage en 2026
Un moteur d'inférence LLM, c'est le runtime qui transforme votre modèle (poids + tokenizer) en service HTTP servant des completions. Sa qualité détermine : combien de requêtes/sec vous pouvez traiter, quelle latence, quel coût par token, et finalement combien vous payez en GPU.
En 2026, sept moteurs dominent. Ils ne se valent pas — chacun a un sweet spot. Mal choisir, c'est multiplier votre facture GPU par 3 à 10 à débit constant.
vLLM — le pivot production
L'innovation de 2023 qui a redéfini l'inférence LLM : PagedAttention. Le KV cache (la mémoire d'attention) est paginé comme la mémoire d'un OS, éliminant la fragmentation. Résultat : batches 4-10× plus gros sans OOM, débit 2-5× supérieur aux moteurs naïfs.
Depuis, vLLM a accumulé : continuous batching (les requêtes terminent à des moments différents, on en injecte de nouvelles en continu), tensor parallelism multi-GPU, speculative decoding, prefix caching automatique, support FP8 natif, intégration LangGraph fluide via OpenAI-compatible API.
En 2026, c'est notre default dans 70 % des missions production. Maintenu par UC Berkeley + communauté large + entreprise (Anyscale, NVIDIA, AMD).
vllm serve mistralai/Mistral-Large-3-AWQ \
--tensor-parallel-size 4 \
--quantization awq \
--max-model-len 32768 \
--enable-prefix-caching \
--enable-chunked-prefill \
--gpu-memory-utilization 0.92 \
--port 8000
vLLM Production Stack
Depuis 2025, vLLM propose un wrapper Kubernetes nommé vLLM Production Stack : K8s-native, autoscaling, load balancing entre workers, observabilité Prometheus, intégration KServe. À considérer quand vous passez de 1-2 serveurs vLLM à une fleet multi-tenant.
SGLang — pour les structured outputs
Le challenger 2024-2026 de vLLM. Différence-clé : RadixAttention, une variante de prefix caching plus aggressive qui exploite les arbres radix pour partager le KV cache entre requêtes ayant des préfixes communs.
Là où SGLang brille vraiment : les structured outputs. Génération de JSON garanti via constraint decoding, function calls, schemas Pydantic forcés au niveau du sampler. Pour des charges agentiques où chaque appel doit retourner un JSON propre, c'est 2-3× plus rapide que vLLM avec JSON mode.
Notre choix quand : pipeline agentique intensif en JSON / function calling, ou retrieval avec beaucoup de prompts partageant un long contexte.
TensorRT-LLM — la perf max NVIDIA
Le moteur propriétaire NVIDIA. Le modèle est compilé pour un GPU spécifique avec kernels CUDA optimisés à la main, fusion d'opérations, paged attention NVIDIA, speculative decoding intégré, support FP8 et MXFP4 natifs.
Perf imbattable : typiquement 20-40 % plus rapide que vLLM sur la même charge, parfois 2× sur les cas favorables (gros batches, prompts longs). Inconvénient : portabilité nulle, compilation longue (10-30 min), maintenance lourde (recompiler à chaque montée de version CUDA ou TRT-LLM).
À utiliser quand : fleet NVIDIA standardisée, perf critique (chaque ms compte), équipe MLOps mature. Sinon, vLLM atteint 80-90 % de la perf pour 30 % du coût d'ingénierie.
TGI (Hugging Face) — la simplicité
Text Generation Inference, le moteur historique de HF. Mature, simple à déployer (un binaire, une commande), compatible avec tout le Hub. Excellente DX pour démarrer.
Moins de fonctionnalités avancées que vLLM ou SGLang en 2026 (notamment sur le speculative decoding et le structured output). Reste un bon choix quand l'écosystème HF est central dans votre stack.
Triton Inference Server (NVIDIA) — le multi-framework
Pas un moteur LLM spécifique : une plateforme de serving générique NVIDIA qui peut héberger LLM + vision + ASR + recommandations sous une même API. Intègre TensorRT-LLM, ONNX, PyTorch, FasterTransformer.
Pertinent quand votre infrastructure sert plusieurs modèles hétérogènes et que vous voulez une seule plateforme. Overkill pour servir uniquement des LLM.
llama.cpp — la portabilité absolue
C++ pur, ~25k lignes, aucune dépendance lourde. Tourne partout — CPU, ARM, Apple Silicon, GPU NVIDIA/AMD/Intel via Vulkan. Format GGUF, quantization mixed-precision native.
Pas le plus rapide sur GPU serveur (vLLM est 3-5× plus rapide sur même H100). Mais imbattable sur : CPU pure, edge devices, embarqué, environnements air-gap où vous voulez minimiser la surface de dépendances. Aussi le moteur sous-jacent d'Ollama et LM Studio.
Ollama — la DX dev
Wrapper grand public autour de llama.cpp. Une commande pour télécharger et lancer un modèle : ollama run mistral-large. API HTTP locale OpenAI-compatible.
Excellent pour : dev local, démos client, POC rapide, copilot d'IDE en local. Inadapté à la production multi-utilisateurs ou à la haute charge — c'est un wrapper développeur, pas un serving stack.
MLC-LLM — l'option WebGPU et edge
Compilation cross-runtime. Peut générer un binaire optimisé pour WebGPU (LLM dans le navigateur), iOS, Android, ainsi que GPU serveur classique. Niche mais utile pour des applications client-side ou mobile.
Comparatif synthétique
| Moteur | Force | Perf prod | Quand |
|---|---|---|---|
| vLLM | PagedAttention, écosystème large, DX correcte | Excellente | Default 70 % prod |
| SGLang | RadixAttention, structured outputs natifs | Excellente | JSON intensif, agents |
| TensorRT-LLM | Perf max NVIDIA, FP8/MXFP4 natifs | Maximale | Quand chaque ms compte |
| TGI | Simplicité, écosystème HF | Bonne | Stack HF, démarrage rapide |
| Triton | Multi-framework, multi-modèle | Bonne | Plateforme multi-modèles |
| llama.cpp | Portabilité absolue, CPU/edge | Moyenne sur GPU | Edge, air-gap, ARM |
| Ollama | DX, démos, dev local | Pas pour prod | Dev, POC, démos |
| MLC-LLM | WebGPU, mobile, cross-runtime | Niche | App client-side, mobile |
Les optimisations 2026 — ce qu'elles font vraiment
Continuous batching
Au lieu d'attendre que tout un batch finisse (static batching), on injecte de nouvelles requêtes dès qu'un slot se libère. Débit ×2-3 vs static. Universel en 2026 (vLLM, SGLang, TensorRT-LLM, TGI).
PagedAttention / RadixAttention
Le KV cache (mémoire d'attention) consomme énormément de RAM GPU : ~2 GB par séquence de 8K tokens sur Mistral Large 3. Sans pagination, on fragmente et on perd 40-60 % de mémoire. Avec, on tient 4-10× plus de séquences en parallèle.
Tensor parallelism
Split les poids sur plusieurs GPU au sein d'une même couche. Permet de tenir un modèle qui ne tient pas sur un seul GPU (Mistral Large 3 en BF16 = ~240 GB, donc 3× H100 80GB minimum). Communication NVLink critique — sans NVLink, le tensor parallel s'effondre.
Speculative decoding
Un petit modèle (le drafter) propose K tokens, le grand modèle (le target) les vérifie en parallèle. Si le drafter est bon (souvent le cas sur du texte standard), accélération 2-3× sans perte de qualité.
Exemple : drafter Ministral 3B + target Mistral Large 3. Coût : il faut entraîner ou choisir un drafter compatible (même tokenizer). Bénéfice : latence end-to-end divisée par 2.
Prefix caching
Si plusieurs requêtes partagent un préfixe (system prompt long, contexte RAG identique), il n'est encodé qu'une fois. Économie 30-70 % sur les pipelines RAG/agents. vLLM le fait via --enable-prefix-caching, SGLang via RadixAttention native.
Chunked prefill
Le prefill (encodage du prompt) est découpé en chunks de N tokens pour ne pas bloquer le decoding des autres requêtes pendant qu'un long prompt est traité. Tail latency divisée par 2-4. Critique en production multi-utilisateurs.
Notre arbre de décision
- Production scale, charge variable → vLLM + AWQ ou FP8.
- Pipeline agentique JSON-intensif → SGLang.
- Perf max critique sur H100/B100 standardisée → TensorRT-LLM.
- Multi-modèles hétérogènes (LLM + vision + ASR) → Triton.
- Edge, air-gap, ARM, CPU → llama.cpp.
- Dev local, démo client → Ollama.
- App mobile / WebGPU → MLC-LLM.
Commencer avec vLLM dans 70 % des cas. Mesurer. Ne migrer vers TensorRT-LLM ou SGLang que si vLLM ne tient pas la charge ou les contraintes — pas par défaut, pas par mode.
Pièges fréquents
Piège 1 — Choisir TensorRT-LLM trop tôt
Le ROI de TensorRT-LLM apparaît au-delà d'un certain débit. En dessous, le coût d'ingénierie (compilation, maintenance, recompilation à chaque update CUDA) dépasse le gain perf. Mesurer vLLM d'abord, optimiser TRT-LLM seulement si justifié.
Piège 2 — Speculative decoding mal calibré
Si le drafter est trop différent du target, le taux d'acceptation des tokens drafter est bas et l'overhead dépasse le gain. Toujours benchmarker speculative decoding sur votre vraie charge avant de l'activer en prod.
Piège 3 — Ignorer le NVLink en multi-GPU
Tensor parallelism sans NVLink (uniquement PCIe) = perf effondrée par communication GPU-GPU. Toujours vérifier que les GPU sont reliés en NVLink dans la config du serveur.
Piège 4 — Ne pas activer prefix caching
Sur les charges RAG (où chaque requête a un contexte de 5-50 KB), prefix caching divise le coût par 2-5. Beaucoup de déploiements vLLM oublient le --enable-prefix-caching. Toujours l'activer en RAG/agents.
Une charge LLM à dimensionner ?
Choix du moteur, sizing GPU, optimisations (PagedAttention, speculative decoding, prefix caching), benchmark sur vos données. Première analyse de faisabilité offerte.
Échanger avec un expert