
Le trafic réel est irrégulier : de nouvelles requêtes arrivent alors que d'autres sont en cours de génération. Avec un lot fixe, les requêtes terminées ne font pas place à de nouvelles requêtes avant la fin du lot. Le traitement par lots continu permet de modifier les requêtes actives entre les étapes de génération.
L'ordonnanceur peut admettre les requêtes en attente lorsque les ressources le permettent. Ce mécanisme est un ordonnancement au niveau de l'itération. Il ne consiste pas à recharger les poids du modèle à chaque jeton ou requête : dans un déploiement habituel où le modèle réside sur le GPU, ses poids restent chargés. Les gains dépendent du modèle, du matériel, du trafic et de la configuration ; aucun multiplicateur de débit universel ne peut être déduit sans benchmark comparable.
Le préremplissage traite les jetons de l’invite et construit leur cache clé-valeur. Le décodage utilise cet état pour générer les jetons suivants. L’invite constitue l’entrée du modèle, pas une séquence supplémentaire.
Le préremplissage traite de nombreux jetons en parallèle ; un moteur peut aussi découper une longue invite en segments. Le décodage avance ensuite étape par étape. Le préremplissage est souvent limité par le calcul et le décodage avec de petits lots par la bande passante mémoire. La documentation de vLLM décrit ces profils ; le goulot d’étranglement reste à mesurer sur la configuration utilisée.
Le traitement par lots continu relève de l’ordonnancement du moteur de service et ne nécessite pas de réentraîner le modèle. PagedAttention traite un autre problème : organiser le cache KV en blocs qui n’ont pas besoin d’être contigus. Les deux techniques peuvent être combinées, mais elles ne sont pas synonymes.
Vérifiez le matériel, les régions, les tarifs et les prérequis de déploiement actuels avant de choisir une instance.
Ouvrir la console Compute
Le regroupement peut augmenter le débit total, sans réduire la latence de chaque requête. Comparez le temps d’attente et la latence de livraison des jetons sous une même charge. Un gain à tous les percentiles ne doit pas être supposé.
Cette section décrit les principales étapes à suivre pour créer une configuration de traitement par lots efficace pour vos modèles.
Commencez par les valeurs par défaut, puis modifiez une chose à la fois :
Pour une validation complète, il est recommandé d'exécuter ces tests sur plusieurs itérations, en utilisant différentes itérations et plusieurs itérations pour couvrir une gamme de scénarios. Par exemple, vous pouvez faire varier la longueur des invites ou les niveaux de simultanéité à chaque exécution pour observer le comportement du système.
Suivez-les au minimum :
Le traitement par lots continu peut aider à utiliser les GPU lorsque le trafic est irrégulier. Commencez par des limites prudentes, mesurez le TTFT et le TPS, puis ajustez les limites de lots à partir des résultats.
Préparer un déploiement autogéré
Le guide de déploiement de vLLM sur Compute (en anglais) fournit une référence, sans confirmer la disponibilité actuelle de son image ou de sa configuration. Vérifiez la documentation Compute actuelle et le matériel disponible, puis configurez l’authentification et TLS pour votre point de terminaison.
Le préremplissage traite les jetons de l’invite et construit l’état d’attention en cache, éventuellement par segments. Le décodage utilise ensuite cet état pour générer des jetons.
Suffisamment grand pour occuper le GPU pendant le décodage sans provoquer de saturation du cache. Testez avec vos vraies instructions et plafonnez le nombre maximum de jetons.
Sous forte charge, la file d’attente et le préremplissage peuvent dominer. Examinez la longueur des invites, la concurrence, les préemptions et les paramètres d’ordonnancement ; le taux de réussite du cache ne suffit pas à diagnostiquer la cause.
Oui, si le serveur et le client prennent en charge le streaming. Les jetons peuvent être transmis pendant que l’ordonnanceur traite d’autres requêtes. Vérifiez les réglages plutôt que de supposer que le streaming est activé par défaut.
Non. Le traitement par lots continu peut être utile sur un seul GPU lorsque plusieurs requêtes sont actives. Plusieurs GPU peuvent répondre à un besoin de capacité ou de débit, mais leur intérêt doit être mesuré.
Le rapport dépend de la langue, du texte et du tokenizer. Pour dimensionner une requête, comptez les jetons avec le tokenizer du modèle utilisé plutôt que d’appliquer un nombre fixe de mots par jeton.
Un jeton est une unité de texte utilisée dans le traitement du langage naturel, souvent un mot ou un sous-mot que le modèle traite lors de l'inférence ou de la formation.
TTFT signifie « time to first token », ou délai jusqu’au premier jeton. Du point de vue du client, il va de l’envoi de la requête à la réception du premier jeton de sortie. Une mesure côté serveur utilise une autre frontière.
Pour une requête en streaming, mesurez le temps entre son envoi et la première réponse non vide contenant un jeton. Documentez la frontière de mesure et conservez-la pour tous les tests. Les définitions de métriques de NVIDIA distinguent le TTFT, la latence de bout en bout et la latence entre jetons.
TPOT signifie time per output token, ou temps par jeton de sortie. C’est une mesure de latence, souvent en millisecondes par jeton. Un calcul courant exclut le premier jeton : (latence totale − TTFT) / (nombre de jetons en sortie − 1), pour une réponse de plus d’un jeton. Vérifiez la définition de l’outil utilisé.
TPS signifie jetons par seconde. Précisez s’il s’agit d’une seule réponse ou du débit total de plusieurs requêtes concurrentes ; ces mesures peuvent évoluer différemment lorsque la charge augmente.
Le cache KV fait référence au cache clé-valeur qui stocke les tenseurs de clé et de valeur intermédiaires calculés pendant le mécanisme d'attention afin d'accélérer la génération ultérieure de jetons.
Le cache GPU KV est le stockage de paires clé-valeur dans la mémoire GPU utilisées lors de l'inférence de modèles pour optimiser les calculs d'attention et réduire les calculs redondants.
Dans les grands modèles de langage, le cache KV contient les vecteurs de clé et de valeur mis en cache des jetons précédents afin de calculer efficacement l'attention portée aux nouveaux jetons sans recalculer les états antérieurs.
Un stockage clé-valeur associe des valeurs à des clés pour les retrouver. Le cache KV d’un LLM conserve des tenseurs d’attention liés aux positions des jetons. L’abréviation commune ne désigne pas le même mécanisme.
Le traitement par lots dynamique regroupe des requêtes compatibles avant leur exécution, avec un délai de collecte facultatif. Le batcher dynamique de Triton vise les modèles sans état. Le traitement par lots continu des LLM peut, lui, modifier les requêtes actives entre les itérations de génération.
Un lot statique conserve sa composition pour une exécution. Un lot dynamique est formé à partir des requêtes en attente selon des limites configurées et, éventuellement, un délai de collecte. Le traitement par lots continu ajoute la possibilité de modifier les requêtes actives entre les itérations. Un lot statique n’exige pas intrinsèquement d’attendre d’être complètement rempli.
Choisissez une charge de travail d’IA, de calcul ou de stockage à tester sur Hivenet, ou échangez avec notre équipe sur sa mise en production.