Démarrage rapide de vLLM : Serveur de LLM haute performance - en 2026
Inférence LLM rapide avec l’API OpenAI
vLLM est un moteur d’inférence et de service à haut débit et économe en mémoire pour les grands modèles de langage (LLM), développé par le Sky Computing Lab de UC Berkeley.
Grâce à son algorithme révolutionnaire PagedAttention, vLLM atteint un débit 14 à 24 fois supérieur aux méthodes de service traditionnelles, ce qui en fait le choix privilégié pour les déploiements LLM en production. Pour comprendre comment vLLM s’inscrit parmi Ollama, Docker Model Runner, LocalAI et les fournisseurs cloud — y compris les compromis en termes de coût et d’infrastructure — consultez Hébergement LLM : Local, Auto-Hébergé et Infrastructure Cloud Comparés.

Qu’est-ce que vLLM ?
vLLM (virtual LLM) est une bibliothèque open source pour l’inférence et le service rapide de LLM qui est rapidement devenue la norme de l’industrie pour les déploiements en production. Publiée en 2023, elle a introduit PagedAttention, une technique de gestion de mémoire innovante qui améliore considérablement l’efficacité du service.
Fonctionnalités Clés
Performances à Haut Débit : vLLM offre un débit 14 à 24 fois supérieur à celui de HuggingFace Transformers avec le même matériel. Ce gain de performance massif provient du batch processing continu (continuous batching), des noyaux CUDA optimisés et de l’algorithme PagedAttention qui élimine la fragmentation de la mémoire.
Compatibilité API OpenAI : vLLM inclut un serveur API intégré entièrement compatible avec le format d’OpenAI. Cela permet une migration transparente d’OpenAI vers une infrastructure auto-hébergée sans modifier le code de l’application. Il suffit de pointer votre client API vers le point de terminaison (endpoint) de vLLM et cela fonctionne de manière transparente.
Algorithme PagedAttention : L’innovation clé derrière les performances de vLLM est PagedAttention, qui applique le concept de pagination de la mémoire virtuelle aux mécanismes d’attention. Au lieu d’allouer des blocs de mémoire contigus pour les caches KV (ce qui mène à une fragmentation), PagedAttention divise la mémoire en blocs de taille fixe qui peuvent être alloués à la demande. Cela réduit le gaspillage de mémoire jusqu’à 4 fois et permet des tailles de lot (batch) beaucoup plus grandes.
Batching Continu : Contrairement au batch processing statique où vous attendez que toutes les séquences soient terminées, vLLM utilise un batch processing continu (roulant). Dès qu’une séquence est terminée, une nouvelle peut être ajoutée au lot. Cela maximise l’utilisation du GPU et minimise la latence pour les requêtes entrantes.
Prise en Charge Multi-GPU : vLLM prend en charge la parallélisation des tenseurs (tensor parallelism) et la parallélisation par pipeline (pipeline parallelism) pour distribuer les grands modèles sur plusieurs GPU. Il peut servir efficacement des modèles qui ne tiennent pas dans la mémoire d’un seul GPU, supportant des configurations allant de 2 à 8 GPU ou plus.
Support Large de Modèles : Compatible avec les architectures de modèles populaires, y compris LLaMA, Mistral, Mixtral, Qwen, Phi, Gemma et bien d’autres. Supporte à la fois les modèles instruction-tuned et de base depuis HuggingFace Hub.
Quand Utiliser vLLM
vLLM excelle dans des scénarios spécifiques où ses points forts sont mis en valeur :
Services API de Production : Lorsque vous devez servir un LLM à de nombreux utilisateurs concurrents via API, le haut débit et le batch processing efficace de vLLM en font le meilleur choix. Les entreprises exploitant des chatbots, des assistants de code ou des services de génération de contenu bénéficient de sa capacité à traiter des centaines de requêtes par seconde.
Charge de Travail à Forte Concurrence : Si votre application a de nombreux utilisateurs simultanés effectuant des requêtes, le batching continu et PagedAttention de vLLM permettent de servir plus d’utilisateurs avec le même matériel par rapport aux alternatives.
Optimisation des Coûts : Lorsque les coûts GPU sont un facteur important, le débit supérieur de vLLM signifie que vous pouvez servir le même trafic avec moins de GPU, réduisant directement les coûts d’infrastructure. L’efficacité mémoire de 4 fois de PagedAttention permet également d’utiliser des instances GPU plus petites et moins chères.
Déploiements Kubernetes : La conception sans état (stateless) et l’architecture adaptée aux conteneurs de vLLM en font un choix idéal pour les clusters Kubernetes. Ses performances constantes sous charge et sa gestion simple des ressources s’intègrent bien avec l’infrastructure cloud-native.
Quand NE PAS Utiliser vLLM : Pour le développement local, l’expérimentation ou les scénarios mono-utilisateur, des outils comme Ollama ou llama.cpp offrent une meilleure expérience utilisateur avec une configuration plus simple. La complexité de vLLM est justifiée lorsque vous avez besoin de ses avantages de performance pour des charges de travail en production.
Comment Installer vLLM
Prérequis
Avant d’installer vLLM, assurez-vous que votre système répond à ces exigences :
- GPU : GPU NVIDIA avec capacité de calcul 7.0 ou supérieure (V100, T4, A10, A100, H100, série RTX 20/30/40)
- CUDA : Version 11.8 ou supérieure
- Python : 3.8 à 3.11
- VRAM : Minimum 16 Go pour les modèles 7B, 24 Go ou plus pour 13B, 40 Go ou plus pour les modèles plus grands
- Pilote : Pilote NVIDIA 450.80.02 ou plus récent
Installation via pip
La méthode d’installation la plus simple est d’utiliser pip. Cela fonctionne sur les systèmes avec CUDA 11.8 ou plus récent :
# Créer un environnement virtuel (recommandé)
python3 -m venv vllm-env
source vllm-env/bin/activate
# Installer vLLM
pip install vllm
# Vérifier l'installation
python -c "import vllm; print(vllm.__version__)"
Pour les systèmes avec différentes versions de CUDA, installez la roue appropriée :
# Pour CUDA 12.1
pip install vllm==0.4.2+cu121 -f https://github.com/vllm-project/vllm/releases
# Pour CUDA 11.8
pip install vllm==0.4.2+cu118 -f https://github.com/vllm-project/vllm/releases
Installation avec Docker
Docker offre la méthode de déploiement la plus fiable, surtout pour la production :
# Récupérer l'image officielle vLLM
docker pull vllm/vllm-openai:latest
# Exécuter vLLM avec support GPU
docker run --runtime nvidia --gpus all \
-v ~/.cache/huggingface:/root/.cache/huggingface \
-p 8000:8000 \
--ipc=host \
vllm/vllm-openai:latest \
--model mistralai/Mistral-7B-Instruct-v0.2
Le drapeau --ipc=host est important pour les configurations multi-GPU car il permet une intercommunication des processus appropriée.
Construction depuis les Sources
Pour les fonctionnalités les plus récentes ou des modifications personnalisées, construisez depuis les sources :
git clone https://github.com/vllm-project/vllm.git
cd vllm
pip install -e .
Guide Rapide de Démarrage vLLM
Exécuter Votre Premier Modèle
Démarrer vLLM avec un modèle en utilisant l’interface en ligne de commande :
# Télécharger et servir Mistral-7B avec une API compatible OpenAI
python -m vllm.entrypoints.openai.api_server \
--model mistralai/Mistral-7B-Instruct-v0.2 \
--port 8000
vLLM téléchargera automatiquement le modèle depuis HuggingFace Hub (s’il n’est pas en cache) et démarrera le serveur. Vous verrez une sortie indiquant que le serveur est prêt :
INFO: Started server process [12345]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:8000
Effectuer des Requêtes API
Une fois le serveur en marche, vous pouvez effectuer des requêtes en utilisant le client Python OpenAI ou curl :
En utilisant curl :
curl http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{
"model": "mistralai/Mistral-7B-Instruct-v0.2",
"prompt": "Explain what vLLM is in one sentence:",
"max_tokens": 100,
"temperature": 0.7
}'
En utilisant le Client Python OpenAI :
from openai import OpenAI
# Pointer vers votre serveur vLLM
client = OpenAI(
base_url="http://localhost:8000/v1",
api_key="not-needed" # vLLM ne requiert pas d'authentification par défaut
)
response = client.completions.create(
model="mistralai/Mistral-7B-Instruct-v0.2",
prompt="Explain what vLLM is in one sentence:",
max_tokens=100,
temperature=0.7
)
print(response.choices[0].text)
API de Chat Completions :
response = client.chat.completions.create(
model="mistralai/Mistral-7B-Instruct-v0.2",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "What is PagedAttention?"}
],
max_tokens=200
)
print(response.choices[0].message.content)
Configuration Avancée
vLLM offre de nombreux paramètres pour optimiser les performances :
python -m vllm.entrypoints.openai.api_server \
--model mistralai/Mistral-7B-Instruct-v0.2 \
--port 8000 \
--gpu-memory-utilization 0.95 \ # Utiliser 95% de la mémoire GPU
--max-model-len 8192 \ # Longueur maximale de séquence
--tensor-parallel-size 2 \ # Utiliser 2 GPU avec parallélisation des tenseurs
--dtype float16 \ # Utiliser la précision FP16
--max-num-seqs 256 # Taille de lot maximale
Paramètres Clés Expliqués :
--gpu-memory-utilization: Quantité de mémoire GPU à utiliser (0.90 = 90%). Des valeurs plus élevées permettent des lots plus grands mais laissent moins de marge pour les pics de mémoire.--max-model-len: Longueur de contexte maximale. Réduire cela libère de la mémoire pour des lots plus grands.--tensor-parallel-size: Nombre de GPU sur lesquels diviser le modèle.--dtype: Type de données pour les poids (float16, bfloat16 ou float32). FP16 est généralement optimal.--max-num-seqs: Nombre maximal de séquences à traiter dans un lot.
vLLM vs Ollama
vLLM est conçu pour le service de production à haut débit et multi-utilisateurs avec batching continu, PagedAttention et support multi-GPU. Ollama est optimisé pour une configuration locale rapide, une commodité mono-utilisateur et une gestion simple des modèles.
Pour un guide de décision détaillé couvrant les signaux de migration, les étapes de planification, la configuration Docker Compose et une liste de contrôle pratique, consultez D’Ollama à vLLM : Quand Migrer Votre Serveur LLM Local.
vLLM vs Docker Model Runner
Docker a récemment introduit Model Runner (anciennement GenAI Stack) comme solution officielle pour le déploiement local de modèles d’IA. Comment se compare-t-il à vLLM ?
Philosophie d’Architecture
Docker Model Runner vise à être le « Docker de l’IA » – une méthode simple et standardisée pour exécuter des modèles d’IA localement avec la même facilité que l’exécution de conteneurs. Il abstrait la complexité et fournit une interface cohérente entre différents modèles et frameworks.
vLLM est un moteur d’inférence spécialisé axé uniquement sur le service de LLM avec des performances maximales. C’est un outil de bas niveau que vous conteneurisez avec Docker, plutôt qu’une plateforme complète.
Mise en Place et Démarrage
L’installation de Docker Model Runner est simple pour les utilisateurs de Docker :
docker model pull llama3:8b
docker model run llama3:8b
Cette similitude avec le flux de travail des images Docker le rend immédiatement familier pour les développeurs utilisant déjà des conteneurs.
vLLM nécessite une configuration initiale plus importante (Python, CUDA, dépendances) ou l’utilisation d’images Docker préconstruites :
docker pull vllm/vllm-openai:latest
docker run --runtime nvidia --gpus all vllm/vllm-openai:latest --model <model-name>
Caractéristiques de Performance
vLLM offre un débit supérieur pour les scénarios multi-utilisateurs grâce à PagedAttention et au batching continu. Pour les services API de production traitant des centaines de requêtes par seconde, les optimisations de vLLM offrent un débit 2 à 5 fois meilleur que les approches de service génériques.
Docker Model Runner se concentre sur la facilité d’utilisation plutôt que sur les performances maximales. Il est adapté au développement local, aux tests et aux charges de travail modérées, mais n’implémente pas les optimisations avancées qui permettent à vLLM d’exceller à l’échelle.
Support des Modèles
Docker Model Runner fournit une bibliothèque de modèles soigneusement sélectionnée avec un accès en une commande à des modèles populaires. Il prend en charge plusieurs frameworks (pas seulement des LLM), y compris Stable Diffusion, Whisper et d’autres modèles d’IA, le rendant plus polyvalent pour différentes charges de travail d’IA.
vLLM se spécialise dans l’inférence de LLM avec un support approfondi des modèles de langage basés sur transformers. Il prend en charge tout LLM compatible HuggingFace mais ne s’étend pas à d’autres types de modèles d’IA comme la génération d’images ou la reconnaissance vocale.
Déploiement en Production
vLLM est éprouvé en production dans des entreprises comme Anthropic, Replicate et bien d’autres, servant des milliards de jetons quotidiennement. Ses caractéristiques de performance et sa stabilité sous charge élevée en font la norme de fait pour le service de LLM en production.
Docker Model Runner est plus récent et se positionne davantage pour les scénarios de développement et de test local. Bien qu’il puisse servir du trafic de production, il manque du parcours éprouvé et des optimisations de performance que les déploiements de production exigent.
Écosystème d’Intégration
vLLM s’intègre avec les outils d’infrastructure de production : opérateurs Kubernetes, métriques Prometheus, Ray pour le service distribué et une compatibilité étendue de l’API OpenAI pour les applications existantes.
Docker Model Runner s’intègre naturellement avec l’écosystème Docker et Docker Desktop. Pour les équipes déjà standardisées sur Docker, cette intégration offre une expérience cohérente, mais avec moins de fonctionnalités spécialisées de service de LLM.
Quand Utiliser Chacun
Utiliser vLLM pour :
- Services API LLM de production
- Déploiements à haut débit et multi-utilisateurs
- Déploiements cloud sensibles aux coûts nécessitant une efficacité maximale
- Environnements Kubernetes et cloud-native
- Lorsque vous avez besoin d’une scalabilité et de performances éprouvées
Utiliser Docker Model Runner pour :
- Développement et tests locaux
- Exécuter divers types de modèles d’IA (pas seulement des LLM)
- Équipes fortement investies dans l’écosystème Docker
- Expérimentation rapide sans configuration d’infrastructure
- Objectifs d’apprentissage et éducatifs
Approche Hybride : De nombreuses équipes développent localement avec Docker Model Runner pour la commodité, puis déploient avec vLLM en production pour les performances. Les images Docker Model Runner peuvent également être utilisées pour exécuter des conteneurs vLLM, combinant les deux approches.
Bonnes Pratiques de Déploiement en Production
Déploiement Docker
Créer une configuration Docker Compose prête pour la production :
version: '3.8'
services:
vllm:
image: vllm/vllm-openai:latest
runtime: nvidia
environment:
- CUDA_VISIBLE_DEVICES=0,1
volumes:
- ~/.cache/huggingface:/root/.cache/huggingface
- ./logs:/logs
ports:
- "8000:8000"
command: >
--model mistralai/Mistral-7B-Instruct-v0.2
--tensor-parallel-size 2
--gpu-memory-utilization 0.90
--max-num-seqs 256
--max-model-len 8192
restart: unless-stopped
shm_size: '16gb'
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 2
capabilities: [gpu]
Déploiement Kubernetes
Déployer vLLM sur Kubernetes pour une échelle de production :
apiVersion: apps/v1
kind: Deployment
metadata:
name: vllm-server
spec:
replicas: 2
selector:
matchLabels:
app: vllm
template:
metadata:
labels:
app: vllm
spec:
containers:
- name: vllm
image: vllm/vllm-openai:latest
args:
- --model
- mistralai/Mistral-7B-Instruct-v0.2
- --tensor-parallel-size
- "2"
- --gpu-memory-utilization
- "0.90"
resources:
limits:
nvidia.com/gpu: 2
ports:
- containerPort: 8000
volumeMounts:
- name: cache
mountPath: /root/.cache/huggingface
volumes:
- name: cache
hostPath:
path: /mnt/huggingface-cache
---
apiVersion: v1
kind: Service
metadata:
name: vllm-service
spec:
selector:
app: vllm
ports:
- port: 80
targetPort: 8000
type: LoadBalancer
Supervision et Observabilité
vLLM expose des métriques Prometheus pour la supervision :
import requests
# Récupérer les métriques
metrics = requests.get("http://localhost:8000/metrics").text
print(metrics)
Métriques clés à surveiller :
vllm:num_requests_running- Requêtes activesvllm:gpu_cache_usage_perc- Utilisation du cache KVvllm:time_to_first_token- Métrique de latencevllm:time_per_output_token- Vitesse de génération
Ajustement des Performances
Optimiser l’Utilisation de la Mémoire GPU : Commencez avec --gpu-memory-utilization 0.90 et ajustez selon le comportement observé. Des valeurs plus élevées permettent des lots plus grands mais risquent des erreurs OOM (Out Of Memory) lors des pics de trafic.
Ajuster la Longueur de Séquence Max : Si votre cas d’utilisation n’a pas besoin de la longueur de contexte complète, réduisez --max-model-len. Cela libère de la mémoire pour des lots plus grands. Par exemple, si vous n’avez besoin que d’un contexte de 4K, définissez --max-model-len 4096 au lieu d’utiliser le maximum du modèle (souvent 8K-32K).
Choisir la Quantisation Appropriée : Pour les modèles qui le supportent, utilisez des versions quantifiées (8 bits, 4 bits) pour réduire la mémoire et augmenter le débit :
--quantization awq # Pour les modèles quantifiés AWQ
--quantization gptq # Pour les modèles quantifiés GPTQ
Activer la Mise en Cache de Préfixes : Pour les applications avec des prompts répétés (comme des chatbots avec des messages système), activez la mise en cache de préfixes :
--enable-prefix-caching
Cela met en cache les valeurs KV pour les préfixes courants, réduisant le calcul pour les requêtes partageant le même préfixe de prompt.
Dépannage des Problèmes Courants
Erreurs de Dépassement de Mémoire
Symptômes : Le serveur plante avec des erreurs de manque de mémoire CUDA.
Solutions :
- Réduire
--gpu-memory-utilizationà 0.85 ou 0.80 - Diminuer
--max-model-lensi votre cas d’utilisation le permet - Baisser
--max-num-seqspour réduire la taille du lot - Utiliser une version quantifiée du modèle
- Activer la parallélisation des tenseurs pour distribuer sur plus de GPU
Sur une carte unique de 16 Go, la plupart de ces erreurs OOM sont dues au budget du cache KV plutôt qu’aux seuls poids — Cache KV sur GPU 16 GB couvre la formule exacte, le type de données du cache KV en FP8, et les compromis de mise en cache de préfixes derrière --max-model-len et --max-num-seqs avant de recourir à un modèle plus petit.
Faible Débit
Symptômes : Le serveur traite moins de requêtes que prévu.
Solutions :
- Augmenter
--max-num-seqspour permettre des lots plus grands - Élever
--gpu-memory-utilizationsi vous avez de la marge - Vérifier si le CPU est le goulot d’étranglement avec
htop– envisager des CPU plus rapides - Vérifier l’utilisation du GPU avec
nvidia-smi– devrait être de 95% ou plus - Activer FP16 si vous utilisez FP32 :
--dtype float16
Temps de Premier Jeton Lents
Symptômes : Latence élevée avant le début de la génération.
Solutions :
- Utiliser des modèles plus petits pour les applications sensibles à la latence
- Activer la mise en cache de préfixes pour les prompts répétés
- Réduire
--max-num-seqspour prioriser la latence au détriment du débit - Envisager le décodage spéculatif pour les modèles pris en charge
- Optimiser la configuration de la parallélisation des tenseurs
Échouements de Chargement de Modèle
Symptômes : Le serveur échoue à démarrer, ne peut pas charger le modèle.
Solutions :
- Vérifier que le nom du modèle correspond exactement au format HuggingFace
- Vérifier la connectivité réseau vers HuggingFace Hub
- S’assurer d’un espace disque suffisant dans
~/.cache/huggingface - Pour les modèles à accès restreint, définir la variable d’environnement
HF_TOKEN - Essayer de télécharger manuellement avec
huggingface-cli download <model>
Fonctionnalités Avancées
Décodage Spéculatif
vLLM prend en charge le décodage spéculatif, où un petit modèle de brouillon propose des jetons que le modèle cible plus grand vérifie. Cela peut accélérer la génération de 1,5 à 2 fois. Pour un guide complet des méthodes de décodage spéculatif — modèles de brouillon, EAGLE-3, P-EAGLE et n-gramme — consultez Décodage Spéculatif : Inférence Plus Rapide Sans Perte de Qualité.
python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Llama-2-70b-chat-hf \
--speculative-model meta-llama/Llama-2-7b-chat-hf \
--num-speculative-tokens 5
Adaptateurs LoRA
Servir plusieurs adaptateurs LoRA sur un modèle de base sans charger plusieurs modèles complets :
python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Llama-2-7b-hf \
--enable-lora \
--lora-modules sql-lora=./path/to/sql-adapter \
code-lora=./path/to/code-adapter
Puis spécifiez quel adaptateur utiliser par requête :
response = client.completions.create(
model="sql-lora", # Utiliser l'adaptateur SQL
prompt="Convert this to SQL: Show me all users created this month"
)
Service Multi-LoRA
Le service multi-LoRA de vLLM permet d’héberger des dizaines d’adaptateurs affinés avec une surcharge mémoire minimale. C’est idéal pour servir des variantes de modèles spécifiques aux clients ou aux tâches :
# Requête avec un adaptateur LoRA spécifique
response = client.chat.completions.create(
model="meta-llama/Llama-2-7b-hf",
messages=[{"role": "user", "content": "Write SQL query"}],
extra_body={"lora_name": "sql-lora"}
)
Mise en Cache de Préfixes
Activer la mise en cache automatique de préfixes pour éviter de recalculer le cache KV pour les préfixes de prompts répétés :
--enable-prefix-caching
Cela est particulièrement efficace pour :
- Chatbots avec des prompts système fixes
- Applications RAG avec des templates de contexte cohérents
- Prompts d’apprentissage peu exemplaires (few-shot) répétés entre les requêtes
La mise en cache de préfixes peut réduire le temps jusqu’au premier jeton de 50 à 80 % pour les requêtes partageant des préfixes de prompt.
Exemples d’Intégration
Intégration LangChain
from langchain.llms import VLLMOpenAI
llm = VLLMOpenAI(
openai_api_key="EMPTY",
openai_api_base="http://localhost:8000/v1",
model_name="mistralai/Mistral-7B-Instruct-v0.2",
max_tokens=512,
temperature=0.7,
)
response = llm("Explain PagedAttention in simple terms")
print(response)
Intégration LlamaIndex
from llama_index.llms import VLLMServer
llm = VLLMServer(
api_url="http://localhost:8000/v1",
model="mistralai/Mistral-7B-Instruct-v0.2",
temperature=0.7,
max_tokens=512
)
response = llm.complete("What is vLLM?")
print(response)
Application FastAPI
from fastapi import FastAPI
from openai import AsyncOpenAI
app = FastAPI()
client = AsyncOpenAI(
base_url="http://localhost:8000/v1",
api_key="not-needed"
)
@app.post("/generate")
async def generate(prompt: str):
response = await client.completions.create(
model="mistralai/Mistral-7B-Instruct-v0.2",
prompt=prompt,
max_tokens=200
)
return {"result": response.choices[0].text}
Benchmarks de Performance
Les données de performance du monde réel aident à illustrer les avantages de vLLM :
Comparaison de Débit (Mistral-7B sur GPU A100) :
- vLLM : ~3 500 jetons/seconde avec 64 utilisateurs concurrents
- HuggingFace Transformers : ~250 jetons/seconde avec la même concurrence
- Ollama : ~1 200 jetons/seconde avec la même concurrence
- Résultat : vLLM offre une amélioration de 14 fois par rapport aux implémentations basiques
Efficacité Mémoire (LLaMA-2-13B) :
- Implémentation standard : 24 Go VRAM, 32 séquences concurrentes
- vLLM avec PagedAttention : 24 Go VRAM, 128 séquences concurrentes
- Résultat : 4 fois plus de requêtes concurrentes avec la même mémoire
Latence Sous Charge (Mixtral-8x7B sur 2xA100) :
- vLLM : latence P50 180 ms, latence P99 420 ms à 100 req/s
- Service standard : latence P50 650 ms, latence P99 3 200 ms à 100 req/s
- Résultat : vLLM maintient une latence constante sous forte charge
Ces benchmarks démontrent pourquoi vLLM est devenu la norme de fait pour le service de LLM en production où les performances comptent.
Analyse des Coûts
Comprendre les implications en termes de coûts du choix de vLLM :
Scénario : Servir 1 M de requêtes/jour
Avec un Service Standard :
- Requis : 8 GPU A100 (80 Go)
- Coût AWS : ~32 $/heure × 24 × 30 = 23 040 $/mois
- Coût par 1 M de jetons : ~0,75 $
Avec vLLM :
- Requis : 2 GPU A100 (80 Go)
- Coût AWS : ~8 $/heure × 24 × 30 = 5 760 $/mois
- Coût par 1 M de jetons : ~0,19 $
- Économies : 17 280 $/mois (réduction de 75 %)
Cet avantage en termes de coûts augmente avec l’échelle. Les organisations servant des milliards de jetons par mois économisent des centaines de milliers de dollars en utilisant le service optimisé de vLLM plutôt que des implémentations naïves.
Considérations de Sécurité
Authentification
vLLM n’inclut pas d’authentification par défaut. Pour la production, implémentez l’authentification au niveau du proxy inversé :
# Configuration Nginx
location /v1/ {
auth_request /auth;
proxy_pass http://vllm-backend:8000;
}
location /auth {
proxy_pass http://auth-service:8080/verify;
proxy_pass_request_body off;
proxy_set_header Content-Length "";
proxy_set_header X-Original-URI $request_uri;
}
Ou utilisez des passerelles API comme Kong, Traefik ou AWS API Gateway pour une authentification et une limitation de débit de niveau entreprise.
Isolation Réseau
Exécutez vLLM dans des réseaux privés, pas exposé directement à Internet :
# Exemple de NetworkPolicy Kubernetes
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: vllm-access
spec:
podSelector:
matchLabels:
app: vllm
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
role: api-gateway
ports:
- protocol: TCP
port: 8000
Limitation de Débit
Implémentez une limitation de débit pour empêcher les abus :
# Exemple utilisant Redis pour la limitation de débit
from fastapi import FastAPI, HTTPException
from fastapi.middleware.cors import CORSMiddleware
import redis
from datetime import datetime, timedelta
app = FastAPI()
redis_client = redis.Redis(host='localhost', port=6379)
@app.middleware("http")
async def rate_limit_middleware(request, call_next):
client_ip = request.client.host
key = f"rate_limit:{client_ip}"
requests = redis_client.incr(key)
if requests == 1:
redis_client.expire(key, 60) # Fenêtre de 60 secondes
if requests > 60: # 60 requêtes par minute
raise HTTPException(status_code=429, detail="Rate limit exceeded")
return await call_next(request)
Contrôle d’Accès aux Modèles
Pour les déploiements multi-locataires, contrôlez quels utilisateurs peuvent accéder à quels modèles :
ALLOWED_MODELS = {
"user_tier_1": ["mistralai/Mistral-7B-Instruct-v0.2"],
"user_tier_2": ["mistralai/Mistral-7B-Instruct-v0.2", "meta-llama/Llama-2-13b-chat-hf"],
"admin": ["*"] # Tous les modèles
}
def verify_model_access(user_tier: str, model: str) -> bool:
allowed = ALLOWED_MODELS.get(user_tier, [])
return "*" in allowed or model in allowed
Guide de Migration
D’OpenAI vers vLLM
La migration d’OpenAI vers vLLM auto-hébergé est simple grâce à la compatibilité API :
Avant (OpenAI) :
from openai import OpenAI
client = OpenAI(api_key="sk-...")
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": "Hello"}]
)
Après (vLLM) :
from openai import OpenAI
client = OpenAI(
base_url="https://your-vllm-server.com/v1",
api_key="your-internal-key" # Si vous avez ajouté une authentification
)
response = client.chat.completions.create(
model="mistralai/Mistral-7B-Instruct-v0.2",
messages=[{"role": "user", "content": "Hello"}]
)
Seulement deux modifications nécessaires : mettre à jour base_url et le nom du model. Tout le reste du code reste identique.
D’Ollama vers vLLM
Ollama utilise un format d’API différent. Le changement basique côté client est le passage du point de terminaison REST d’Ollama à l’API compatible OpenAI de vLLM :
API Ollama :
import requests
response = requests.post('http://localhost:11434/api/generate',
json={'model': 'llama2', 'prompt': 'Why is the sky blue?'})
Équivalent vLLM :
from openai import OpenAI
client = OpenAI(base_url="http://localhost:8000/v1", api_key="not-needed")
response = client.completions.create(
model="meta-llama/Llama-2-7b-chat-hf",
prompt="Why is the sky blue?"
)
Pour un guide de migration approfondi couvrant la sélection du modèle, les templates de chat, la migration par étapes et une liste de contrôle pratique, consultez D’Ollama à vLLM : Quand Migrer Votre Serveur LLM Local.
De HuggingFace Transformers vers vLLM
Migration d’utilisation directe en Python :
HuggingFace :
from transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained("mistralai/Mistral-7B-Instruct-v0.2")
tokenizer = AutoTokenizer.from_pretrained("mistralai/Mistral-7B-Instruct-v0.2")
inputs = tokenizer("Hello", return_tensors="pt")
outputs = model.generate(**inputs, max_new_tokens=100)
result = tokenizer.decode(outputs[0])
vLLM :
from vllm import LLM, SamplingParams
llm = LLM(model="mistralai/Mistral-7B-Instruct-v0.2")
sampling_params = SamplingParams(max_tokens=100)
outputs = llm.generate("Hello", sampling_params)
result = outputs[0].outputs[0].text
L’API Python de vLLM est plus simple et beaucoup plus rapide pour l’inférence par lots.
Avenir de vLLM
vLLM continue son développement rapide avec des fonctionnalités excitantes à l’horizon :
Service Dissocié (Disaggregated Serving) : Séparation du préremplissage (traitement du prompt) et du décodage (génération de jetons) sur différents GPU pour optimiser l’utilisation des ressources. Le préremplissage est limité par le calcul tandis que le décodage est limité par la mémoire, donc l’exécution sur du matériel spécialisé améliore l’efficacité.
Inférence Multi-Nœuds : Distribution de très grands modèles (100B+ paramètres) sur plusieurs machines, permettant le service de modèles trop grands pour des configurations mono-nœud.
Quantisation Améliorée : Support de nouveaux formats de quantisation comme GGUF (utilisé par llama.cpp) et une intégration AWQ/GPTQ améliorée pour de meilleures performances avec les modèles quantifiés.
Améliorations du Décodage Spéculatif : Modèles de brouillon plus efficaces et stratégies de spéculation adaptatives pour atteindre des accélérations plus élevées sans perte de précision.
Optimisations de l’Attention : FlashAttention 3, ring attention pour les contextes extrêmement longs (100K+ jetons) et d’autres mécanismes d’attention de pointe.
Meilleure Couverture des Modèles : Expansion du support vers les modèles multimodaux (modèles vision-langage), les modèles audio et les architectures spécialisées à mesure qu’ils émergent.
Le projet vLLM maintient un développement actif avec des contributions d’UC Berkeley, Anyscale et de la communauté open source plus large. À mesure que le déploiement de LLM devient plus critique pour les systèmes de production, le rôle de vLLM en tant que standard de performance continue de croître. Pour une comparaison plus large de vLLM avec d’autres infrastructures LLM locales et cloud, consultez notre Hébergement LLM : Local, Auto-Hébergé et Infrastructure Cloud Comparés.
Liens Utiles
Articles Liés sur Ce Site
-
Hébergement Local LLM : Guide Complet 2026 - Ollama, vLLM, LocalAI, Jan, LM Studio et Plus - Comparaison complète de plus de 12 outils d’hébergement LLM locaux, y compris une analyse détaillée de vLLM aux côtés d’Ollama, LocalAI, Jan, LM Studio et d’autres. Couvre la maturation de l’API, le support des appels d’outils, la compatibilité GGUF et les benchmarks de performance pour aider à choisir la bonne solution.
-
Aide-mémoire Ollama - Référence complète et aide-mémoire des commandes Ollama couvrant l’installation, la gestion des modèles, l’utilisation de l’API et les bonnes pratiques pour le déploiement local de LLM. Indispensable pour les développeurs utilisant Ollama en plus ou à la place de vLLM.
-
Démarrage Rapide llama.cpp avec CLI et Serveur - Inférence C/C++ légère pour les modèles GGUF avec llama-cli et llama-server compatible OpenAI. Idéal lorsque vous avez besoin d’un contrôle granulaire, d’un déploiement hors ligne ou d’une pile minimale sans Python.
-
Docker Model Runner vs Ollama : Lequel Choisir ? - Comparaison approfondie du Model Runner de Docker et d’Ollama pour le déploiement local de LLM, analysant les performances, le support GPU, la compatibilité API et les cas d’utilisation. Aide à comprendre le paysage concurrentiel dans lequel vLLM opère.
-
Aide-mémoire Docker Model Runner : Commandes et Exemples - Aide-mémoire pratique de Docker Model Runner avec des commandes et des exemples pour le déploiement de modèles d’IA. Utile pour les équipes comparant l’approche de Docker avec les capacités spécialisées de service de LLM de vLLM.
Ressources Externes et Documentation
-
Dépôt GitHub vLLM - Dépôt vLLM officiel avec code source, documentation complète, guides d’installation et discussions communautaires actives. Ressource essentielle pour rester à jour sur les dernières fonctionnalités et le dépannage des problèmes.
-
Documentation vLLM - Documentation officielle couvrant tous les aspects de vLLM, de la configuration de base à la configuration avancée. Inclut des références API, des guides de réglage des performances et des bonnes pratiques de déploiement.
-
Article PagedAttention - Article académique introduisant l’algorithme PagedAttention qui propulse l’efficacité de vLLM. Lecture essentielle pour comprendre les innovations techniques derrière les avantages de performance de vLLM.
-
Blog vLLM - Blog officiel vLLM présentant les annonces de versions, les benchmarks de performance, les analyses techniques et les études de cas de la communauté issues de déploiements en production.
-
HuggingFace Model Hub - Référentiel exhaustif de LLM open source qui fonctionnent avec vLLM. Recherchez des modèles par taille, tâche, licence et caractéristiques de performance pour trouver le bon modèle pour votre cas d’utilisation.
-
Documentation Ray Serve - Documentation du framework Ray Serve pour construire des déploiements vLLM évolutifs et distribués. Ray fournit des fonctionnalités avancées comme l’autoscaling, le service multi-modèles et la gestion des ressources pour les systèmes de production.
-
NVIDIA TensorRT-LLM - TensorRT-LLM de NVIDIA pour une inférence hautement optimisée sur GPU NVIDIA. Alternative à vLLM avec des stratégies d’optimisation différentes, utile pour la comparaison et la compréhension du paysage de l’optimisation de l’inférence.
-
Référence API OpenAI - Documentation officielle de l’API OpenAI avec laquelle l’API de vLLM est compatible. Référez-vous à cela lors de la construction d’applications qui doivent fonctionner à la fois avec les points de terminaison OpenAI et vLLM auto-hébergés de manière interchangeable.