À suivreGuide suivant
KServe et Model Serving sur Kubernetes
Technique
GUIDE Technique
Une architecture de service qui divise l'inférence de grands modèles de langage en deux phases distinctes (pré-remplissage et décodage) et les exécute sur différents pools de GPU.
Écoutez ce guideNarré par l'IA · ~2 min
C'est important car ces deux phases ont des appétits matériels opposés, et les forcer sur les mêmes machines gaspille de la capacité et nuit à la latence.
Lorsqu'un LLM répond, cela fonctionne en deux étapes. Prefill lit l'intégralité de l'invite en même temps et crée le cache clé-valeur (KV) ; il s'agit d'une grosse rafale parallèle liée au calcul qui sature les unités mathématiques du GPU. Decode génère ensuite les jetons un par un, chaque étape lisant l’intégralité du cache KV – un filet de calcul léger, limité à la bande passante mémoire. Exécutés ensemble, un long pré-remplissage bloque le décodage de tout le monde (blocage en tête de ligne) et le regroupement des deux crée des interférences. La désagrégation place le pré-remplissage sur un pool GPU et le décodage sur un autre, transférant le cache KV entre eux via des interconnexions rapides comme NVLink ou InfiniBand. Chaque pool est réglé et mis à l'échelle indépendamment, améliorant ainsi le bon rendement, lissant la latence de queue et permettant aux opérateurs d'atteindre simultanément des objectifs serrés de délai d'obtention du premier jeton et de temps par jeton de sortie.
Un assistant de discussion achemine les invites de documents longues vers un cluster de pré-remplissage gourmand en calcul, puis diffuse les réponses à partir d'un cluster de décodage à mémoire optimisée pour maintenir une latence de frappe fluide.
NVIDIA Dynamo et vLLM permettent aux opérateurs de déployer des groupes de travail de pré-remplissage et de décodage distincts afin qu'une rafale de longues invites ne gèle pas les générations en cours.
Mooncake (utilisé par Kimi de Moonshot AI) désagrège le pré-remplissage et le décodage et ajoute un pool de cache KV distribué pour réduire le recalcul d'invite redondant à grande échelle.
Un service de complétion de code consacre un petit pool de pré-remplissage aux invites courtes et un grand pool de décodage, car la plupart des coûts proviennent de la diffusion en continu de nombreux jetons de sortie.
Attendez-vous à ce que la désagrégation devienne un défaut dans les piles de production. Des systèmes comme DistServe, Splitwise et Mooncake l'ont popularisé, et vLLM et NVIDIA Dynamo proposent désormais des modes désagrégés. La recherche pousse à l'optimisation du transfert de cache KV, au regroupement et à la réutilisation du cache entre les requêtes, au rééquilibrage dynamique des ratios de pré-remplissage/décodage en cas de déplacement du trafic et à une intégration plus étroite avec la mise en cache des préfixes et le pré-remplissage fragmenté. À mesure que les fenêtres contextuelles se comptent en millions de jetons, la séparation de ces phases devient de plus en plus essentielle pour un service rentable et à faible latence.
Newsletter gratuite
Trois histoires d'IA vérifiées chaque matin de la semaine, écrites dans un anglais simple. Gratuit pour toujours, sans publicité.
Un e-mail chaque jour de la semaine. Désabonnez-vous en un clic. Nous ne vendons ni ne partageons jamais votre adresse.
Testez-vous
Commentaires instantanés sur chaque réponse et un certificat partageable avec une pièce d'identité vérifiable une fois que vous avez réussi un cours.
Soutenez l’enseignement gratuit de l’IA. AI Understanding est une organisation à but non lucratif 501(c)(3) : pas de publicité, pas de paywall, jamais. Faire un don
Une architecture de service qui divise l'inférence de grands modèles de langage en deux phases distinctes (pré-remplissage et décodage) et les exécute sur différents pools de GPU. C'est important car ces deux phases ont des appétits matériels opposés, et les forcer sur les mêmes machines gaspille de la capacité et nuit à la latence.
Le pré-remplissage traite l'intégralité de l'invite en parallèle et sature le calcul, tandis que le décodage lit le cache KV à chaque étape et est limité par la bande passante mémoire – des appétits opposés qui justifient des pools séparés et réglés indépendamment.
Prefill crée le cache KV pour l'invite ; decode a besoin de ce cache pour continuer à générer, de sorte que le cache est expédié via une interconnexion rapide au pool de décodage.
Sur les GPU partagés, une longue rafale de pré-remplissage peut bloquer les étapes de décodage en cours ; les séparer évite ces interférences et stabilise la latence de la queue.
Le pré-remplissage traite tous les jetons d'invite ensemble, de sorte que des lots plus importants alimentent bien les cœurs tenseurs ; decode génère un jeton à la fois et est contrôlé par la mémoire, il évolue donc différemment.
Des liens à large bande passante et à faible latence comme NVLink (intra-nœud) et InfiniBand (inter-nœud) sont nécessaires pour que le transfert de cache KV ne devienne pas le nouveau goulot d'étranglement.
Continuez à apprendre
Plus de guides sélectionnés pour ce sujet
À suivreGuide suivant
KServe et Model Serving sur Kubernetes
Technique