vLLM Productie Implementatie: Bouwen van High-Throughput Inference Serving Architectuur
Bijgewerkt 11 december 2025
December 2025 Update: Stripe behaalt 73% kostenreductie voor inference via vLLM migratie (50M dagelijkse API calls op 1/3 GPU fleet). PagedAttention elimineert 60-80% geheugen verspilling door KV cache fragmentatie. vLLM levert 2-24x doorvoer versus conventionele serving. Draait productie bij Meta, Mistral AI, Cohere, IBM. OpenAI-compatibele APIs vereenvoudigen adoptie.
Stripe's ML platform team zag hun inference kosten met 73% dalen na migratie van Hugging Face Transformers naar vLLM, waarbij dezelfde 50 miljoen dagelijkse API calls verwerkt werden op een derde van de GPU fleet.¹ Het geheim achter vLLM's efficiëntie ligt in PagedAttention, een algoritme dat GPU geheugen behandelt als virtueel geheugen in besturingssystemen, waarmee de fragmentatie wordt geëlimineerd die 60-80% van het geheugen verspilt in traditionele inference systemen.² Organisaties die productie LLM workloads draaien ontdekken dat vLLM 2-24x doorvoer verbeteringen levert ten opzichte van conventionele serving frameworks, waarmee de economie van het implementeren van grote taalmodellen op schaal wordt getransformeerd.³
Het inference serving landschap fragmenteert in tientallen opties: TensorRT-LLM belooft maximale NVIDIA optimalisatie, Hugging Face TGI biedt vertrouwde integratie, en Ollama vereenvoudigt lokale implementatie. Toch is vLLM naar voren gekomen als de dominante keuze voor productie workloads, waarmee inference wordt aangedreven bij Meta, Mistral AI, Cohere en IBM.⁴ Het framework's combinatie van PagedAttention, continue batching en OpenAI-compatibele APIs creëert een implementatie-ervaring die pure performance balanceert met operationele eenvoud. Het begrijpen van vLLM's architectuur en implementatiepatronen scheidt organisaties die kosteneffectieve inference bereiken van degenen die verdrinken in GPU rekeningen.
PagedAttention transformeert geheugen beheer
Traditionele LLM inference wijst een aaneengesloten geheugenblok toe voor elke sequence's key-value (KV) cache, waarbij ruimte wordt gereserveerd voor de maximaal mogelijke sequence lengte ongeacht het werkelijke gebruik. Een systeem geconfigureerd voor 4.096 tokens wijst die volledige geheugen toe zelfs voor 100-token responses, waarbij 97% van de gereserveerde capaciteit wordt verspild. Vermenigvuldig met honderden gelijktijdige requests en GPU geheugen vult zich met lege reserveringen terwijl werkelijke sequences in de wachtrij staan op resources.
PagedAttention herdenkt deze architectuur door GPU geheugen te verdelen in vaste pagina's, typisch 16 tokens elk.⁵ Elke sequence houdt een lijst van pagina referenties bij in plaats van een aaneengesloten allocatie, waardoor verschillende doorbraak mogelijkheden ontstaan:
Niet-aaneengesloten opslag stelt KV cache blokken in staat om zich te verspreiden over beschikbaar GPU geheugen. Het systeem heeft niet langer grote aaneengesloten regio's nodig, waarmee de fragmentatie wordt geëlimineerd die traditionele allocators plaagt. Een 2.000-token sequence slaat zijn cache op over 125 pagina's verdeeld waar ruimte bestaat.
Dynamische allocatie voorziet alleen geheugen naarmate sequences groeien. De eerste token wijst een pagina toe. De zeventiende token triggert een tweede pagina allocatie. Geheugen consumptie volgt werkelijk gebruik in plaats van theoretische maximums, waarmee effectieve capaciteit dramatisch wordt verbeterd.
Geheugen delen stelt identieke prompt prefixes in staat om KV cache pagina's te delen over requests. Tien gebruikers die variaties van dezelfde system prompt vragen delen een enkele gecachte kopie van die prefix, waarmee geheugen consumptie met 90% wordt verminderd voor veel voorkomende patronen. Productie systemen met gestandaardiseerde prompts zien utilizatie verbeteringen van meer dan 400%.⁶
Bijna-nul verspilling elimineert interne fragmentatie die veel voorkomt bij statische allocatie. Traditionele systemen verspillen gemiddeld 4.1 tokens per sequence in gedeeltelijk gevulde blokken. PagedAttention's pagina-niveau granulariteit vermindert verspilling tot fracties van een pagina, typisch onder 8 tokens per sequence ongeacht de lengte.
Het algoritme haalt directe inspiratie uit besturingssysteem virtueel geheugen, waarbij decennia van geheugen beheer onderzoek wordt toegepast op GPU inference. Net zoals moderne besturingssystemen virtuele adressen mappen naar fysieke geheugen pagina's, mapt PagedAttention logische KV cache posities naar fysieke GPU geheugen blokken. De vertaling overhead voegt microseconden toe aan elke attention berekening maar bespaart gigabytes aan geheugen capaciteit.
Continue batching maximaliseert GPU utilization
Statische batching wacht op een vast aantal requests voordat ze samen worden verwerkt, waardoor latentie pieken ontstaan wanneer batches gedeeltelijk vullen en doorvoer daalt wanneer requests ongelijk arriveren. Een batch size van 32 betekent dat de 31e request wacht op een extra aankomst voordat de verwerking begint, wat mogelijk seconden latentie toevoegt tijdens periodes met weinig verkeer.
Continue batching in vLLM elimineert batch grenzen volledig.⁷ De scheduler opereert op iteratie niveau in plaats van request niveau, waarbij beslissingen worden genomen bij elke forward pass in plaats van bij elke batch. Wanneer een sequence generatie voltooit, accepteert zijn slot onmiddellijk een nieuwe request zonder te wachten tot sibling sequences klaar zijn. De GPU verwerkt welk werk er ook bestaat op elk moment, waarbij gaten worden gevuld die statische batching leeg laat.
De implementatie vereist zorgvuldige coördinatie tussen geheugen beheer en scheduling:
Iteratie-niveau scheduling evalueert de request queue bij elke decoder stap. Voltooide sequences geven hun slots vrij, wachtende requests claimen beschikbare capaciteit, en de volgende iteratie gaat verder met een optimaal gevulde batch. Latentie variantie tussen requests wordt geabsorbeerd in plaats van versterkt.
Preemption handling beheert situaties waar geheugen druk sequence uitzetting forceert. Lagere-prioriteit requests maken een checkpoint van hun KV cache status en geven GPU geheugen af aan hogere-prioriteit sequences. Wanneer capaciteit terugkeert, hervatten onderbroken sequences vanaf hun checkpoints in plaats van heropstarten vanaf het begin.
Prefix caching identificeert requests die gemeenschappelijke prefixes delen en routeert ze naar instances die al relevante KV cache pagina's bevatten. Een klantenservice systeem waar elke request begint met dezelfde 500-token context serveert volgende tokens vanaf gecachte status, waarmee redundante prefix berekening wordt geëlimineerd.
Benchmarks demonstreren de impact: vLLM behaalt doorvoer van 793 tokens per seconde vergeleken met Ollama's 41 tokens per seconde bij equivalente configuraties, met P99 latentie van 80ms versus 673ms.⁸ De continue batching architectuur houdt deze voordelen aan over concurrency levels van 1 tot 256 gelijktijdige gebruikers.
Productie architectuur schaalt over clusters
Single-node vLLM implementaties hanteren substantieel verkeer, maar productie systemen vereisen cluster-wide orkestratie voor betrouwbaarheid, schaal en efficiëntie. De vLLM productie-stack transformeert de inference engine in een compleet serving systeem met vier kritieke toevoegingen.⁹
Request routing dirigeert binnenkomende queries naar juiste backend instances gebaseerd op routing keys, session IDs, of prefix matching. Intelligente routing maximaliseert KV cache hergebruik door gerelateerde requests te sturen naar instances die al relevante context bevatten. Een gesprek met meerdere beurten routeert consistent naar dezelfde backend, waarmee redundante prefix berekening over instances wordt vermeden.
KV cache sharing breidt PagedAttention's geheugen efficiëntie uit over meerdere vLLM instances via het LMCache project. Backends delen berekende KV cache blokken over hoge-snelheid interconnects, waardoor cache hits mogelijk zijn zelfs wanneer requests naar verschillende instances routeren. Systemen met repetitieve workloads zien 3-10x latentie reductie en 2-5x doorvoer verbetering door cross-instance cache sharing.¹⁰
Observability integratie exponeert metrics via Prometheus en visualisatie via Grafana dashboards. Per-request metrics vangen time-to-first-token (TTFT), time-between-tokens (TBT) en end-to-end latentie. Per-instance metrics tracken GPU utilization, geheugen druk, queue diepte en cache hit rates. Operations teams krijgen zicht op performance bottlenecks en capaciteitsplanning data.
Horizontale scaling voegt vLLM instances toe en verwijdert ze gebaseerd op vraag signalen. Kubernetes implementaties gebruiken Horizontal Pod