Drafters: draft models, Medusa, EAGLE, MTP, DFlash, DSpark

A language model writes one token at a time, and every token costs a full pass through the model. On a GPU that pass is limited by how fast the weights can be read from memory, not by arithmetic. Reading the weights once to score one position or to score five takes almost the same time.

Speculative decoding uses that spare arithmetic. A cheap drafter guesses the next few tokens. The large target model then scores all of the guesses in a single pass, keeps the ones it agrees with, and adds one token of its own. When the guesses are good, one expensive pass yields several tokens instead of one.

Two terms recur below. A model’s hidden state is the vector of numbers it computes for the current position just before it picks a token; it encodes what the model is about to say. The KV cache is the per-token memory a transformer keeps about everything already in the conversation, so that each new token does not re-read the whole text.

The drafter is the part that varies. This page explains the kinds in use, how they differ, and what to watch for. How many tokens to draft per step is a separate setting: see speculative tokens.

Why the answer does not change

The target checks every drafted token before it is kept:

So the drafter only decides how fast text comes out. A bad drafter wastes work; it cannot change the text.

How each kind makes its guesses

How five kinds of drafter produce four draft tokens: a separate draft model runs four sequential passes on tokens alone; Medusa heads read the last hidden state and predict four positions in parallel; EAGLE and MTP heads chain one pass per token from the hidden state; block drafters such as DFlash and DSpark read hidden states from several layers and emit the whole block in one pass. The target then verifies all four in one forward pass. Four draft tokens: how each drafter makes them boxes = what the drafter runs · chips = draft tokens · h = target hidden state Draft model small model, own weights + KV 4 passes, tokens only tokens draft t1 draft t2 draft t3 draft t4 Medusa heads one head per position, on h 1 pass, heads in parallel h head +1 t1 head +2 t2 head +3 t3 head +4 t4 EAGLE · MTP one layer on h + last token 4 passes, chained h, t0 head t1 head t2 head t3 head t4 each pass feeds its own hidden state and token to the next Block drafter DFlash, DSpark: h from several layers 1 pass, whole block h · layer a h · layer b h · layer c block model t1 t2 t3 t4 Then, for every kind target, 1 pass scores t1…t4 and one more position in a single pass keeps tokens up to the first mismatch, then adds its own: 1 to 5 tokens
Where each drafter gets its guesses, and how many drafter passes it needs for a draft of four. Verification is the same for all of them.
KindReadsPasses for 4 tokensTrainedAdds to memory
Draft modeltokens only4, in sequenceseparately, as a small modelown weights, own KV cache
Medusa headslast hidden state1, heads in paralleladded to a finished targeta few small heads
EAGLEhidden state + latest token4, in sequenceadded to a finished targetone small layer + its KV cache
MTPsame as EAGLE4, in sequencewith the targetone layer, inside the checkpoint
Block drafterhidden states from several layers1, whole blockDFlash: added · DSpark: with the targeta small model or extra layers + KV cache

Draft model. The oldest approach: run a much smaller model from the same family, for example a 1-billion-parameter model next to a 70-billion one. It needs no changes to the target, but it sees nothing of the target’s internal state. It guesses only from the text so far, so its guesses are the weakest per unit of size. It also keeps a complete KV cache of its own, which costs memory for every conversation being served.

Medusa. Several small heads sit on top of the target’s final layer. Head 1 predicts the next token, head 2 the one after, and so on, all from the same hidden state and all at once. That makes drafting very cheap. The catch is that head 3 guesses its token without knowing what heads 1 and 2 chose, so guesses further out are accepted less often.

EAGLE. One small transformer layer takes the target’s hidden state and the latest token, and predicts the next hidden state and token. It then feeds its own output back in to predict the one after. Because each guess builds on the previous one, acceptance holds up further out than with Medusa. EAGLE drafts a small tree of alternatives rather than a single line, so the target can check several candidate continuations in one pass; EAGLE-2 shapes that tree per context from the drafter’s own confidence, and EAGLE-3 feeds the layer with features from the target’s low, middle and top layers instead of the top one only.

MTP (multi-token prediction). The same shape as EAGLE, but trained together with the target as an extra training objective rather than added afterwards. DeepSeek-V3 popularised it, and many recent open models ship their MTP layer inside the checkpoint. Because it learned alongside that exact model, it matches it well. Inference engines often run it through their EAGLE code path.

Block drafters. These produce a whole block of guesses in a single pass instead of one guess per pass. DFlash (and its successor DFlash2) is a separate small model that reads hidden states from several of the target’s layers and fills in the block in parallel using block diffusion. DSpark is DeepSeek-V4’s built-in drafter. Like MTP it ships inside the checkpoint, but it drafts a fixed block of 5 tokens, so engines expect the draft depth to match that block size.

How they compare in practice

Things that go wrong

Related settings: speculative tokens, KV type, memory budget.

Questions? Let's Chat :)

vllm settings