Le vrai trafic est compliqué. De nouvelles demandes arrivent alors que d'autres sont de moyenne génération. Le traitement par lots continu est particulièrement important pour l'inférence de grands modèles de langage (LLM) et d'autres modèles d'IA utilisés dans les applications du monde réel, où l'efficacité des services et l'utilisation des ressources sont essentielles. Si votre serveur attend la fin d'un lot complet avant de démarrer le suivant, les GPU restent inactifs et les utilisateurs attendent.
Le traitement par lots continu permet à la file d'attente de bouger, de sorte que le GPU ne fait que rarement des pauses, ce qui est crucial pour une génération de texte efficace. Il peut améliorer le débit jusqu'à 23 fois par rapport au traitement par lots naïf dans les scénarios d'inférence LLM. En outre, les charges par lots continues modélisent les pondérations au niveau du jeton plutôt qu'au niveau de la demande, ce qui améliore encore l'efficacité.
Les systèmes continus peuvent traiter les matériaux 24 heures sur 24 afin de maximiser le rendement et d'accélérer la production. Le dosage continu permet aux fabricants d'atteindre des volumes de production élevés tout en garantissant un contrôle précis des ratios d'ingrédients et de la qualité du mélange pour les différentes formulations.
La mesure et le stockage des ingrédients peuvent être effectués dans une trémie située en amont au-dessus du mélangeur, ce qui permet de préparer le lot suivant pendant que le précédent est en train de mélanger.
Préremplissage ou décodage
Pré-remplissage est la première passe où le modèle lit l'entrée complète ou la séquence d'entrée (en plus de l'invite) et crée le cache clé/valeur. Décoder est la génération étape par étape qui produit des jetons pour chaque séquence d'entrée ou requête.
Lors du préremplissage, les jetons d'entrée sont traités en parallèle, tandis que les séquences sont gérées étape par étape lors du décodage. Prefill aime les gros travaux en parallèle ; le décodage bénéficie de nombreuses petites étapes groupées. Les bons planificateurs les traitent différemment.
Le traitement par lots continu ne nécessite aucune modification du modèle et permet des optimisations avancées de la mémoire. Par exemple, PagedAttention alloue de la mémoire dans des pages de taille fixe, ce qui permet un stockage en cache KV non contigu afin d'améliorer l'efficacité de la mémoire. PagedAttention réduit la fragmentation interne en allouant des emplacements de mémoire GPU à la demande plutôt qu'à l'avance.
Comment fonctionne le traitement par lots en continu
- Admettez un nouveau travail à chaque étape. Le planificateur utilise une planification au niveau des itérations, ce qui lui permet de traiter de nouvelles demandes à chaque étape plutôt que d'attendre une limite de lots. Cela améliore l'utilisation du GPU et garantit une gestion efficace des séquences entrantes.
- Partagez le KV‑Cache. Le serveur divise la mémoire cache en petits blocs, les stockant et les réutilisant pour une gestion efficace de la mémoire et une mise en cache kv. Les blocs terminés retournent dans un pool afin que les nouvelles demandes ne soient pas bloquées pour la mémoire, optimisant ainsi l'utilisation de la mémoire.
- Grandissez et rétrécissez à la volée. Au fur et à mesure que les demandes se terminent ou sont annulées, la taille du lot actif change sans forcer le redémarrage. Cette approche dynamique optimise l'utilisation de la mémoire et la bande passante de la mémoire en allouant les ressources selon les besoins.
- Diffusez au fur et à mesure. Les clients voient les jetons dès que le décodage commence, même lorsque d'autres demandes sont admises. Le traitement par lots continu fonctionne au niveau des jetons et améliore l'utilisation du GPU en traitant les nouvelles demandes au fur et à mesure que les jetons deviennent disponibles.
Le traitement par lots continu permet également de gérer efficacement les poids des modèles lors de l'inférence. Le débit et la latence sont améliorés à tous les percentiles lors de l'utilisation du traitement par lots continu dans l'inférence LLM. L'inférence LLM est liée à la mémoire et non au calcul, ce qui signifie qu'il faut plus de temps pour charger des données sur le GPU que pour effectuer des calculs.
Cependant, la fabrication en continu nécessite généralement d'importants investissements en capital et le processus est plus complexe que les systèmes par lots traditionnels. Dans la fabrication de médicaments, le dosage continu permet de surveiller la qualité en temps réel tout en définissant des lots spécifiques pour répondre aux exigences réglementaires.
La fabrication en continu dans les produits pharmaceutiques peut intégrer le traitement par lots pour des segments tels que la synthèse en plusieurs étapes où les intermédiaires sont isolés et validés avant de poursuivre en flux continu.
Pourquoi cela aide TTFT et TPS
- Des files d'attente plus courtes. Les nouvelles demandes entrent rapidement dans le calendrier, ce qui réduit délai jusqu'au premier jeton (TTFT). Les étapes de décodage peuvent être lié au calcul, et un script d'analyse comparative est souvent utilisé pour mesurer ces effets.
- Utilisation accrue. Les étapes de décodage sont emballées, donc jetons par seconde (TPS) reste élevé même lorsque la longueur des invites et des sorties est différente, amélioration du débit. Résultats de référence et résultats de l'analyse comparative montrent l'impact du traitement par lots en continu sur le débit et l'efficacité.
- Des pointes plus lisses. Les rafales de trafic sont absorbées par le planificateur au lieu de créer de longues périodes d'inactivité. L'inférence LLM est liée à la mémoire I/O, ce qui signifie que le débit est largement déterminé par la taille qu'un lot peut contenir dans la mémoire GPU à bande passante élevée.
- Le traitement par lots dynamique est idéal pour le trafic en direct sur les modèles, car il améliore à la fois la latence et le débit. Le traitement par lots dynamique est idéal pour les déploiements de production sensibles à la latence. La qualité uniforme des produits dans les systèmes continus est obtenue en intégrant toutes les opérations dans une seule ligne ininterrompue, empêchant ainsi la ségrégation des matériaux. Les plantes alimentaires utilisent souvent la cuisson continue pour les ingrédients de base, puis les mélangent avec différentes épices.
Limites et compromis
- Pression de la mémoire. Les longues instructions et les sorties trop longues augmentent le KV‑cache. La réservation de la mémoire GPU pour le nombre maximum de jetons peut entraîner des problèmes d'efficacité, car la mémoire réservée non utilisée peut être gaspillée si la longueur des entrées utilisateur est inférieure au maximum réservé. Lorsque l'espace libre est restreint, le TTFT augmente et le TPS diminue.
- Équité contre rapidité. Un emballage agressif peut priver de longues périodes d'attente. Les modèles propriétaires peuvent avoir des limites de longueur de contexte maximale différentes, ce qui affecte les stratégies de traitement par lots et la manière dont les entrées utilisateur de différentes longueurs sont gérées. Ajoutez des règles d'équité simples et des limites de sortie.
- nervosité. Le streaming interconnecte de nombreux utilisateurs. Les longueurs de saisie variables par l'utilisateur peuvent contribuer à la variation de synchronisation des jetons. La synchronisation des jetons varie légèrement, ce qui est bien pour le chat, mais moins pour les tâches difficiles en temps réel. Le traitement par lots continu nécessite des algorithmes de planification sophistiqués et des systèmes dorsaux robustes pour gérer le traitement des charges de travail variables.
De plus, le dosage continu implique une technologie d'automatisation avancée et des systèmes de contrôle complexes nécessitant une expertise spécialisée. Les opérations séquentielles du dosage en continu impliquent le chargement du lot pré-pesé suivant dans le mélangeur pendant le déchargement du lot en cours, créant ainsi un flux de travail fluide. La mise en œuvre d'un système de traitement par lots continu nécessite des investissements importants dans l'infrastructure matérielle et logicielle.
Liste de contrôle de réglage
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 :
- Casquette max_tokens. Les grandes capitalisations gaspillent du budget et bloquent les autres.
- Définissez une longueur de contexte raisonnable. Utilisez RAG pour raccourcir les instructions lorsque vous le pouvez.
- Choisissez des limites de lots. Prévoyez suffisamment d'emplacements de décodage parallèles pour occuper le GPU, mais évitez tout crash.
- Matériel de la bonne taille. Si le cache rate sa montée et que le TTFT augmente, vous aurez probablement besoin de plus de VRAM ou d'un modèle plus petit. Les derniers modèles peuvent nécessiter davantage de VRAM ou un matériel optimisé pour fonctionner efficacement.
- Diffusez par défaut. Les utilisateurs ressentent des progrès et votre file d'attente reste saine.
- Utilisez de courtes instructions système. Moins de jetons entrants, moins de jetons à mettre en cache. Des procédés hybrides peuvent être utilisés pour produire un matériau de base en continu, puis pour effectuer un traitement par lots ultérieur à des fins de personnalisation ou de finition dans le secteur de la transformation des produits chimiques et des matériaux.
Tests à exécuter
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.
- Rampe de chargement. Augmentez la simultanéité étape par étape et regardez TTFT et TPS.
- Invitations mitigées. Combinez des instructions courtes et longues pour voir comment se comporte le planificateur.
- Annulez les tempêtes. Lancez de nombreuses annulations pour vérifier le nettoyage et la réutilisation du cache.
- Capuchons à jetons. Vérifiez que les majuscules fonctionnent et que les erreurs sont lisibles.
- Recharge à chaud. Redémarrez le serveur ou rechargez un modèle et confirmez la restauration.
Une instrumentation rentable
Suivez-les au minimum :
- TTFT p50/p95 et TPS p50/p95 sous charge
- Taille du lot actif et longueur de la file d'attente
- Utilisation de la mémoire GPU et taux de réussite du cache (surveillez également l'efficacité du calcul de l'attention pour garantir des performances optimales)
- Codes d'erreur : OOM, timeouts, 5xx
- Nombre de jetons d'invite et de sortie par demande (suivez la longueur de chaque réponse et la réponse complète pour mieux comprendre les performances de génération de texte ; aucun journal de texte si vous n'en avez pas besoin)
Récapitulation
Le traitement par lots en continu n'est pas magique. C'est un moyen pratique d'occuper les GPU et de satisfaire les utilisateurs lorsque le trafic est irrégulier. Commencez par des bouchons sûrs, mesurez le TTFT et le TPS, et ajustez les limites de lots là où les chiffres l'indiquent.
Essayez Compute dès aujourd'hui
Lorsque vous êtes prêt, lancez un Point de terminaison vLLM sur ordinateur. Choisissez le matériel, définissez des majuscules et obtenez une URL HTTPS qui fonctionne avec les SDK OpenAI.
FAQ
Qu'est-ce que le préremplissage et le décodage ?
Prefill lit l'intégralité de l'invite une seule fois pour configurer la mémoire. Decode génère des jetons étape par étape à l'aide de cette mémoire.
Quelle doit être la taille d'un lot ?
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.
Pourquoi le TTFT s'aggrave-t-il à charge élevée ?
Généralement, la mémoire est sollicitée ou les sorties sont surdimensionnées. Réduisez les invites, plafonnez les sorties et vérifiez le taux de réussite du cache.
Le traitement par lots continu fonctionne-t-il avec le streaming ?
Oui Le streaming est le mode par défaut pour de nombreux serveurs. Les utilisateurs voient des jetons pendant que le planificateur continue d'admettre d'autres demandes.
Ai-je besoin d'une carte graphique multiple pour y remédier ?
Non Les nœuds à GPU unique en tirent de nombreux avantages. Le multiprocesseur graphique est utile lorsque les besoins en mémoire ou en débit dépassent une carte.
Combien de jetons par seconde fait ChatGPT ?
ChatGPT génère généralement des jetons à un débit dépendant du matériel et de la charge sous-jacents, mais les débits courants vont de centaines à des milliers de jetons par seconde sur des serveurs optimisés.
Combien de mots font 1 000 jetons ?
En moyenne, 1 000 jetons correspondent à environ 750 mots, mais cela peut varier en fonction de la langue et de la méthode de tokenisation.
Que signifie un jeton dans l'IA ?
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.
Combien de jetons par seconde un humain peut-il lire ?
Les humains lisent généralement entre 200 et 300 mots par minute, ce qui correspond à peu près à 250 à 400 jetons par minute, soit environ 4 à 7 jetons par seconde.
Qu'est-ce que le TTFT ?
TTFT signifie Time To First Token, la latence mesurée entre la réception d'une demande et le moment où le premier jeton de la sortie du modèle est généré.
Comment mesurer le TTFT ?
Le TTFT est mesuré en chronométrant l'intervalle entre le moment où un serveur de modèles reçoit la première demande et le moment où il émet le premier jeton, souvent suivi dans des scripts d'analyse comparative.
Qu'est-ce que la métrique TPOT ?
Le TPOT (Tokens Per Operation Time) est une métrique de performance indiquant le nombre de jetons générés par un modèle par unité de temps de traitement, utile pour évaluer le débit.
Qu'est-ce que TPS in LLM ?
TPS signifie Tokens par seconde, une mesure du débit du modèle pendant l'inférence, indiquant combien de jetons sont générés chaque seconde.
Qu'est-ce qu'un cache KV ?
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.
Qu'est-ce que le cache GPU KV ?
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.
Qu'est-ce que le cache KV dans LLM ?
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.
Qu'est-ce que le cache de stockage clé-valeur ?
Un cache de stockage clé-valeur est une méthode de stockage de données dans laquelle les données sont stockées sous forme de paires de clés et de valeurs correspondantes, ce qui permet une récupération rapide ; dans les LLM, ce concept s'applique à la mise en cache de calculs intermédiaires.
Comment fonctionne le traitement par lots dynamique ?
Le traitement par lots dynamique regroupe les demandes d'inférence entrantes en lots de manière dynamique en fonction des heures d'arrivée et des limites de taille des lots, en exécutant les lots soit lorsqu'ils sont pleins, soit après un délai d'attente pour équilibrer la latence et le débit.
Quelle est la différence entre le traitement par lots statique et le traitement par lots dynamique ?
Le traitement par lots statique attend qu'un lot soit complètement rempli avant d'être traité, ce qui peut augmenter la latence, tandis que le traitement par lots dynamique traite les lots une fois qu'ils sont pleins ou après une durée définie, améliorant ainsi la latence et l'utilisation des ressources. Le traitement par lots statique est particulièrement approprié lorsque la latence n'est pas un problème. Le traitement par lots statique peut augmenter considérablement la latence, limitant ainsi ses cas d'utilisation. Le traitement par lots statique nécessite une file de requêtes bien gérée pour alimenter efficacement le modèle. Le traitement par lots statique peut augmenter considérablement la latence, limitant ainsi ses cas d'utilisation. Le traitement par lots statique traite les demandes une fois qu'un nombre défini de demandes a été reçu.
Que signifie le traitement par lots dans le cadre de l'expédition ?
Dans le domaine de l'expédition, le traitement par lots consiste à regrouper plusieurs commandes ou expéditions afin d'optimiser l'efficacité du transport et de réduire les coûts.
Qu'est-ce que le traitement par lots dynamique dans Unity ?
Dans Unity, le traitement par lots dynamique est une technique d'optimisation du rendu qui combine de manière dynamique plusieurs petits maillages en un seul appel de dessin afin d'améliorer les performances graphiques.