Introduction
vLLM est un moteur d'inférence open-source pour les grands modèles de langage (LLM), conçu pour une vitesse et une efficacité exceptionnelles. Lancé en 2023, il utilise la technique PagedAttention pour optimiser la mémoire GPU, permettant jusqu'à 4x plus de throughput que des alternatives comme Hugging Face Transformers. En 2026, avec l'essor des agents IA et des applications en temps réel, vLLM est indispensable pour les développeurs qui déploient des modèles localement sans compromettre les performances.
Pourquoi l'utiliser ? Imaginez servir un modèle comme Llama 3 à 100 requêtes/seconde sur un GPU unique, au lieu de 20-30 avec des outils standards. Ce tutoriel beginner vous guide de l'installation au déploiement, avec du code complet et fonctionnel. À la fin, vous saurez lancer un serveur compatible OpenAI et interroger vos LLM en production. Idéal pour les prototypes RAG, chatbots ou APIs IA scalables. (128 mots)
Prérequis
- Python 3.9+ installé
- GPU NVIDIA avec CUDA 11.8+ (ou CPU pour tests, mais lent)
- 16 Go RAM minimum, 8 Go VRAM pour modèles petits
- Compte Hugging Face (gratuit) pour télécharger des modèles
- pip et git installés
- Familiarité basique avec la ligne de commande et Python
Installation de vLLM
pip install vllm==0.6.1.post1
# Vérification
python -c "from vllm import LLM; print('vLLM installé avec succès!')"
# Optionnel : pour GPU Ampere+ (A100, RTX 40xx)
pip install vllm[flashinfer]
# Installer torch avec CUDA si pas déjà fait
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121Cette commande installe vLLM et ses dépendances. La version pinned évite les breaks. Le flag flashinfer booste les perfs sur GPU récents. Testez immédiatement pour valider CUDA ; sinon, fallback CPU lent.
Téléchargement d'un modèle de test
Choisissez un petit modèle pour débuter : TinyLlama-1.1B-Chat-v1.0 (1.1B params, rapide sur GPU 8Go). vLLM supporte 1000+ modèles Hugging Face. Évitez les gated comme Llama sans token ; utilisez huggingface-cli login pour auth.
Lancer le serveur OpenAI-compatible
vllm serve TinyLlama/TinyLlama-1.1B-Chat-v1.0 \
--host 0.0.0.0 \
--port 8000 \
--tensor-parallel-size 1 \
--dtype auto \
--trust-remote-code
# Le serveur est prêt ! Accédez à http://localhost:8000/docs pour Swagger UICe commande lance un serveur REST/HTTP compatible OpenAI sur port 8000. --host 0.0.0.0 permet l'accès distant. --tensor-parallel-size 1 pour un seul GPU. Le serveur auto-charged le modèle et expose /v1/chat/completions.
Tester le serveur avec curl
vLLM émule l'API OpenAI : endpoints /v1/models, /v1/completions, /v1/chat/completions. Utilisez curl ou Swagger pour valider. Analogie : comme ChatGPT API, mais local et gratuit.
Requête curl sur le serveur
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "TinyLlama/TinyLlama-1.1B-Chat-v1.0",
"messages": [
{"role": "system", "content": "Tu es un assistant utile."},
{"role": "user", "content": "Explique vLLM en 3 mots."}
],
"temperature": 0.7,
"max_tokens": 128
}'Ce curl envoie un prompt chat et reçoit une réponse JSON. max_tokens limite la génération. Copiez-collez directement ; ajustez temperature pour créativité (0=déterministe, 1=aléatoire).
Client Python avec openai library
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:8000/v1",
api_key="token-fake" # vLLM ignore la clé
)
response = client.chat.completions.create(
model="TinyLlama/TinyLlama-1.1B-Chat-v1.0",
messages=[
{"role": "system", "content": "Tu es un expert Python."},
{"role": "user", "content": "Écris une fonction fizzbuzz."}
],
temperature=0.1,
max_tokens=200
)
print(response.choices[0].message.content)Ce script utilise la lib OpenAI pour query vLLM sans changer de code. base_url pointe le serveur local. Idéal pour migrer d'OpenAI vers local. Exécutez pip install openai avant.
Utilisation standalone sans serveur
Pour scripts batch ou notebooks, utilisez la classe LLM de vLLM directement. Pas de serveur, inférence synchrone/asynchrone. Parfait pour data processing ou fine-tuning eval.
Inférence standalone avec LLM class
from vllm import LLM, SamplingParams
llm = LLM(
model="TinyLlama/TinyLlama-1.1B-Chat-v1.0",
tensor_parallel_size=1,
dtype="auto"
)
prompts = [
"<|system|>\nTu es un assistant.\n<|user|>\nBonjour ! Comment ça va ?<|end|>\n<|assistant|>\n",
"<|system|>\nTu es un assistant.\n<|user|>\n2+2=?<|end|>\n<|assistant|>\n"
]
sampling_params = SamplingParams(temperature=0.8, top_p=0.95, max_tokens=64)
outputs = llm.generate(prompts, sampling_params)
for output in outputs:
prompt = output.prompt
generated_text = output.outputs[0].text
print(f"Prompt: {prompt!r}, Generated: {generated_text!r}")Charge le modèle en mémoire et génère pour plusieurs prompts en batch. SamplingParams contrôle la génération (top_p évite répétitions). Format TinyLlama avec tokens spéciaux. Efficace pour 1000+ inférences.
Configuration avancée avec quantization
vllm serve TinyLlama/TinyLlama-1.1B-Chat-v1.0 \
--quantization awq \
--host 0.0.0.0 \
--port 8001 \
--max-model-len 4096 \
--gpu-memory-utilization 0.9 \
--trust-remote-code
# Pour plus de modèles simultanés
vllm serve --model TinyLlama/TinyLlama-1.1B-Chat-v1.0 --served-model-name tinyllama-chatAWQ quantization réduit VRAM x2 sans perte majeure. --max-model-len limite contexte. --gpu-memory-utilization 0.9 maximise usage GPU. --served-model-name renomme pour API.
Déploiement Docker
FROM vllm/vllm-openai:latest
WORKDIR /app
COPY entrypoint.sh /app/entrypoint.sh
RUN chmod +x /app/entrypoint.sh
ENTRYPOINT ["/app/entrypoint.sh"]
# Build: docker build -t vllm-server .
# Run: docker run --gpus all -p 8000:8000 vllm-server \
# --env HF_TOKEN=your_token \
# vllm serve TinyLlama/TinyLlama-1.1B-Chat-v1.0 --host 0.0.0.0Image officielle vLLM pour prod. Ajoutez entrypoint.sh pour args dynamiques. --gpus all expose GPU Docker. Scalable sur Kubernetes.
Bonnes pratiques
- Batch requests : Envoyez 10-100 prompts en parallèle pour max throughput.
- Quantize toujours : AWQ/GPTQ pour >7B models sur <24Go VRAM.
- Monitor GPU :
nvidia-smi -l 1pendant serve ; ajustez--gpu-memory-utilization. - Prompt engineering : Utilisez formats chat natifs (ex:
[INST] ). - Cache KV : Activez
--enable-prefix-cachingpour RAG réutilisable.
Erreurs courantes à éviter
- OOM GPU : Réduisez
--max-model-lenou quantize ; ne chargez pas 70B sans A100. - Modèle gated :
huggingface-cli loginavant serve, ou OOM faux. - Port occupé : Kill process
lsof -ti:8000 | xargs kill -9. - CUDA mismatch : Vérifiez
torch.cuda.is_available(); réinstallez torch cu121.
Pour aller plus loin
- Docs officielles : vLLM GitHub
- Benchmarks : Comparez avec TensorRT-LLM sur HuggingFace Spaces
- Avancé : Intégrez Ray Serve pour multi-GPU.
- Formations : Découvrez nos formations IA Learni pour masteriser LLM ops en prod.