Polydesk-logotype
Polydesk.ai — Header

vLLM (Virtual Large Language Model)

vLLM est un moteur d’inférence et de serving open source pour LLM, conçu pour maximiser le throughput et l’efficacité mémoire sur GPU. Son innovation fondatrice, PagedAttention, gère le cache KV comme un système de mémoire paginée, éliminant la fragmentation mémoire et permettant de servir significativement plus de requêtes concurrentes avec la même VRAM.

Développé initialement au Sky Computing Lab de UC Berkeley, vLLM est devenu un projet communautaire massif avec des contributions de l’industrie et du monde académique. C’est le moteur d’inférence LLM le plus adopté en production. Il offre une API compatible OpenAI, supporte une très large gamme de modèles et de formats de quantification, et fonctionne sur NVIDIA, AMD, Intel, et d’autres plateformes via un système de plugins matériels.

vLLM en bref
Type
Moteur d’inférence et de serving pour LLM
Origine
Sky Computing Lab, UC Berkeley
Version stable
v0.17.1 (11 mars 2026)
Licence
Apache 2.0
Innovation clé
PagedAttention (gestion paginée du cache KV)
Quantifications supportées
GPTQ, AWQ, FP8, INT8 W8A8, INT4 W4A16, GGUF, bitsandbytes, TorchAO
Matériel
NVIDIA (CUDA), AMD (ROCm), Intel (XPU), TPU (expérimental), Huawei Ascend, IBM Spyre
API
Compatible OpenAI (REST + gRPC), Python (LLM / AsyncLLM)
Modèles
Llama, Mistral, Qwen, DeepSeek, Gemma, Phi, modèles multimodaux (LLaVA, Qwen-VL, InternVL), etc.

PagedAttention : l’innovation fondatrice

Le cache KV (Key-Value) est le composant qui stocke les états d’attention pour chaque requête en cours. Dans un serving LLM classique, chaque requête alloue un bloc contigu de mémoire pour son cache KV, dimensionné pour la longueur de contexte maximale. Le problème : cette allocation statique gaspille de la mémoire (la plupart des requêtes n’utilisent pas le contexte maximal) et crée de la fragmentation.

PagedAttention, l’innovation clé de vLLM, s’inspire de la mémoire virtuelle des systèmes d’exploitation. Au lieu d’allouer un bloc contigu par requête, le cache KV est découpé en petits blocs (pages) de taille fixe. Chaque requête reçoit les pages dont elle a besoin, et les pages inutilisées sont recyclées. Résultat : quasi zéro fragmentation mémoire et une utilisation bien plus efficace de la VRAM pour le cache.

L’impact en production est concret : à VRAM égale, vLLM peut servir significativement plus de requêtes concurrentes qu’un serving naïf. Combiné au continuous batching, cela se traduit par un throughput nettement supérieur et des coûts d’inférence réduits.

Histoire et évolution

vLLM a été créé par Woosuk Kwon et ses collaborateurs au Sky Computing Lab de UC Berkeley. Le papier fondateur, « Efficient Memory Management for Large Language Model Serving with PagedAttention », a été publié en 2023 et a immédiatement attiré l’attention de la communauté pour son approche élégante au problème de la gestion mémoire dans le serving LLM.

Le projet a évolué rapidement, passant d’un projet académique à un outil de production largement adopté. L’écosystème s’est structuré avec des releases mensuelles, une roadmap publique par trimestre (avec des SIGs thématiques : model performance, multi-modality, torch.compile, large-scale serving, etc.), et des contributions de NVIDIA, AMD, Intel, Hugging Face, Red Hat, et de nombreuses startups IA.

Les jalons majeurs récents incluent le moteur V1 (alpha en janvier 2025, défaut en 2025-2026), le support gRPC, l’API Realtime WebSocket pour l’audio, l’intégration RLHF native, et le support NVFP4 pour les GPU Blackwell. La version stable actuelle est v0.17.1 (11 mars 2026).

Compatibilité matérielle

vLLM se distingue par le support matériel le plus large de tous les moteurs de serving LLM :

Plateforme Backend Support FP8 Notes
NVIDIA Turing (RTX 20xx, T4) CUDA Non INT8/INT4 supportés. GPU d’entrée de gamme pour le serving
NVIDIA Ampere (A100, RTX 30xx) CUDA Non (pas de Tensor Cores FP8) Kernels Marlin pour GPTQ/AWQ. Excellent rapport prix/performance
NVIDIA Ada (L40, RTX 40xx) CUDA Oui (Ada FP8) FP8 supporté. Marlin disponible
NVIDIA Hopper (H100, H200) CUDA Oui (natif Transformer Engine) Plateforme de référence pour la production. FP8 optimal
NVIDIA Blackwell (B200, RTX 50xx) CUDA Oui + NVFP4 Support FP4 natif. Fixes récents pour MoE NVFP4 sur RTX Blackwell
AMD Instinct (MI250, MI300) ROCm Variable Support fonctionnel, en développement actif
Intel Arc / Data Center Max XPU (vllm-xpu-kernels) Non IPEX déprécié, migration vers vllm-xpu-kernels
Google TPU XLA Non Expérimental
Huawei Ascend CANN (vllm-ascend) Non Plugin communautaire actif, moteur V1 supporté
FP8 sur A100 : attention Le A100 ne dispose pas de Tensor Cores FP8. Lancer --dtype fp8 sur un A100 provoquera une erreur ou un fallback silencieux vers FP16. Pour les A100, utilisez INT8 W8A8 (SmoothQuant) ou INT4 (AWQ/GPTQ) avec Marlin. Vérifiez toujours les logs vLLM pour confirmer le mode de précision actif.

L’architecture V1

Le moteur V1, devenu le moteur par défaut dans les releases 2025-2026, représente une ré-architecture majeure des composants cœur de vLLM :

EngineCore isolé. L’architecture V1 utilise le multiprocessing avec ZeroMQ pour isoler la boucle d’exécution principale (scheduler + model executor) des tâches CPU (tokenisation, traitement des entrées multimodales, détokenisation, streaming des réponses). Cela maximise l’overlap entre le GPU et le CPU.

Scheduler unifié. V1 supprime la distinction traditionnelle entre les phases « prefill » et « decode ». Les tokens d’entrée (prompt) et les tokens générés sont traités uniformément. Les décisions de scheduling sont représentées comme un simple dictionnaire {request_id: num_tokens}, ce qui simplifie considérablement le code et permet des optimisations plus agressives.

Async scheduling + Pipeline Parallelism. Le scheduling asynchrone, activé par défaut, overlap les décisions de scheduling du CPU avec l’exécution GPU. Combiné avec le pipeline parallelism (supporté depuis les versions récentes), cela produit des gains mesurables : 30,8 % d’amélioration du throughput end-to-end et 31,8 % d’amélioration du time-per-output-token dans les benchmarks internes.

Chunked prefill + disaggregated serving. Le chunked prefill découpe les longs prompts en morceaux qui s’entrelacent avec les batches de décodage, empêchant une requête long-contexte de monopoliser le GPU. Le disaggregated serving sépare physiquement les phases de prefill (compute-bound) et de decode (memory-bandwidth-bound), éliminant les pics de latence causés par le blocage mutuel.

Support de quantification

vLLM offre le support de quantification le plus large de tous les moteurs d’inférence LLM :

Format Méthode Kernel recommandé GPU supportés
GPTQ PTQ poids (3-4-8 bits) Marlin (2,6× plus rapide) Ampere+
AWQ PTQ poids (4 bits) Marlin (10,9× plus rapide) Ampere+
FP8 Poids + activations CUTLASS / natif Hopper+ (H100, B200)
INT8 W8A8 SmoothQuant + GPTQ CUTLASS Turing+ (RTX 20xx+)
INT4 W4A16 LLM Compressor Marlin Ampere+
NVFP4 NVIDIA FP4 Natif Blackwell (B200, RTX 50xx)
GGUF K-quants (Q4_K_M, etc.) Expérimental NVIDIA
bitsandbytes NF4 / INT8 Natif NVIDIA
TorchAO INT4 (PyTorch natif) torch.compile Variable

Les kernels Marlin sont le facteur d’accélération le plus important pour les modèles quantifiés. Sur un Qwen2.5-32B avec H200, Marlin-AWQ atteint 741 tok/s contre 68 tok/s pour AWQ standard (10,9× plus rapide). Activez Marlin avec --quantization marlin.

LLM Compressor : l’outil de quantification recommandé LLM Compressor est la bibliothèque de quantification intégrée à vLLM. Elle supporte GPTQ, AWQ, SmoothQuant, et FP8, et produit des modèles directement optimisés pour le serving dans vLLM. C’est le successeur d’AutoAWQ (déprécié) et le chemin recommandé pour quantifier des modèles destinés à vLLM.

Utilisation pratique

Serving (production)

# Serveur OpenAI-compatible (le plus courant) vllm serve meta-llama/Llama-3.1-8B-Instruct --gpu-memory-utilization 0.9 --max-model-len 8192 --port 8000 # Avec quantification AWQ + Marlin vllm serve Qwen/Qwen2.5-32B-Instruct-AWQ --quantization marlin --tensor-parallel-size 2 --gpu-memory-utilization 0.92 # Avec FP8 sur H100/B200 vllm serve meta-llama/Llama-3.3-70B-Instruct --dtype fp8 --tensor-parallel-size 2 --enable-chunked-prefill --kv-cache-dtype fp8

Le flag --max-model-len auto (depuis v0.14) ajuste automatiquement la longueur de contexte à la mémoire GPU disponible, éliminant les erreurs OOM au démarrage.

API Python

from vllm import LLM, SamplingParams llm = LLM(model="meta-llama/Llama-3.1-8B-Instruct") sampling_params = SamplingParams(temperature=0.7, max_tokens=256) outputs = llm.generate(["Explain PagedAttention in one paragraph."], sampling_params) for output in outputs: print(output.outputs[0].text)

Appeler vLLM comme un serveur OpenAI

curl http://localhost:8000/v1/chat/completions -H "Content-Type: application/json" -d '{ "model": "meta-llama/Llama-3.1-8B-Instruct", "messages": [{"role": "user", "content": "Hello!"}], "max_tokens": 256 }'

Toute application compatible avec l’API OpenAI fonctionne avec vLLM sans modification. C’est un avantage considérable pour la migration depuis les API cloud vers l’inférence locale ou self-hosted.

Fonctionnalités avancées

Décodage spéculatif. vLLM supporte le décodage spéculatif (y compris avec les structured outputs depuis les versions récentes) pour accélérer la génération token par token en utilisant un petit modèle draft.

Structured outputs. Enforcement de schémas JSON via guided decoding, critique pour les workflows d’agents et les appels d’outils (function calling).

Multimodal. Support natif des modèles images + texte (LLaVA, Qwen-VL, InternVL, Llama 4 Scout/Maverick), avec streaming des entrées multimodales.

Automatic prefix caching (APC). Quand plusieurs requêtes partagent un même préfixe (system prompt commun dans un chatbot), vLLM met en cache et réutilise les blocs KV de ce préfixe, réduisant le time-to-first-token pour les requêtes suivantes.

Realtime API. Un nouveau protocole WebSocket pour les interactions audio en streaming, construit sur l’infrastructure Voxtral realtime.

RLHF integration. APIs natives pour le weight syncing via NCCL, le rechargement par couche pour QeRL, et la pause/reprise du moteur avec préservation des requêtes en cours.

gRPC server. Une alternative au REST avec protocole binaire et multiplexage HTTP/2 pour les environnements à haute concurrence.

Parallélisme distribué

Pour les modèles qui ne tiennent pas sur un seul GPU, vLLM supporte trois stratégies de parallélisme :

Tensor Parallelism (TP). Divise chaque couche du modèle entre plusieurs GPU. C’est la stratégie la plus courante. Un modèle 70B en FP16 (~140 Go) peut être divisé sur 2 GPU H100 80 Go avec --tensor-parallel-size 2. La communication inter-GPU utilise NCCL et nécessite des connexions rapides (NVLink idéalement).

Pipeline Parallelism (PP). Assigne des couches entières à différents GPU, chaque GPU traitant un « étage » du pipeline. Mieux adapté aux configurations sans NVLink (communication inter-nœud), mais avec une latence plus élevée que le TP. Pleinement supporté avec l’async scheduling depuis les versions récentes.

Expert Parallelism (EP). Spécifique aux modèles MoE (Mixture of Experts) comme DeepSeek V3/R1 ou Mixtral. Distribue les experts sur différents GPU plutôt que de répliquer chaque expert. Particulièrement efficace pour les modèles MoE massifs où le nombre total de paramètres est très élevé mais seuls quelques experts sont actifs par token.

Les trois stratégies peuvent être combinées. Un déploiement typique de DeepSeek V3 sur un cluster multi-nœud utilise TP intra-nœud (entre les GPU connectés en NVLink), PP inter-nœud (entre les serveurs), et EP pour distribuer les experts MoE.

vLLM vs les alternatives

Critère vLLM TensorRT-LLM TGI SGLang
Throughput GPU NVIDIA Très élevé (Marlin) Le plus élevé Bon Très élevé
Multi-matériel NVIDIA, AMD, Intel, TPU, Ascend NVIDIA uniquement NVIDIA principalement NVIDIA, AMD
Facilité de déploiement Élevée Moyenne (compilation) Élevée Élevée
Formats de quantification Le plus large (9+) FP8, FP4, INT4, INT8 GPTQ, AWQ GPTQ, AWQ, FP8
Chunked prefill Oui Oui Non Oui
Support nouveaux modèles Rapide (via HF Transformers) Plus lent (réimplémentation) Modéré Rapide
Structured outputs Oui (guided decoding) Limité Oui Oui (co-design)
Licence Apache 2.0 Apache 2.0 Apache 2.0 Apache 2.0
Verdict vLLM est le choix par défaut pour le serving LLM en production. Il offre le meilleur rapport flexibilité/performance/simplicité. Passez à TensorRT-LLM uniquement si vous êtes sur NVIDIA Hopper/Blackwell et que chaque milliseconde compte. Préférez llama.cpp/GGUF via Ollama pour l’inférence locale sur CPU ou Apple Silicon.

Déploiement production : points clés

GPU memory utilization. Le paramètre --gpu-memory-utilization (par défaut 0.9) contrôle le pourcentage de VRAM alloué à vLLM. En production, 0.90-0.92 est recommandé. Laisser 8-10 % de marge évite les OOM sous charge.

Continuous batching. Activé par défaut. Les requêtes entrantes sont dynamiquement regroupées pour maximiser l’utilisation GPU. Nécessite des requêtes concurrentes pour être efficace : un seul utilisateur séquentiel ne bénéficiera pas du batching.

FP8 sur H100/B200. Le flag --dtype fp8 active la quantification FP8 pour un gain de throughput important. Vérifiez la compatibilité : FP8 nécessite des Tensor Cores FP8 (Hopper+). Sur A100 ou plus ancien, le flag sera ignoré ou causera une erreur.

KV cache quantifié. Indépendamment de la quantification des poids, --kv-cache-dtype fp8 quantifie le cache KV pour doubler la capacité de requêtes concurrentes à contexte long.

Pré-téléchargement des modèles. En production, téléchargez les modèles à l’avance avec huggingface-cli download et montez le répertoire local. Cela découple le téléchargement du démarrage du conteneur, réduisant les temps de déploiement.


Questions fréquentes sur vLLM

vLLM est-il gratuit ?

Oui. vLLM est entièrement open source sous licence Apache 2.0. Vous pouvez l’utiliser librement en production, y compris à des fins commerciales. L’installation se fait avec pip install vllm. NVIDIA publie aussi un conteneur Docker vLLM optimisé sur NGC, mis à jour mensuellement.

Faut-il un GPU NVIDIA pour utiliser vLLM ?

Non. vLLM supporte les GPU NVIDIA (CUDA), AMD (ROCm), Intel (XPU), les TPU Google (expérimental), et les accélérateurs Huawei Ascend et IBM Spyre via des plugins matériels. Cependant, le support NVIDIA est le plus mature et le plus performant. Pour les GPU AMD, vérifiez la compatibilité ROCm de votre modèle de carte.

Quelle est la différence entre vLLM et Ollama ?

vLLM est un moteur de serving haute performance pour la production (API OpenAI-compatible, continuous batching, multi-GPU, quantification avancée). Ollama est un outil d’inférence locale simplifié, basé sur llama.cpp/GGML, optimisé pour le téléchargement et l’exécution facile de modèles sur un poste de travail. Utilisez Ollama pour tester des modèles localement, vLLM pour les servir en production à de nombreux utilisateurs.

Comment choisir entre GPTQ, AWQ et FP8 dans vLLM ?

Si vous avez un GPU Hopper (H100) ou Blackwell (B200) : FP8 est le meilleur choix, il ne nécessite pas de quantification préalable et offre un throughput quasi doublé. Sur GPU Ampere ou Ada (RTX 30xx/40xx) : AWQ + Marlin pour la meilleure qualité à 4 bits, GPTQ + Marlin si un modèle AWQ n’est pas disponible. Les deux atteignent des performances similaires avec Marlin. Pour INT8 (qualité maximale) : W8A8 via LLM Compressor avec SmoothQuant.

vLLM est-il compatible avec les fichiers GGUF ?

Oui, de manière expérimentale (via --quantization gguf). Cependant, les performances sont généralement inférieures à celles des modèles GPTQ/AWQ avec Marlin pour le serving GPU. GGUF est optimisé pour llama.cpp/CPU, pas pour le serving GPU haute concurrence. Si vous êtes sur GPU et que vous voulez le meilleur throughput dans vLLM, préférez AWQ ou GPTQ.

Polydesk.ai — Footer