L’article explore en profondeur l’architecture de vLLM, un système d’inférence optimisé pour les grands modèles de langage (LLM), conçu pour maximiser le débit tout en minimisant la latence. Structuré en cinq parties, il détaille les composants clés du moteur, ses fonctionnalités avancées, ainsi que les mécanismes de mise à l’échelle et de service distribué.

Au cœur de vLLM se trouve le moteur LLM (LLM Engine), responsable de l’inférence hors ligne à haut débit. Ce moteur repose sur plusieurs sous-composants : un exécuteur de modèle (Model Executor) gérant les passes avant sur GPU, un planificateur (Scheduler) qui organise les requêtes selon des politiques comme FCFS (premier arrivé, premier servi) ou par priorité, et un gestionnaire de cache KV (Key-Value) optimisé via la technique paged attention. Cette dernière divise le cache en blocs alloués dynamiquement, réduisant la fragmentation mémoire et permettant un traitement efficace des séquences de longueurs variables. Le cache est initialisé en fonction de la VRAM disponible, avec des blocs dont la taille dépend des paramètres du modèle (têtes d’attention, taille des blocs, type de données).

L’article illustre le processus via un exemple simple en Python, où des prompts sont traités par le modèle TinyLlama avec des paramètres de sampling (température, top-p). Le flux commence par la tokenisation des entrées, suivie de leur regroupement en lots (batching) continu, une technique qui fusionne dynamiquement les requêtes pour exploiter au mieux les ressources GPU. Le moteur utilise également des CUDA Graphs pour capturer et réutiliser des séquences d’opérations GPU, réduisant ainsi les overheads de lancement des noyaux et améliorant les performances.

Les fonctionnalités avancées incluent le chunked prefill (prétraitement des prompts par segments pour accélérer l’initialisation), le prefix caching (mise en cache des états intermédiaires pour les requêtes répétitives), et des méthodes de décodage optimisées comme le speculative decoding (génération de jetons candidats en parallèle pour valider ensuite les plus probables). Ces techniques visent à équilibrer latence et débit, notamment dans des scénarios multi-utilisateurs.

La mise à l’échelle est abordée via des architectures multi-GPU, où le parallélisme de données (DP), de tenseurs (TP), ou de pipeline (PP) est exploité pour répartir la charge. Le serving layer décrit une infrastructure web distribuée et concurrente, capable de gérer des requêtes asynchrones à grande échelle, avec des mécanismes de load balancing et de tolérance aux pannes. Enfin, l’article évoque les benchmarks et l’autotuning, essentiels pour ajuster dynamiquement les paramètres (taille des blocs, politiques de scheduling) en fonction des métriques de performance (latence, débit).

L’analyse s’appuie sur la version V1 de vLLM, tout en soulignant l’évolution depuis la version V0, notamment l’introduction de composants comme le MultiProcExecutor pour le multi-GPU. Bien que technique, l’article vise un public souhaitant contribuer à des projets similaires (vLLM, SGLang) ou comprendre les rouages des systèmes d’inférence modernes, où l’efficacité mémoire et computationnelle est critique. Les illustrations et exemples concrets complètent les explications pour clarifier des concepts comme la gestion dynamique du cache ou l’orchestration des requêtes.