Lexique · Frameworks / outils IA

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.

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.

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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ë.

  6. 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.

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.

bash
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 :

python
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 :

bash
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èrevLLMOllamaTGI
CibleServing GPU en productionExécution locale, prototypageServing GPU en production
ÉditeurProjet communautaire issu de BerkeleyOllamaHugging Face
MatérielGPU (NVIDIA en priorité)CPU, GPU, puces AppleGPU
Formats de modèlesPoids du Hub, versions quantifiées (AWQ, GPTQ, FP8…)GGUF quantifiéPoids du Hub, versions quantifiées
Charge multi-utilisateursTrès bonne (continuous batching)LimitéeBonne (continuous batching)
APICompatible OpenAIAPI REST propre et compatible OpenAIAPI propre et compatible OpenAI
Installationpip ou image DockerInstallateur en une commandeImage Docker
Idéal pourAPI LLM interne à fort traficDé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-size distribue 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.

Pertinent si

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.
Moins adapté si

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.

Les concepts à connaître pour comprendre vLLM

Le fonctionnement de vLLM repose sur quelques notions clés de l'inférence des LLM.

Ressources pour approfondir vLLM

Trois articles pour passer du serveur d'inférence à une plateforme LLM complète.

Questions fréquentes

Questions fréquentes

Oui. vLLM est un logiciel open source distribué sous licence Apache 2.0, utilisable y compris à des fins commerciales. Le coût réel est celui de l'infrastructure GPU qui l'exécute, et éventuellement celui de la licence du modèle servi.

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