vLLM : définition, fonctionnement et déploiement sur GPU
Le moteur d'inférence open source qui sert des LLM ouverts sur GPU avec un débit élevé et une API compatible OpenAI : PagedAttention, continuous batching, exemple de déploiement et comparaison avec Ollama et TGI.
Par Équipe Blent· Mis à jour le · 15 min de lecture· Niveau avancé
vLLM en bref
- Type
- Moteur d'inférence et de serving de LLM
- Origine
- UC Berkeley, 2023
- Licence
- Apache 2.0
- Innovation clé
- PagedAttention
- Interface
- API HTTP compatible OpenAI
- Matériel
- GPU NVIDIA en priorité, autres accélérateurs
- Langage
- Python, avec noyaux GPU optimisés
Définition : vLLM
vLLM est un moteur d'inférence et de serving open source pour grands modèles de langage, issu de travaux de l'université de Californie à Berkeley. Il sert des modèles à poids ouverts sur GPU avec un débit élevé grâce à deux mécanismes principaux : PagedAttention, qui gère la mémoire du cache clé-valeur par blocs comme un système d'exploitation gère sa mémoire virtuelle, et le continuous batching, qui ajoute et retire des requêtes du lot en cours à chaque étape de génération. vLLM expose une API compatible avec celle d'OpenAI, ce qui permet de remplacer un modèle propriétaire par un modèle auto-hébergé sans réécrire le code client.
En une phrase : vLLM transforme un modèle ouvert en API de production compatible OpenAI, en tirant le maximum de tokens par seconde de vos GPU.
Dans cette définition
Qu'est-ce que vLLM ?
vLLM est un serveur d'inférence spécialisé : il prend un LLM à poids ouverts et l'expose sous forme d'API, en cherchant à produire le plus grand nombre de tokens par seconde possible sur un GPU donné. Il s'adresse aux équipes qui veulent auto-héberger leurs modèles sans sacrifier les performances.
Le projet est né en 2023 dans un laboratoire de l'université de Californie à Berkeley. Ses auteurs partaient d'un constat : lors de l'inférence, la mémoire GPU est en grande partie consommée par le KV cache, le cache des calculs d'attention de chaque requête, et les serveurs de l'époque en gaspillaient une part importante par fragmentation. Leur réponse, PagedAttention, a été présentée dans un article scientifique à la conférence SOSP en 2023, en même temps que la publication du code en open source.
Depuis, vLLM est devenu l'un des moteurs de serving open source les plus utilisés. Il est soutenu par une large communauté de contributeurs, dont des fabricants de matériel et des fournisseurs de cloud, et sert de moteur à de nombreuses plateformes de déploiement. Son interface compatible avec l'API d'OpenAI a largement contribué à son adoption : une application écrite pour GPT peut basculer vers un modèle auto-hébergé en changeant une URL.
À retenir : vLLM n'est pas un modèle mais un moteur d'exécution. Il ne rend pas un modèle plus intelligent : il permet de le servir à plus d'utilisateurs, plus vite et à moindre coût.
PagedAttention et continuous batching : le cœur de vLLM
Deux mécanismes expliquent l'essentiel des performances de vLLM. Ils s'attaquent aux deux gaspillages majeurs de l'inférence naïve : la mémoire et le temps de calcul inutilisés.
PagedAttention
Un LLM génère ses tokens un par un. Pour ne pas tout recalculer à chaque étape, il conserve les clés et valeurs d'attention des tokens précédents : c'est le KV cache, qui grandit à mesure que la réponse s'allonge. Les serveurs classiques réservaient pour chaque requête un bloc mémoire contigu dimensionné pour la longueur maximale, même si la réponse s'arrêtait après quelques phrases.
PagedAttention applique au KV cache le principe de la mémoire virtuelle d'un système d'exploitation. Le cache est découpé en petits blocs de taille fixe, alloués au fur et à mesure de la génération et repérés par une table de correspondance. Le gaspillage devient marginal, ce qui permet de faire tenir beaucoup plus de requêtes simultanées sur le même GPU. Le découpage en blocs permet aussi de partager des préfixes communs entre requêtes, par exemple un même prompt système, au lieu de les dupliquer.
Continuous batching
Regrouper des requêtes en lots exploite mieux la puissance du GPU. Mais avec un batching statique, le lot entier attend la fin de la requête la plus longue, et les nouvelles requêtes patientent. Le continuous batching raisonne à l'échelle de chaque étape de génération : dès qu'une requête se termine, sa place est attribuée à une nouvelle. Le GPU reste occupé en permanence et la latence d'attente diminue, surtout lorsque les longueurs de réponse sont très variables.
Exemple : servir un modèle avec vllm serve
Sur une machine équipée d'un GPU NVIDIA, l'installation passe par pip, puis une seule commande lance un serveur compatible OpenAI.
pip install vllm
export VLLM_API_KEY="change-moi"
vllm serve Qwen/Qwen2.5-7B-Instruct \
--port 8000 \
--max-model-len 16384 \
--gpu-memory-utilization 0.90 \
--api-key "$VLLM_API_KEY"
Le modèle est téléchargé depuis le Hub de Hugging Face au premier lancement. --max-model-len borne la longueur de contexte pour limiter la mémoire réservée au KV cache, et --gpu-memory-utilization fixe la part de la mémoire GPU que vLLM s'autorise à utiliser. Une fois le serveur prêt, n'importe quel client OpenAI peut l'interroger :
import os
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:8000/v1",
api_key=os.environ["VLLM_API_KEY"],
)
response = client.chat.completions.create(
model="Qwen/Qwen2.5-7B-Instruct",
messages=[
{"role": "system", "content": "Tu réponds en français, de façon concise."},
{"role": "user", "content": "Quels sont les avantages d'un modèle auto-hébergé ?"},
],
temperature=0.2,
max_tokens=300,
)
print(response.choices[0].message.content)
En production, on utilise plutôt l'image officielle, qui embarque le même serveur :
docker run --gpus all -p 8000:8000 --ipc=host \
-v ~/.cache/huggingface:/root/.cache/huggingface \
-e VLLM_API_KEY="$VLLM_API_KEY" \
vllm/vllm-openai:latest \
--model Qwen/Qwen2.5-7B-Instruct
Dans quels cas utiliser vLLM ?
vLLM s'adresse aux équipes qui veulent servir elles-mêmes des modèles ouverts, avec des contraintes de charge, de coût ou de souveraineté.
API LLM interne
Exposer un modèle ouvert à toutes les applications de l'entreprise, avec la même interface qu'OpenAI.
Données sensibles
Garder prompts et documents sur une infrastructure maîtrisée, dans un cloud souverain ou sur site.
Backend de RAG et d'agents
Servir le modèle de génération d'un assistant documentaire ou d'agents très sollicités.
Traitement par lots
Classer, résumer ou extraire des informations sur des millions de documents en mode hors ligne.
Modèles fine-tunés
Déployer un modèle adapté, ou plusieurs adaptateurs LoRA servis sur un même modèle de base.
Réduction des coûts
Remplacer une API facturée au token par une capacité GPU dont le coût ne dépend pas du volume.
Quels sont les avantages de vLLM ?
vLLM s'est imposé comme une référence du serving de LLM open source parce qu'il combine performance et simplicité d'adoption.
- Débit élevé grâce à PagedAttention et au continuous batching, surtout avec de nombreux utilisateurs simultanés.
- API compatible OpenAI : le code client existant fonctionne en changeant l'URL de base.
- Large catalogue de modèles pris en charge directement depuis le Hub de Hugging Face.
- Répartition d'un modèle sur plusieurs GPU et support de modèles quantifiés pour réduire la mémoire.
- Fonctions de production intégrées : streaming, cache de préfixes, sorties structurées, métriques Prometheus.
- Projet open source sous licence Apache 2.0, très actif et soutenu par une large communauté.
Quelles sont les limites de vLLM ?
vLLM est pensé pour des serveurs GPU : ce qui fait sa force en production le rend surdimensionné pour d'autres usages.
- Un GPU avec suffisamment de mémoire est en pratique indispensable ; l'usage sur CPU reste marginal.
- Il réserve par défaut la majeure partie de la mémoire GPU, ce qui complique le partage d'une carte.
- Le réglage fin (longueur de contexte, parallélisme, quantization) demande une bonne compréhension du matériel.
- Les évolutions rapides du projet imposent de suivre les versions et de tester chaque mise à jour.
- Il ne gère pas seul l'authentification avancée, les quotas ou le routage entre modèles : une passerelle reste nécessaire.
- Le coût d'un GPU dédié n'est rentable qu'au-delà d'un certain volume de requêtes.
vLLM vs Ollama vs TGI : quelles différences ?
Ces trois outils exécutent des modèles ouverts, mais pour des contextes très différents. Ollama vise le poste de travail, vLLM et Text Generation Inference (TGI), le serveur de Hugging Face, visent la production.
| Critère | vLLM | Ollama | TGI |
|---|---|---|---|
| Cible | Serving GPU en production | Exécution locale, prototypage | Serving GPU en production |
| Éditeur | Projet communautaire issu de Berkeley | Ollama | Hugging Face |
| Matériel | GPU (NVIDIA en priorité) | CPU, GPU, puces Apple | GPU |
| Formats de modèles | Poids du Hub, versions quantifiées (AWQ, GPTQ, FP8…) | GGUF quantifié | Poids du Hub, versions quantifiées |
| Charge multi-utilisateurs | Très bonne (continuous batching) | Limitée | Bonne (continuous batching) |
| API | Compatible OpenAI | API REST propre et compatible OpenAI | API propre et compatible OpenAI |
| Installation | pip ou image Docker | Installateur en une commande | Image Docker |
| Idéal pour | API LLM interne à fort trafic | Développement, usage hors ligne | Écosystème Hugging Face |
D'autres moteurs, comme SGLang ou TensorRT-LLM de NVIDIA, complètent ce paysage. Le choix entre eux se fait idéalement sur un banc d'essai avec votre modèle, votre matériel et votre profil de requêtes.
Déployer vLLM en production
Passer d'une commande sur une machine de test à un service fiable demande quelques décisions d'architecture.
- Dimensionner le GPU : la mémoire doit contenir les poids du modèle et laisser assez de place au KV cache pour le nombre de requêtes simultanées visé. Un modèle de 7 à 8 milliards de paramètres en 16 bits occupe environ 15 Go de poids.
- Répartir les grands modèles : l'option
--tensor-parallel-sizedistribue un modèle sur plusieurs GPU d'un même serveur. - Quantifier : un modèle publié en version AWQ, GPTQ ou FP8 réduit la mémoire nécessaire, au prix d'une légère perte de qualité à évaluer. Voir notre article sur la quantization.
- Orchestrer : sur Kubernetes, chaque instance tourne dans un pod doté de GPU, éventuellement géré par une plateforme comme KServe, avec mise à l'échelle selon la file d'attente.
- Sécuriser et router : une passerelle placée devant vLLM gère l'authentification, les quotas par équipe et le routage entre modèles.
- Superviser : vLLM expose des métriques au format Prometheus (latence du premier token, débit, occupation du KV cache) à suivre dans un tableau de bord.
Le guide vLLM : serveur d'inférence pour LLM détaille ces étapes et les optimisations disponibles.
Quand choisir vLLM ?
Le critère décisif est la charge : vLLM brille lorsqu'il faut servir beaucoup de requêtes simultanées sur des GPU dédiés.
vLLM est adapté
- Vous servez un modèle ouvert à de nombreux utilisateurs.
- Vous disposez de GPU dédiés, dans le cloud ou sur site.
- Vos applications utilisent déjà l'API d'OpenAI.
- Le volume rend une API facturée au token trop coûteuse.
Un autre choix est préférable
- Vous testez un modèle sur votre ordinateur : Ollama suffit.
- Vous n'avez pas de GPU et un faible volume de requêtes.
- Un modèle propriétaire par API répond déjà au besoin.
- L'équipe ne peut pas assurer l'exploitation d'une infrastructure GPU.
Outils et alternatives autour de vLLM
vLLM se place au cœur d'une chaîne de serving : il charge des modèles, s'intègre à une infrastructure et se compare à d'autres moteurs.
- Modèles
Hugging Face
Le Hub d'où vLLM télécharge la plupart des modèles qu'il sert.
- Alternative locale
Ollama
Exécution simplifiée sur un poste, pour le prototypage.
- Alternative
Text Generation Inference
Le serveur d'inférence de Hugging Face, aux fonctions proches.
- Alternative
SGLang
Moteur de serving open source performant, réputé pour la réutilisation du cache entre requêtes.
- Alternative
TensorRT-LLM
Bibliothèque de NVIDIA pour optimiser l'inférence sur ses GPU.
- Déploiement
KServe
Plateforme de serving sur Kubernetes, capable d'utiliser vLLM comme moteur.
- Infrastructure
Kubernetes
Orchestration des conteneurs vLLM et de leurs ressources GPU.
- Supervision
Prometheus
Collecte des métriques exposées par vLLM : latence, débit, occupation du cache.
Les concepts à connaître pour comprendre vLLM
Le fonctionnement de vLLM repose sur quelques notions clés de l'inférence des LLM.
- TokenL'unité générée par le modèle, et la base des mesures de débit.
- KV cacheLe cache des calculs d'attention, principal consommateur de mémoire GPU à l'inférence.
- QuantizationLa réduction de précision des poids pour servir un modèle sur moins de mémoire.
- CUDALa plateforme de calcul de NVIDIA sur laquelle reposent les noyaux GPU de vLLM.
- LLMOpsLes pratiques d'exploitation des LLM en production, dont le serving fait partie.
- FinOps des LLML'arbitrage économique entre API facturée au token et auto-hébergement.
Ressources pour approfondir vLLM
Trois articles pour passer du serveur d'inférence à une plateforme LLM complète.
- Guide
vLLM : serveur d'inférence pour LLM
Les optimisations de vLLM et un tutoriel complet pour exposer un modèle en API.
Lire l'article - Déploiement
KServe : exposer des LLM sur Kubernetes
Industrialiser le serving de LLM sur un cluster Kubernetes.
Lire l'article - Coûts
FinOps des LLM : API vs self-hosting
À partir de quel volume l'auto-hébergement devient-il rentable ?
Lire l'article
Questions fréquentes
Questions fréquentes
Expertise
À propos de l'auteur
Équipe Blent
Les ingénieurs et mentors Blent conçoivent, évaluent et mettent en production des applications LLM, et forment chaque année des centaines de professionnels à l'IA générative.
Sources et méthodologie
- Kwon et al., Efficient Memory Management for Large Language Model Serving with PagedAttention, SOSP 2023
- Documentation officielle de vLLM
- Retours d'expérience des projets et formations Blent
Comment vLLM sert-il un modèle ?
Entre le lancement du serveur et la réponse renvoyée à l'utilisateur, vLLM enchaîne six étapes. Les trois dernières se répètent en continu pour toutes les requêtes en cours.
Charger le modèle
Les poids sont téléchargés depuis le Hub de Hugging Face ou un répertoire local, puis chargés sur un ou plusieurs GPU. Un modèle trop gros pour une carte est réparti entre plusieurs.
Réserver la mémoire du KV cache
vLLM mesure la mémoire restante et la découpe en blocs destinés au cache clé-valeur, qui stocke les calculs d'attention déjà effectués pour chaque requête.
Recevoir les requêtes
Le serveur HTTP expose les routes de l'API OpenAI (chat, complétions, embeddings). Chaque requête est placée dans une file d'attente.
Ordonnancer en continu
À chaque itération, l'ordonnanceur choisit quelles requêtes avancer, en intègre de nouvelles dès qu'un emplacement se libère et retire celles qui sont terminées.
Calculer avec PagedAttention
Le modèle traite le prompt (prefill) puis génère les tokens (decode) en lisant le KV cache bloc par bloc, sans exiger de mémoire contiguë.
Diffuser la réponse
Les tokens sont renvoyés au fil de l'eau en streaming, et les métriques (latence, débit, occupation du cache) sont exposées pour la supervision.