Chunked Prefill
Apprends comment le pré-remplissage par morceaux améliore la latence et le débit d'inférence des LLM en divisant les longs prompts en blocs de tokens pour un service plus fluide sous des charges de travail concurrentes.
Le pré-remplissage segmenté est une technique d'ordonnancement d'inférence qui divise un long prompt d'entrée en groupes de tokens plus petits au lieu de traiter l'intégralité du prompt en une seule opération ininterrompue. Un moteur d'inférence peut entremêler ces segments avec la génération de tokens pour d'autres requêtes, empêchant ainsi un long prompt de monopoliser le GPU. Le résultat est généralement une latence plus fluide sous des charges de travail concurrentes, une meilleure utilisation du matériel et un service plus prévisible pour les applications interactives de grands modèles de langage.
Comment fonctionne le pré-remplissage segmenté#
L'inférence autorégressive des Transformer comprend deux phases principales :
- Pré-remplissage : Le modèle traite tous les tokens d'entrée, calcule leurs états d'attention et remplit le cache KV. Le pré-remplissage évalue de nombreux tokens en parallèle et est généralement limité par la puissance de calcul.
- Décodage : Le modèle génère la sortie un token à la fois tout en lisant les états précédemment mis en cache. Le décodage est souvent limité par la bande passante mémoire plutôt que par les calculs bruts.
Sans segmentation, une requête de 20 000 tokens peut occuper une étape d'inférence beaucoup plus longtemps qu'une requête courte. Les générations actives peuvent alors subir des pauses, augmentant la latence entre les tokens même si leurs propres prompts sont petits.
Avec le pré-remplissage segmenté, l'ordonnanceur attribue un budget de tokens à chaque itération. Il planifie d'abord les opérations de décodage actives, puis utilise le budget restant pour un ou plusieurs segments de prompt. Si un prompt ne rentre pas, ses tokens restants attendent une itération ultérieure. Le guide d'optimisation vLLM actuel décrit cette approche comme un moyen de combiner le travail de pré-remplissage lourd en calculs avec le décodage lourd en mémoire.
La segmentation modifie le moment où les tokens du prompt sont traités, et non leur ordre ou leur signification. Chaque segment complété étend l'état d'attention mis en cache de la requête jusqu'à ce que le prompt complet soit prêt et que le décodage puisse commencer.
Pourquoi le pré-remplissage segmenté est important#
Le pré-remplissage segmenté répond à des objectifs de performance concurrents dans la servilisation de modèles en production :
- Latence entre les tokens : Prioriser les requêtes de décodage existantes aide les réponses diffusées en flux à continuer sans longues pauses.
- Temps d'obtention du premier token : De grands segments terminent un nouveau prompt plus rapidement, tandis que de très petits segments peuvent retarder son premier token généré.
- Débit : Combiner le travail de pré-remplissage et de décodage peut utiliser le calcul du GPU et la bande passante mémoire plus efficacement.
- Équité : Les longs prompts ont moins de chances de bloquer de nombreuses requêtes interactives courtes.
Le paramètre de segment ou de budget de tokens constitue donc un compromis. La configuration de l'ordonnanceur vLLM expose des contrôles pour les limites de tokens par lots, les pré-remplissages partiels et les seuils pour les longs prompts. Des budgets plus petits favorisent généralement un décodage réactif, tandis que des budgets plus grands favorisent une ingestion plus rapide des prompts.
La segmentation n'élimine pas tous les goulots d'étranglement. Les contextes longs consomment toujours de la mémoire cache, et une admission trop agressive peut provoquer une pression sur le cache, une préemption de requêtes ou un travail répété. Les opérateurs doivent mesurer la latence d'inférence médiane et de queue, le temps d'obtention du premier token, la latence entre les tokens, le débit et l'utilisation de la mémoire GPU sous des distributions de prompts réalistes.
Concepts d'inférence associés#
Le pré-remplissage segmenté est étroitement lié à plusieurs optimisations mais sert un objectif distinct :
- Traitement par lots continu : Ajoute et supprime dynamiquement des requêtes pendant la génération. Le pré-remplissage segmenté le complète en rendant le traitement des longs prompts planifiable aux frontières des tokens.
- Mise en cache des prompts : Réutilise les états précédemment calculés pour un préfixe de prompt répété. Le pré-remplissage segmenté planifie un nouveau calcul ; il ne saute pas ce calcul.
- Gestion du cache KV paginé : Organise les états d'attention mis en cache dans des blocs de mémoire. La vue d'ensemble de TensorRT-LLM de NVIDIA inclut la mise en cache paginée et le traitement par lots en cours de vol aux côtés des optimisations de traitement des prompts.
- Traitement par lots dynamique : Combine des requêtes séparées en lots, comme l'explique le guide du traitement par lots dynamique de NVIDIA Triton. Il ne divise pas nécessairement un long prompt individuel en pré-remplissages partiels.
- Pré-remplissage et décodage désagrégés : Exécute les phases sur des workers séparés. Le guide de déploiement du pré-remplissage et du décodage de NVIDIA montre comment les étapes peuvent à la place être mises à l'échelle indépendamment.
Although the Ultralytics YOLO26 Triton deployment workflow supports scalable computer vision inference and automatic batching, standard YOLO object detection does not have an autoregressive text-prefill phase. Chunked prefill applies primarily to generative language and multimodal models.
Applications concrètes#
-
Assistants documentaires : Un assistant augmenté par récupération peut recevoir un long rapport tout en servant simultanément des utilisateurs avec des questions courtes. Segmenter le pré-remplissage du rapport permet aux discussions en cours de continuer à décoder au lieu de se figer jusqu'à ce que l'ensemble du contexte soit traité.
-
Analyse vidéo multimodale : Un modèle vision-langage peut recevoir des caractéristiques d'image, des descriptions d'objets et une longue instruction textuelle. Un pipeline de vision peut d'abord produire des détections à l'aide de la prédiction Ultralytics YOLO, puis envoyer un contexte visuel structuré au modèle génératif. Le pré-remplissage segmenté aide à planifier les tokens visuels et textuels résultants aux côtés d'autres requêtes. Le flux de travail multimodal d'encodage-pré-remplissage-décodage de NVIDIA illustre pourquoi la gestion indépendante de ces étapes peut améliorer l'évolutivité.
Guide de déploiement pratique#
Active le pré-remplissage segmenté uniquement via un moteur de service qui prend officiellement en charge l'architecture cible. Par exemple, la configuration du backend TensorRT-LLM documente les contrôles de contexte segmenté pour les déploiements pris en charge.
Effectue des benchmarks avec une concurrence, des longueurs d'entrée et des longueurs de sortie réalistes plutôt que de te fier à une seule requête. Commence par le budget de tokens recommandé par le runtime, puis ajuste-le tout en surveillant le temps d'obtention du premier token et la latence entre les tokens. Enfin, teste des charges de travail mixtes contenant à la fois des prompts très longs et très courts ; c'est là que le pré-remplissage segmenté offre sa valeur opérationnelle la plus évidente.






