Dernière vérification : 2026-10-14 — vLLM v0.31.0.
V1 est le mode par défaut. L’architecture V1 est maintenant le mode par défaut dans vLLM v0.31.0. Elle apporte un nouveau planificateur, le chunked prefill activé par défaut et une gestion améliorée de la mémoire GPU. Si vous observez des différences de comportement par rapport aux anciens guides, V1 en est probablement la cause.
Réglage du cache KV
Le cache KV stocke les tenseurs clé-valeur pour chaque token dans chaque séquence active. C’est généralement le plus gros consommateur de mémoire GPU après les poids du modèle lui-même, donc son réglage a l’impact le plus important sur le nombre de requêtes simultanées que vous pouvez servir.Formule de dimensionnement
vLLM calcule automatiquement la taille du cache KV, mais comprendre la formule vous aide à définir des limites :float16 :
Utiliser un cache KV fp8
--kv-cache-dtype fp8 réduit la mémoire du cache KV d’environ 50% par rapport au float16 par défaut. Cela double directement le nombre de tokens que vous pouvez mettre en cache, ce qui signifie plus de séquences simultanées ou des contextes plus longs.
--max-num-seqs vs --max-model-len
Ces 2 drapeaux se disputent le même pool de cache KV :
--max-model-lenplafonne la longueur du contexte d’une seule séquence. La réduire libère du cache KV pour plus de séquences simultanées.--max-num-seqsplafonne le nombre de séquences traitées en un lot. L’augmenter accroît le débit au détriment de la mémoire par séquence.
--max-model-len et augmentez --max-num-seqs pour maximiser la concurrence. Si vous servez des requêtes à contexte long, faites l’inverse.
Mise en cache des préfixes
De nombreuses charges de travail réelles envoient des requêtes qui partagent un préfixe commun : une invite système, un bloc de retrieval RAG ou des tours précédents dans une conversation multi-tours. Sans mise en cache des préfixes, vLLM recalcule le cache KV pour ce préfixe partagé à chaque requête.--enable-prefix-caching stocke les blocs KV calculés dans une table indexée par hachage. Lorsqu’une nouvelle requête arrive avec un préfixe correspondant à un bloc en cache, vLLM réutilise les tenseurs KV en cache au lieu de les recalculer.
V0.
Prefill par morceaux
Le prefill — le traitement de l’invite d’entrée — est intensif en calcul. Une longue invite (8K+ tokens) peut monopoliser le GPU pendant des centaines de millisecondes, bloquant les étapes de décodage pour les autres séquences et provoquant des pics de latence. Le chunked prefill divise le prefill en plus petits morceaux entrelacés avec des étapes de décodage. Le GPU traite un morceau de l’invite, puis exécute une étape de décodage pour les autres séquences actives, puis continue avec le morceau de prefill suivant. Cela rend la latence de décodage prévisible. Dans V1, le chunked prefill est activé par défaut. Vous pouvez contrôler la taille des morceaux :--max-num-batched-tokens définit le nombre maximum de tokens traités en une seule étape du planificateur. Des valeurs plus basses réduisent l’impact du prefill sur la latence de décodage mais augmentent le temps total jusqu’au premier token (TTFT). Des valeurs plus élevées améliorent le débit de prefill au prix d’un jitter occasionnel du décodage.
Si vous avez désactivé le chunked prefill dans une ancienne version de vLLM et que vous passez à V1, supprimez le drapeau
--enable-chunked-prefill — il est toujours actif dans V1 et le drapeau est ignoré.Service LoRA
vLLM peut servir plusieurs adaptateurs LoRA depuis un seul processus sans les fusionner dans le modèle de base. Cela vous permet d’exécuter un modèle de base et de router les requêtes vers différentes variantes fine-tunées — par exemple, un adaptateur de codage, un adaptateur de résumé et un adaptateur de chat général — tous partageant les mêmes poids de base en mémoire GPU.Activer le service LoRA
--lora-modules associe un nom visible par les requêtes à un chemin local. Les clients sélectionnent l’adaptateur dans le champ model :
Chargement dynamique
vLLM prend en charge le chargement dynamique de LoRA — vous pouvez ajouter ou supprimer des adaptateurs au runtime via l’API sans redémarrer le serveur. C’est utile lorsque vous avez de nombreux adaptateurs mais que seuls quelques-uns sont actifs à un moment donné.Options de quantification
La quantification réduit la précision des poids du modèle en dessous de 16 bits, échangeant une petite quantité de précision contre des gains significatifs en mémoire et en vitesse. vLLM prend en charge plusieurs formats de quantification :Utiliser des modèles quantifiés
Pour les modèles pré-quantifiés, vLLM détecte automatiquement le format depuis leconfig.json du modèle :
Quantification en ligne
Vous pouvez aussi quantifier un modèle à la volée pendant le chargement, bien que les modèles pré-quantifiés soient préférés pour la production :Débit vs latence
Votre stratégie d’optimisation dépend de si vous privilégiez le débit (total de tokens par seconde pour toutes les requêtes) ou la latence (temps jusqu’au premier token et latence inter-tokens pour les requêtes individuelles).Maximiser le débit
Augmentez les tailles de lot pour packer plus de travail par étape GPU :--max-num-seqs 256permet jusqu’à 256 séquences simultanées dans un lot.--max-num-batched-tokens 16384permet plus de tokens par étape du planificateur.--kv-cache-dtype fp8libère de la mémoire pour plus de séquences.
Minimiser la latence
Réduisez les tailles de lot et désactivez les optimisations qui échangent la latence contre le débit :--max-num-seqs 16garde les lots petits pour que chaque requête obtienne du temps GPU plus rapidement.--enforce-eagerdésactive les graphes CUDA. Les graphes CUDA capturent et rejouent un graphe de calcul fixe, ce qui améliore le débit mais ajoute de la latence au premier lancement de chaque nouvelle forme de lot. Utilisez--enforce-eagerpour le débogage ou quand chaque milliseconde de TTFT compte.
Changements de l’architecture V1
V1 est le planificateur par défaut dans vLLM v0.31.0. Si vous utilisiez vLLM auparavant, voici ce qui a changé : Nouveau planificateur. Le planificateur V1 remplace le gestionnaire de blocs V0 par un gestionnaire de mémoire unifié qui gère le cache KV, la mise en cache des préfixes et le chunked prefill en une seule passe. Cela réduit la surcharge de planification et élimine plusieurs cas limites où V0 pouvait fragmenter la mémoire GPU. Le chunked prefill est le mode par défaut. Le prefill et le décodage sont entrelacés automatiquement. Vous n’avez plus besoin de--enable-chunked-prefill — il est toujours actif.
Meilleure gestion de la mémoire. V1 suit la mémoire GPU avec une granularité plus fine, réduisant l’espace gaspillé par le padding et l’alignement. Attendez-vous à 5-15% de cache KV utilisable en plus sur le même matériel par rapport à V0.
Améliorations des graphes CUDA. V1 capture les graphes CUDA de manière plus agressive sur une plus large gamme de formes de lot, améliorant le débit sans réglage manuel.
Si vous rencontrez une régression avec V1, vous pouvez revenir à V0 en définissant la variable d’environnement
VLLM_USE_V1=0 avant de démarrer le serveur. Signalez le problème à l’équipe vLLM — V0 ne recevra pas de nouvelles fonctionnalités.Nouveau dans v0.31 : cache de poids persistant et snapshots
vLLM v0.31 introduit 2 nouvelles commandes CLI :-
vllm preloaddémarre un démon de cache de poids persistant qui maintient les poids du modèle en mémoire GPU entre les redémarrages du serveur. Au lieu de recharger un modèle de plusieurs gigaoctets depuis le disque à chaque redémarrage, le serveur se connecte au démon et réutilise les poids en cache. Cela réduit le temps de démarrage à froid de plusieurs minutes à quelques secondes. -
vllm snapshot createcapture l’état actuel du serveur (modèle chargé, adaptateurs, configuration) etvllm snapshot restorele restaure instantanément. Utile pour revenir en arrière après un mauvais changement de configuration ou pour répliquer une configuration connue comme fonctionnelle entre machines.
Changements incompatibles dans v0.31
-
--trust-request-mm-kwargsest maintenant requis quand les clients envoient des entrées multimodales (images, audio) via le corps de la requête. Sans ce drapeau, vLLM rejette les kwargs multimodaux pour des raisons de sécurité. Ajoutez-le si votre application envoie des images ou d’autres médias dans les requêtes API. -
--grpcactive le service gRPC en parallèle du serveur HTTP. Si vous utilisez des clients gRPC, démarrez vLLM avec ce drapeau pour exposer le point de terminaison gRPC.
Configurations exemples
Traitement par lots à haut débit
Pour les charges de travail de traitement par lots hors ligne où le total de tokens par seconde compte plus que la latence de chaque requête individuelle :Service interactif à faible latence
Pour les applications de chat où les utilisateurs attendent des réponses et le TTFT doit être inférieur à 500ms :Service LoRA multi-adaptateurs
Pour servir plusieurs variantes fine-tunées depuis un modèle de base unique :model. Les 3 adaptateurs partagent les mêmes poids du modèle de base, donc l’utilisation de la mémoire GPU est proche de servir le modèle de base seul — chaque adaptateur LoRA n’ajoute que quelques mégaoctets.
Après avoir modifié la configuration de vLLM, ré-enregistrez votre déploiement Tokios pour que le connecteur récupère le nouveau point de terminaison upstream. Voir Register Model.