GUIDE Technique

Service de pré-remplissage et de décodage désagrégé

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.

2 minutes de lectureDernière mise à jour

Aperçu

It matters because these two phases have opposite hardware appetites, and forcing them onto the same machines wastes capacity and hurts latency.

Plongée profonde

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.

Aperçu technique

Les deux phases diffèrent par leurs goulots d'étranglement. Prefill traite tous les jetons d'invite en parallèle, de sorte que ses FLOP évoluent en fonction de la longueur de l'invite et qu'il maximise les cœurs de tenseur. Le décodage est autorégressif : chaque nouveau jeton nécessite une passe avant qui relit l'intégralité du cache KV de HBM, de sorte que le débit est limité par la bande passante mémoire et non par le calcul. La désagrégation exploite cela en dimensionnant, en regroupant et même en choisissant un parallélisme différent pour chaque pool, puis en envoyant le cache KV des nœuds de pré-remplissage aux nœuds de décodage.

Impact stratégique

Coût et budget

Les décisions en matière d'architecture déterminent les performances et les coûts d'exploitation pendant des années.

Décisions plus claires

La formation technique aide les équipes à choisir la bonne pile, pas seulement la plus récente.

Contrôle qualité

De meilleurs choix d’ingénierie réduisent les incidents de fiabilité en production.

L'avenir du service de pré-remplissage et de décodage désagrégé

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.

Mise en œuvre dans le monde réel

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.

Risques et garde-fous

L’optimisation d’un benchmark peut masquer des faiblesses plus larges du système.

Les coûts d’infrastructure et de maintenance sont souvent sous-estimés.

Les lacunes en matière de sécurité et d’observabilité peuvent se creuser à mesure que les systèmes deviennent plus complexes.

Feuille de route de mise en œuvre

1

Définissez les objectifs de latence, de qualité et de coût avant la mise en œuvre.

2

Benchmark dans des conditions de charge et de données réalistes.

3

Surveillance des instruments pour détecter les erreurs, la dérive et l'impact sur l'utilisateur.

4

Préparez les chemins de restauration et de réponse aux incidents avant la mise à l’échelle.

Continuez à explorer

Free newsletter

Get the daily AI briefing

Three verified AI stories every weekday morning, written in plain English. Free forever, no ads.

One email each weekday. Unsubscribe in one click. We never sell or share your address.

Test yourself

Take the Disaggregated Prefill and Decode Serving quiz

Instant feedback on every answer, and a shareable certificate with a verifiable ID once you pass a course.

Démarrer le quiz

Support free AI education. AI Understanding is a 501(c)(3) nonprofit — no ads, no paywall, ever. Make a donation

Guide suivant

KServe et Model Serving sur Kubernetes

Questions fréquemment posées

What is Disaggregated Prefill and Decode Serving?

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.

Quelle est la raison matérielle principale pour laquelle le pré-remplissage et le décodage sont séparés sur différents pools de GPU ?

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.

Quelle structure de données doit être transférée des travailleurs de pré-remplissage aux travailleurs de décodage ?

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.

Quel problème la désagrégation réduit-elle spécifiquement dans une configuration avec GPU partagé ?

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.

Pourquoi le pré-remplissage peut-il être groupé de manière agressive mais décoder les avantages de différents réglages ?

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.

Quelles interconnexions sont généralement utilisées pour déplacer le cache KV entre des pools désagrégés ?

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.