# Speculative Decoding: versnelling van LLM-inferentie

[Naar de inhoud](#lm-inhoud)Netwerk/NL[EN](/en/)[Hubhub.llmnet.nlModellen vergelijken op taak, taal, kosten en licentie.](https://hub.llmnet.nl/)[Communitycommunity.llmnet.nlPrompttechnieken, patronen en systeemprompts.](https://community.llmnet.nl/)[APIapi.llmnet.nlLLM's robuust in software: rate limits, routing, structured output.](https://api.llmnet.nl/)[Consultancyconsultancy.llmnet.nlAI invoeren in een organisatie, van pilot tot productie.](https://consultancy.llmnet.nl/)[Nieuwsnieuws.llmnet.nlOntwikkelingen in AI, geduid voor Nederland.](https://nieuws.llmnet.nl/)[Benchmarkbenchmark.llmnet.nlZelf meten wat AI-kwaliteit is, voor jouw taken.](https://benchmark.llmnet.nl/)[Vacaturesvacatures.llmnet.nlAI-rollen, salarissen en carrièrepaden in Nederland.](https://vacatures.llmnet.nl/)[Lerenleren.llmnet.nlAI-concepten in gewoon Nederlands, van beginner tot bouwer.](https://leren.llmnet.nl/)[Gidsgids.llmnet.nlAI privé draaien op eigen Mac, pc, NAS of thuisserver.](https://gids.llmnet.nl/)[Directorydirectory.llmnet.nlHet AI-ecosysteem in kaart: tools, modellen, bedrijven.](https://directory.llmnet.nl/)[Radarradar.llmnet.nlSignalen uit X, onderzoek en communities voor indie developers.](https://radar.llmnet.nl/)[Appsapps.llmnet.nlReviews van AI-apps en open-source repo's, met tips voor wie zelf bouwt.](https://apps.llmnet.nl/)[llmnet.nl — hoofdsite](https://llmnet.nl/)[](https://x.com/intent/post?url=https%3A%2F%2Fnieuws.llmnet.nl%2Fspeculative-decoding-versnelling-van-llm-inferentie&text=Speculative%20Decoding%3A%20versnelling%20van%20LLM-inferentie)[](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fnieuws.llmnet.nl%2Fspeculative-decoding-versnelling-van-llm-inferentie)[](https://www.reddit.com/submit?url=https%3A%2F%2Fnieuws.llmnet.nl%2Fspeculative-decoding-versnelling-van-llm-inferentie&title=Speculative%20Decoding%3A%20versnelling%20van%20LLM-inferentie)[](#)[](https://x.com/intent/post?url=https%3A%2F%2Fnieuws.llmnet.nl%2Fspeculative-decoding-versnelling-van-llm-inferentie&text=Speculative%20Decoding%3A%20versnelling%20van%20LLM-inferentie)[](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fnieuws.llmnet.nl%2Fspeculative-decoding-versnelling-van-llm-inferentie)[](https://www.reddit.com/submit?url=https%3A%2F%2Fnieuws.llmnet.nl%2Fspeculative-decoding-versnelling-van-llm-inferentie&title=Speculative%20Decoding%3A%20versnelling%20van%20LLM-inferentie)[](#)

 
# Speculative Decoding: versnelling van LLM-inferentie

 Door Ivo Donker — samengesteld met AI-ondersteuning (Claude & Gemini)

 In het canonieke overzicht over modelarchitecturen zagen we in het artikel over [de opkomst van kleine taalmodellen (SLM's)](https://nieuws.llmnet.nl/kleine-taalmodellen) al dat kleinere systemen enorme operationele voordelen bieden qua rekenkracht en geheugengebruik. Toch blijft de vraag hoe we de absolute generatiesnelheid van zeer omvangrijke taalmodellen kunnen opvoeren zonder concessies te doen aan de outputkwaliteit. Grote taalmodellen genereren tekst token voor token. Elk nieuw token vereist een volledige rekenronde over honderden miljarden parameters, waardoor het proces fundamenteel begrensd wordt door geheugenbandbreedte in plaats van pure rekenkracht. Speculative decoding lost deze flessenhals op door een asymmetrisch tandem van modellen in te zetten.

 Door een compact, snel model speculatief vooruit te laten lopen en de voorspelde tokens in één enkele parallelle stap te laten verifiëren door het grote doelmodel, breekt deze techniek met het traditionele sequentiële paradigma. In dit artikel analyseren we de wiskundige grondslag, de hardware-implicaties, de praktische acceptatiegraad en de harde randvoorwaarden van speculatieve inferentie in productieomgevingen.

 
## De geheugenbandbreedte-flessenhals bij autoregressieve generatie

 Klassieke inferentie bij autoregressieve taalmodellen is sterk memory-bandwidth bound. Wanneer een model een enkel token produceert, moeten alle gewichten van het netwerk van het tragere videogeheugen (VRAM) naar de snelle rekenkernen van de processor of grafische kaart worden verplaatst. Voor een neuraal netwerk van 70 miljard parameters in 16-bits precisie betekent dit dat er circa 140 gigabyte aan gewichten per token getransporteerd moet worden, ongeacht of het te genereren woord complex is of een voorspelbaar leesteken betreft.

 De daadwerkelijke rekenkernen (zoals Tensor Cores) voltooien de benodigde matrixvermenigvuldigingen voor één enkel token in een fractie van de tijd die nodig is om die gewichten in te laden. De rekenkracht blijft daardoor gedurende het grootste deel van de generatiecyclus onderbenut. Dit fenomeen verklaart waarom batch-verwerking efficiënter is: wanneer meerdere prompts tegelijkertijd worden verwerkt, worden dezelfde gewichten hergebruikt voor tientallen tokens tegelijk, waardoor de zogeheten arithmetic intensity stijgt.

 Bij interactieve toepassingen — zoals chatbots of code-assistenten — is de batchgrootte voor een individuele gebruiker echter gelijk aan één. De vertragende factor is hier puur de opeenvolging van opeenvolgende geheugentransfers. Pas wanneer we meerdere tokens parallel kunnen evalueren binnen één enkele voorwaartse berekening (forward pass), stijgt het rendement van de beschikbare hardware aanzienlijk. Dit hardware-vraagstuk sluit direct aan bij de bredere dynamiek die wordt uitgewerkt in het overzicht over [de race om AI-chips en hardwarecapaciteit](https://nieuws.llmnet.nl/chips-en-hardware-race), waarin de fysieke grenzen van geheugeninterfaces centraal staan.

 
## Het basisprincipe: Draft-model en Target-verificatie

 Speculative decoding doorbreekt de sequentiële barrière door het generatieproces op te splitsen in twee gescheiden rollen: speculatie en verificatie. Het systeem combineert een klein, snel neuraal netwerk (het draft-model) met het volwaardige, zware netwerk (het target-model). Beide modellen moeten hetzelfde vocabulaire en dezelfde tokenizer hanteren om representatiefouten te voorkomen.

 In de praktijk werkt het proces in vaste iteratieve cycli:

 
 
- Fase 1 (Drafting): Het kleine draft-model genereert autonoom en sequentieel een reeks van bijvoorbeeld K kandidaat-tokens (vaak 3 tot 6 tokens). Omdat het draft-model slechts een fractie van de omvang van het target-model heeft, verloopt deze stap razendsnel met minimale geheugentransfers.
 
- Fase 2 (Verificatie): De K kandidaat-tokens worden samen met de bestaande context in één enkele forward pass aan het grote target-model gevoed. Het target-model berekent gelijktijdig de kansverdelingen voor alle posities in de reeks.
 
- Fase 3 (Acceptatie & Correctie): Een statistisch acceptatie-algoritme controleert de voorspelde tokens van links naar rechts. Geaccepteerde tokens worden direct definitief gemaakt. Zodra een token wordt afgewezen, genereert het target-model direct een gecorrigeerd vervangend token uit zijn eigen verdeling, en wordt de resterende speculatieve staart weggegooid.
 

 Wie de exacte conceptuele stappen en datastromen interactief wil doorgronden, kan terecht bij de interactieve gids over [hoe speculatieve decoding de generatiesnelheid verhoogt](https://leren.llmnet.nl/speculatieve-decoding-uitgelegd) voor een didactische uitwerking van de interne matrixstappen. Het cruciale winstpunt is dat één zware forward pass van het target-model nu meerdere geaccepteerde tokens oplevert in exact dezelfde rekentijd die voorheen nodig was voor één enkel token.

 
## Wiskundig bewijs voor distributiebehoud

 Een hardnekkig misverstand over speculative decoding is dat het een benaderingstechniek zou zijn die de uiteindelijke modelkwaliteit aantast. Dit is aantoonbaar onjuist. Mits correct geïmplementeerd via speculative rejection sampling, is de resulterende kansverdeling van de output wiskundig identiek aan de verdeling die het target-model zelfstandig zou produceren.

 Laat $M_t(x)$ de kansverdeling zijn over het vocabulaire gegenereerd door het target-model voor een gegeven positie, en $M_d(x)$ de kansverdeling van het draft-model. Wanneer het draft-model een token $x$ voorstelt, accepteren we dit token met de volgende overgangswaarschijnlijkheid:

P(accepteer x) = min(1, M_t(x) / M_d(x))

 Wanneer het voorgestelde token $x$ wordt afgewezen (met kans $1 - P(\text{accepteer } x)$), trekken we een nieuw token $x'$ uit een genormaliseerde residuele verdeling:

P(x') = max(0, M_t(x') - M_d(x')) / som_over_vocab(max(0, M_t(v) - M_d(v)))

 Deze correctiestap compenseert exact voor de afwijkingen van het draft-model. Is de kans die het target-model toekent groter dan of gelijk aan die van het draft-model, dan is acceptatie gegarandeerd. Is de kans lager, dan zorgt de residuele trekking ervoor dat tokens die door het draft-model werden ondergewaardeerd alsnog met de juiste marginale kans worden gekozen. Bij deterministische generatie (greedy decoding met temperatuur nul) reduceert dit eenvoudig tot het controleren of het voorspelde token overeenkomt met de argmax van het target-model.

 
## Hardware-efficiëntie en acceptatiegraad in de praktijk

 De effectieve versnelling die in productie wordt gerealiseerd hangt direct af van twee factoren: de acceptatiegraad ($\alpha$) van de voorgestelde tokens en de relatieve rekentijd van het draft-model ten opzichte van het target-model. De acceptatiegraad geeft het gemiddelde percentage speculatieve tokens aan dat de verificatiefase succesvol doorstaat.

 In onderstaande tabel analyseren we hoe verschillende taken en domeinen presteren onder speculatieve inferentie bij een vaste speculatielengte ($K=5$):

 
 
 
 
 Domein / Taak | 
 Gemiddelde Acceptatiegraad (α) | 
 Effectieve Tokenversnelling | 
 Primaire Flessenhals | 
 

 
 
 
 Broncode & Gestructureerde JSON | 
 75% – 90% | 
 2,4× – 3,1× | 
 Grote syntax-voorspelbaarheid; draft model volgt vaste patronen | 
 

 
 Tekstsamenvatting & Extractie | 
 65% – 80% | 
 1,9× – 2,5× | 
 Woordkeuze leunt deels op de aangeleverde broncontext | 
 

 
 Vrije Conversatie & Redenering | 
 50% – 65% | 
 1,4× – 1,9× | 
 Hogere entropie; model wijkt vaker af bij complexe redeneerstappen | 
 

 
 Creatief Schrijven (Hoge Temp) | 
 35% – 50% | 
 1,1× – 1,4× | 
 Lage overlap tussen probabilistische distributies | 
 

 
 
 

 Uit metingen blijkt dat programmeertalen en formele documenten het hoogste rendement opleveren. Dit komt doordat programmeertaalconstructies, imports, sluitletters en standaardsyntax een relatief lage informatie-entropie hebben. Het draft-model voorspelt dergelijke patronen vrijwel foutloos. Bij creatieve proza met een hoge sampling-temperatuur zakt $\alpha$ daarentegen aanzienlijk, waardoor de rekenwinst marginaal wordt.

 
## Architectonische varianten: Draft-modellen, Medusa en EAGLE

 De oorspronkelijke opzet van speculative decoding vereist dat twee afzonderlijke neurale netwerken gelijktijdig in het VRAM worden geladen. Dit legt extra beslag op het geheugenbudget. Om deze beperking te omzeilen zijn er geavanceerde varianten ontwikkeld:

 
### 1. Standalone Draft-modellen

 Hierbij fungeert een kleiner zustermodel uit dezelfde familie als draft-model (bijvoorbeeld een 8B-parameter variant als assistent voor een 70B-parameter netwerk). Het voordeel is modulaire inzetbaarheid; het nadeel is dat het draft-model zijn eigen volledige KV-cache en parametersets in het videogeheugen moet reserveren.

 
### 2. Multi-Head Speculatie (Medusa)

 In plaats van een apart netwerk worden meerdere parallelle decodeer-koppen bovenop de laatste verborgen laag (hidden state) van het target-model getraind. Elke extra kop voorspelt een token op positie $t+1, t+2, \dots, t+k$. Dit elimineert de noodzaak voor een tweede netwerk en bespaart aanzienlijk op geheugenoverhead, hoewel de training van deze koppen specifiek per model moet gebeuren.

 
### 3. Dynamische Contextuele Speculatie (EAGLE)

 EAGLE (Extensible Autoregressive Generation with Loosely-coupled Expansion) verbetert de speculatieve kwaliteit door niet alleen eerdere tokens, maar ook de verborgen toestanden (feature vectors) van de vorige laag aan de speculatiekop te voeren. Hierdoor stijgt de acceptatiegraad aanzienlijk, met name bij complexere redeneertaken, doordat semantische context veel rijker bewaard blijft tijdens de speculatieve stappen.

 Voor wie dergelijke infrastructuren zelf in productie wil configureren en afstellen, biedt de handleiding over [speculative decoding instellen voor snellere LLM-tokens](https://gids.llmnet.nl/speculative-decoding-instellen-voor-snellere-llm-tokens) praktische configuratievoorbeelden voor runtimes zoals vLLM, TensorRT-LLM en llama.cpp.

 
## Integratie met Mixture of Experts en Context Caching

 Speculative decoding staat niet op zichzelf, maar vormt een krachtige synergie met andere architecturale optimalisaties. Een belangrijk raakvlak ligt bij sparse modellen. Zoals gedetailleerd beschreven in het artikel over [hoe Mixture of Experts de rekenkosten verlaagt](https://nieuws.llmnet.nl/hoe-mixture-of-experts-de-rekenkosten-van-llm-productie-verlaagt), activeert een MoE-architectuur per token slechts een subset van zijn totale parametervolume. Wanneer een compact MoE-model fungeert als draft-model, daalt de speculatielatentie nog verder, omdat de forward pass van het draft-model extreem weinig zwevendekommaberekeningen vereist.

 Daarnaast is er een directe wisselwerking met de KV-cache (Key-Value cache). Speculatieve verificatie vereist dynamisch boombeheer van de cache (tree-attention). In plaats van een lineaire reeks tokens kan het draft-model meerdere vertakkende hypothesen tegelijk voorleggen aan het target-model via een speciaal aandachtsmasker (attention mask). Het target-model evalueert deze boomstructuur in één rekenstap, selecteert het langste geldige pad en snoeit de afgewezen takken direct uit de geheugencache.

 
## Praktijkimplementatie: Minimalistisch verificatie-algoritme

 Om het samenspel tussen het draft-model en het target-model inzichtelijk te maken, toont onderstaand Python-voorbeeld het kernmechanisme van autoregressieve speculatie bij deterministische (greedy) inferentie:

def speculative_step(target_model, draft_model, context, gamma=4):
 # 1. Genereer gamma speculatieve tokens met het snelle model
 draft_tokens = []
 curr_context = list(context)
 
 for _ in range(gamma):
 next_token = draft_model.predict_next(curr_context)
 draft_tokens.append(next_token)
 curr_context.append(next_token)
 
 # 2. Evalueer alle kandidaatposities parallel met het target model
 target_logits = target_model.forward_pass(context + draft_tokens)
 
 # 3. Verifieer de voorspelde reeks
 accepted_tokens = []
 for i, token in enumerate(draft_tokens):
 true_token = target_logits[len(context) + i - 1].argmax()
 if token == true_token:
 accepted_tokens.append(token)
 else:
 # Bij een fout nemen we de correctie van het target model
 accepted_tokens.append(true_token)
 return accepted_tokens # Breek af bij de eerste mismatch
 
 # 4. Als alle tokens correct waren, voeg een extra bonus token toe
 bonus_token = target_logits[len(context) + gamma - 1].argmax()
 accepted_tokens.append(bonus_token)
 return accepted_tokens

 Dit basispatroon toont waarom zelfs bij een gedeeltelijke mismatch er alsnog tijdswinst ontstaat: zodra bijvoorbeeld twee van de vier tokens correct zijn, levert de cyclus alsnog drie gevalideerde tokens op (twee goedgekeurde plus de gecorrigeerde afwijking) binnen de tijdsduur van één enkele zware verificatiestap.

 
## Expliciete nadelen, trade-offs en randvoorwaarden

 Hoewel speculative decoding substantiële snelheidswinsten oplevert, kent de techniek specifieke nadelen en operationele beperkingen die zorgvuldig moeten worden afgewogen:

 
 
- Geheugenbeslag (VRAM Footprint): Het gelijktijdig inladen van zowel het target-model als het draft-model vereist extra videogeheugen. Op systemen waar het hoofdmodel al ternauwernood in het VRAM past, kan de toevoeging van een draft-model leiden tot out-of-memory fouten of dwingen tot zwaardere kwantisatie.
 
- Afname van throughput bij hoge batchgroottes: Speculative decoding is ontworpen voor lage concurrency (batchgrootte 1 tot 4). Bij grootschalige productieservers die al continu draaien met verzadigde GPU-rekenkernen (hoge batch sizes), verbruikt de verificatiestap rekenkracht die anders benut had kunnen worden voor andere gebruikers. In zulke situaties kan de totale server-throughput per seconde juist dalen.
 
- Software-complexiteit: Frameworks moeten geavanceerde tree attention en niet-lineair KV-cachebeheer ondersteunen. Fouten in de implementatie van rejection sampling kunnen leiden tot subtiele distributieverschuivingen en kwaliteitsverlies.
 
- Kwantisatiegevoeligheid: Als het draft-model en het target-model asymmetrisch gekwantiseerd zijn (bijvoorbeeld een FP8 target met een INT4 draft), kan de divergentie tussen beide kansverdelingen toenemen, waardoor de acceptatiegraad ($\alpha$) scherp daalt.
 

 
## Conclusie en vooruitblik op inferentie-architecturen

 Speculative decoding markeert een fundamentele verschuiving in hoe inferentie-infrastructuur wordt ingericht. Door hardwarematige geheugenbeperkingen te omzeilen via wiskundig zuivere parallelle verificatie, verdubbelt de interactieve generatiesnelheid in veel zakelijke use-cases zonder enig kwaliteitsverlies.

 De verdere ontwikkeling beweegt zich naar architecturen waarin speculatiekoppen direct geïntegreerd worden tijdens het voor-trainen van het hoofdmodel, waardoor externe draft-modellen overbodig worden. Voor engineers en organisaties die lokale of private AI-omgevingen exploiteren, vormt speculative decoding een onmisbare schakel om enterprise-kwaliteit taalmodellen met lage latentie aan te bieden op bestaande hardware-infrastructuren.
