Prefill-decode disaggregatie: hoe AI-datacenters chatbots sneller en efficiënter laten antwoorden
Stel je een drukke keuken voor waarin één kok twee heel verschillende taken tegelijk moet doen: eerst een lange bestelling doorlezen en alle ingrediënten in één keer klaarzetten, en daarna, bord voor bord, het gerecht opmaken en serveren. Het lezen en voorbereiden is een korte, intensieve klus die veel rekenkracht van de kok vraagt. Het opmaken en serveren duurt juist lang, gebeurt stap voor stap, en vraagt vooral dat de kok steeds naar de voorraadkast loopt om iets te pakken. Als je die kok allebei laat doen, staat hij vaak in de weg van zichzelf: terwijl hij traag aan het opmaken is, blijven nieuwe bestellingen liggen. Prefill-decode disaggregatie is het idee om deze twee taken te scheiden: één groep gespecialiseerde medewerkers leest en bereidt voor, een andere groep serveert. Dat blijkt in de praktijk van AI-datacenters een stuk efficiënter.
In de wereld van grote taalmodellen (large language models, LLM's, zoals de modellen achter ChatGPT of Claude) gebeurt precies dit. Als je een vraag stelt aan een chatbot, verwerkt het model eerst je hele vraag in één keer: dat heet de prefill-fase. Daarna genereert het model het antwoord woord voor woord (preciezer: token voor token, een token is een stukje tekst zoals een woord of woorddeel): dat heet de decode-fase. Deze twee fases hebben totaal verschillende eisen aan de computerchips (GPU's, gespecialiseerde rekenchips) die ze uitvoeren. Lange tijd draaiden beide fases gewoon op dezelfde GPU's, wat leidde tot inefficiëntie en onvoorspelbare wachttijden. Prefill-decode disaggregatie splitst de twee fases op naar aparte groepen GPU's die elk zijn toegesneden op hun eigen taak.
Wat is het precies?
Om te snappen waarom deze scheiding zin heeft, moet je eerst weten wat een LLM technisch doet bij het beantwoorden van een vraag. Tijdens de prefill-fase leest het model je volledige prompt (de tekst die je invoert) in één keer, en berekent het voor elk woordje daarin een soort interne representatie, opgeslagen in het werkgeheugen van de GPU als de zogeheten KV-cache (key-value cache: een geheugenstructuur met tussentijdse rekenresultaten die het model later hergebruikt). Deze fase kost veel rekenkracht in korte tijd, omdat alle woorden tegelijk (parallel) verwerkt worden. Chips zijn tijdens prefill dus vrijwel continu aan het rekenen: dit heet compute-bound, oftewel beperkt door rekenkracht.
Daarna volgt de decode-fase: het model genereert het antwoord één token per keer. Voor elk nieuw token moet het model de hele KV-cache van alle voorgaande tokens uit het geheugen lezen. Dat is relatief weinig rekenwerk, maar wel veel geheugenverkeer, en dat herhaalt zich honderden keren voor een lang antwoord. Hierdoor staan de rekenkernen van de GPU grotendeels stil te wachten op geheugen: dit heet memory-bound, oftewel beperkt door geheugenbandbreedte.
Omdat prefill en decode tegenovergestelde knelpunten hebben, botsen ze als ze op dezelfde GPU's samen worden ingepland. Een lange decode-taak (iemand die een heel essay laat genereren) kan een nieuwe, korte prefill-taak (iemand die net een simpele vraag stelt) minutenlang laten wachten, en omgekeerd verstoort een grote nieuwe prefill-taak het gelijkmatige ritme van lopende decode-taken. Dit heet head-of-line blocking: één taak blokkeert onbedoeld de rest van de rij.
Bij disaggregatie wordt de serverinfrastructuur opgesplitst in twee aparte poules GPU's: een groep prefill-instances en een groep decode-instances. Een binnenkomend verzoek gaat eerst naar een prefill-instance, die de KV-cache berekent en het eerste antwoordtoken produceert. Vervolgens wordt die KV-cache via een supersnelle netwerkverbinding (bijvoorbeeld NVLink, InfiniBand of RDMA — technieken om data razendsnel tussen chips of servers te versturen) overgedragen naar een decode-instance, die de rest van het antwoord genereert. Beide poules kunnen onafhankelijk van elkaar worden geschaald, ingericht met andere hardware, en met een eigen batchstrategie (het slim groeperen van meerdere verzoeken) worden geoptimaliseerd voor hun specifieke knelpunt.
Wat wil men ermee bereiken?
Het hoofddoel is wat onderzoekers goodput noemen: niet simpelweg het aantal verwerkte tokens per seconde, maar het aantal verzoeken dat wordt afgehandeld terwijl bepaalde snelheidsdoelen gehaald blijven worden. Twee maatstaven zijn daarbij belangrijk: de time-to-first-token (hoe snel verschijnt het eerste woord van het antwoord) en de time-per-output-token (hoe gelijkmatig komen de volgende woorden binnen). Wanneer prefill en decode dezelfde chips delen, zijn deze waarden onvoorspelbaar en schieten ze soms alle kanten op. Disaggregatie maakt het gedrag van het systeem veel voorspelbaarder, doordat de twee fases elkaar niet meer in de weg zitten.
Er is ook een stevige economische reden. GPU's voor AI zijn duur en schaars, en bedrijven die chatbots op grote schaal aanbieden, betalen enorme rekeningen voor rekenkracht. Door prefill en decode te scheiden, kan elke poule worden ingericht met precies de hardware en instellingen die het beste bij die taak passen, wat verspilling van dure rekentijd vermindert. Dat vertaalt zich in meer gebruikers die met dezelfde hoeveelheid GPU's bediend kunnen worden, en dus een lagere kostprijs per gegenereerd woord. Voor een gebruiker voelt dit in de praktijk als een chatbot die sneller begint te antwoorden en gelijkmatiger doorschrijft, ook als het datacenter op dat moment druk bezet is.
Voorbeelden uit de praktijk
Het idee is relatief nieuw, maar heeft in korte tijd meerdere concrete uitwerkingen gekregen. Splitwise, een onderzoek van Microsoft Research dat eind 2023 als preprint verscheen en in 2024 op het vooraanstaande hardwarecongres ISCA werd gepresenteerd, was een van de eerste systemen die expliciet liet zien hoe je prefill en decode over gescheiden machines kunt verdelen, met duidelijke winst in doorvoer en kosten per query.
Kort daarna volgde DistServe, een academisch project van onderzoekers verbonden aan onder meer Peking University en Amerikaanse universiteiten, gepresenteerd op de OSDI-conferentie van 2024 (een belangrijk systemenonderzoekscongres). DistServe richtte zich specifiek op het optimaliseren van goodput door prefill- en decode-taken niet alleen te scheiden, maar ook elk apart te configureren qua parallellisatie en batchgrootte.
In China ontwikkelde Moonshot AI, het bedrijf achter de Kimi-chatbot, in 2024 Mooncake: een architectuur die de KV-cache als centraal ontwerpprincipe neemt en die het bedrijf gedeeltelijk open source heeft gemaakt, na eigen ervaring met het draaien van Kimi op grote schaal.
Ook de populaire open source-software voor het draaien van taalmodellen heeft deze aanpak omarmd. Zowel vLLM als SGLang, twee veelgebruikte inference-engines (software die een getraind model daadwerkelijk vragen laat beantwoorden), kregen in de loop van 2024 en 2025 ondersteuning voor gedisaggregeerde prefill- en decode-serving, waardoor ontwikkelaars deze aanpak niet meer helemaal zelf hoeven te bouwen. NVIDIA bracht in maart 2025, tijdens zijn GTC-conferentie, Dynamo uit: een open source framework dat specifiek is gebouwd om gedisaggregeerde serving over veel GPU's en servers heen te orkestreren, en dat samenwerkt met onder meer vLLM, SGLang en NVIDIA's eigen TensorRT-LLM.
Hoe ver is de techniek?
Prefill-decode disaggregatie is in ongeveer twee jaar tijd bewogen van onderzoekspaper naar daadwerkelijke productiesystemen bij grote AI-bedrijven, een tempo dat kenmerkend is voor dit snel veranderende vakgebied. Toch is het geen instapklare, gestandaardiseerde technologie: er bestaat geen vaste blauwdruk, en elk bedrijf past de aanpak aan op de eigen hardware, modelarchitectuur en gebruikspatroon.
De grootste praktische horde is netwerksnelheid: de overdracht van de KV-cache tussen prefill- en decode-instances moet razendsnel gebeuren, anders gaat de tijdwinst verloren aan wachttijd voor die overdracht. Dit vereist dure, snelle interconnects tussen GPU's en servers. Daarnaast is het operationeel complexer: in plaats van één type serverpark moeten bedrijven nu twee verschillende poules beheren, met eigen taakverdeling, monitoring en foutafhandeling. Voor kleinere toepassingen met weinig verkeer weegt die extra complexiteit vaak nog niet op tegen de voordelen; de winst is het grootst bij zeer grote, drukbezette diensten.
Er wordt nog volop onderzoek gedaan naar vragen als: hoeveel prefill-instances heb je nodig ten opzichte van decode-instances, en hoe pas je die verhouding dynamisch aan als de vraag verandert gedurende de dag? Dit blijft een actief onderzoeksgebied, en het is niet met zekerheid te zeggen welke aanpak zich uiteindelijk als standaard zal doorzetten.
Wie werken eraan?
Microsoft Research heeft met Splitwise een van de eerste invloedrijke publicaties op dit gebied geleverd. In de academische wereld hebben onderzoeksgroepen verbonden aan Amerikaanse universiteiten, waaronder groepen die betrokken waren bij DistServe, belangrijk grondwerk gelegd. NVIDIA investeert zwaar in dit thema via Dynamo en de bredere TensorRT-LLM-softwarestack, logisch voor een bedrijf dat leeft van de verkoop van de GPU's die deze systemen aandrijven. In China is Moonshot AI met Mooncake een zichtbare speler, en er zijn aanwijzingen dat ook andere grote Chinese AI-bedrijven, zoals DeepSeek, vergelijkbare technieken toepassen in hun eigen grootschalige serving-infrastructuur, al zijn niet alle technische details daarover altijd openbaar gemaakt.
Daarnaast wordt de techniek breed gedragen door open source-gemeenschappen: de teams achter vLLM en SGLang, die voortkomen uit onderzoeksgroepen aan onder meer de Universiteit van Californië in Berkeley, bouwen deze mogelijkheden in gangbare software die door talloze bedrijven wordt gebruikt. Het is aannemelijk dat ook andere grote aanbieders van AI-chatbots vergelijkbare interne systemen hebben ontwikkeld, maar zij publiceren doorgaans weinig technische details over hun eigen serving-infrastructuur, dus daarover is publiekelijk minder met zekerheid te zeggen.