DEV Community

Borui Cai
Borui Cai

Posted on

Speculative Decoding, Illustrated: Why Generating 7 Tokens Can Cost the Same as 1

This is a plain-language, illustrated explainer. You don't need an inference background to read it: every idea arrives as an everyday metaphor first (a small model that guesses, a big model that grades; a warehouse, a truck, and a workshop) and as math second β€” and every formula that does appear gets a plain-English translation right next to it. In a few places I deliberately oversimplify to keep the intuition front and center; footnoted rigor is what the papers in the reference list are for. If you've bounced off the original papers, this is the on-ramp.

πŸ”‘ The one sentence that unlocks everything

Why is LLM inference slow, and why does speculative decoding make it fast? It comes down to one sentence: making the matrices bigger does add more multiplications for the GPU β€” but no matter how big the matrix is, one matrix multiplication loads the weights exactly once. More compute does not mean more loading. And in LLM inference, loading (moving weights from GPU memory into the compute units) is where nearly all the time goes, while compute is close to free. So processing a few extra tokens costs almost no extra wall-clock time. This is not an algorithmic trick β€” it is a physical fact of GPU hardware. Every bit of speedup speculative decoding delivers is this one hardware dividend being cashed in.

A concrete example: the sentence "the cat sat on the red mat" is a matrix. Each token is first turned into a row of numbers (its embedding, say d dimensions). Stack the 7 rows and you get a 7 Γ— d matrix X:

        β”Œ                                ┐
  the   β”‚  0.12  -0.83   0.05   0.47  …  β”‚
  cat   β”‚ -0.31   0.22   0.68  -0.10  …  β”‚
  sat   β”‚  0.55   0.09  -0.42   0.33  …  β”‚
  on    β”‚ -0.07   0.61   0.18  -0.25  …  β”‚
  the   β”‚  0.12  -0.83   0.05   0.47  …  β”‚
  red   β”‚  0.29  -0.14   0.52   0.40  …  β”‚
  mat   β”‚  0.44   0.37  -0.20   0.08  …  β”‚
        β””                                β”˜
            = matrix X  (7 rows Γ— d columns)
Enter fullscreen mode Exit fullscreen mode

Rows = tokens (7 here). A longer sentence means more rows and more multiplications β€” but multiplying this entire block X by the weight matrix W loads W from memory exactly once. That is what "more compute, not more loading" looks like in the flesh. (Easter egg: the two "the" rows are identical β€” same token, same embedding row, before attention gets involved.)

Context: This is the technical deep-dive in a two-part series. Part 1 argued that speculative decoding is one of the most underrated skill niches for LLM inference roles in 2025–2026, and introduced the core idea ("a small model guesses, a big model grades"). This part covers the full math (including the rejection-sampling proof), the main research directions of the past two years, and a list of real interview questions.

How to read this: Section 1 is the foundation. Section 2 is the math (formulas, but every one gets a plain-English explanation). Section 3 maps the research landscape (use it as a study roadmap). Section 4 is a framing insight that stands out in interviews. Section 5 is the learning path and interview question bank.


1. Why LLM Inference Is Slow: Two Orthogonal Bottlenecks

To understand why speculative decoding works, you first have to see clearly why inference is slow at all. This section doesn't touch the algorithm yet, but it is the foundation for everything after β€” and explaining it well in an interview instantly separates you from candidates who merely memorized the algorithm.

1.1 Bottleneck A: The Serial Dependency of Autoregressive Generation

Mainstream LLMs are causal Transformers [15] that generate autoregressively:

P(x1,x2,…,xn)=∏i=1nP(xi∣x<i) P(x_1, x_2, \dots, x_n) = \prod_{i=1}^{n} P(x_i \mid x_{<i})

In plain English: every token needs all previous tokens as input. Generating 100 tokens means 100 serial model calls.

This serial nature lives at the algorithm level and cannot be bypassed without changing the modeling paradigm β€” which is exactly where more radical approaches like Lookahead Decoding and diffusion language models come from.

1.2 Bottleneck B: Memory-Bandwidth Bound (the important one)

This one is counterintuitive and a favorite interview topic: the bottleneck of LLM inference is not GPU compute (FLOPs) β€” it is memory bandwidth.

GPU memory is hierarchical:

Tier Capacity Bandwidth Role
HBM (device memory) ~80 GB ~3 TB/s Where model weights live
L2 cache ~50 MB ~10 TB/s Staging area
SRAM (on-chip) ~100 KB ~30 TB/s Where matrix multiplies actually happen

GPU compute cores can only work out of SRAM. On every forward pass, all model weights must stream from HBM into SRAM to participate in the computation β€” this is dictated by GPU physics; no software layer can skip it.

Put a number on it: a 70B model in FP16 is roughly 140 GB of weights. At an H100's ~3 TB/s of HBM bandwidth, the floor for a single forward pass is about 47 ms β€” the physical lower bound on per-token latency.

But the more important fact is this: that 140 GB transfer cost barely changes with how many tokens you process. One token: load everything once. Seven tokens: still load everything once. Processing a few extra positions adds almost nothing to the time of that forward pass.

Why is "a few extra positions" nearly free? The core operation of a forward pass is the matrix multiply Y = X Β· W: input X has shape [N, d] (N positions, d dimensions each), weights W have shape [d, d']. Once the GPU has moved W from HBM into SRAM, it multiplies that same copy of W against all N rows of X.

To be precise: going from 1 row to 7 rows does increase the GPU's FLOPs β€” six extra rows of multiply-accumulate is not zero work. The key is that one matrix multiplication loads W exactly once, and the loading volume does not depend on the number of rows. Since LLM inference is memory-bound β€” compute is wildly abundant and bandwidth is the constraint β€” the extra compute hides inside the weight-loading time: the compute cores were sitting idle waiting for W to arrive anyway, so multiplying a few more rows costs almost no extra wall-clock time. "Extra compute is free" doesn't mean compute literally costs nothing β€” it is a direct consequence of the GPU's compute ≫ bandwidth characteristic.

1.3 Putting the Two Bottlenecks Together: The Core Pain

Bottleneck A (algorithm): N serial forward passes are mandatory.
Bottleneck B (hardware): each forward pass pays a fixed loading cost but produces only 1 token.

Together, they are the essence of slow inference: paying "move 140 GB of weights" per pass and getting exactly 1 token back is a terrible exchange rate.

The elegance of speculative decoding is that it uses B to partially defeat A β€” since extra tokens are free, find a way for one forward pass to verify many tokens. Hold on to this and every paper in the field snaps into place.

1.4 The Key Clarification: What Does One Forward Pass Actually Produce?

Time to puncture a very common misconception β€” getting this right is the key to everything that follows.

Most people think one Transformer forward pass computes 1 token. It doesn't.

πŸ’‘ The key mechanism: one forward pass = one weight load + one matrix multiplication, and that single matrix multiplication computes every input position at once. Loading and computing are welded together β€” there is no such operation as "load once, then compute N separate times." "Computing N times" does not physically exist. What exists is "1 forward pass," "2 forward passes," … and each forward pass is an inseparable bundle of load once + compute all current positions.

Transformers [15] use causal self-attention: given an input sequence of length N, one forward pass outputs a "next-token distribution" at all N positions simultaneously. Every input position i gets a distribution P(x_{i+1} | x≀ᡒ). This is precisely why Transformers train so much faster than RNNs β€” all positions compute in parallel.

So why does ordinary decoding look like "1 token per pass"? Because:

  • Position 0 predicts "what comes after input token 1" β†’ that's input token 2, which we already have
  • Position 1 predicts "what comes after input token 2" β†’ that's input token 3, which we already have
  • …
  • Position Nβˆ’1 predicts "what comes after the last input token" β†’ the only genuinely new information

So the predictions at the first Nβˆ’1 positions are entirely wasted β€” they predict input we've already seen. Ordinary decoding keeps only the last position's output, hence "one new token per pass" from the outside.

Speculative decoding exploits exactly this waste: let a small model pre-fill those "future positions" with guesses, and suddenly all N distributions from the big model's single forward pass become meaningful β€”

  • the first Ξ³ distributions verify the corresponding draft tokens ("do I, the big model, agree with the small model's guess?")
  • the last distribution yields a free bonus token (if all Ξ³ drafts were accepted)

Put ordinary and speculative decoding side by side and it becomes crystal clear (both producing 7 tokens):

Decoding Forward passes Weight loads What those matrix multiplies compute
Ordinary 7 7 (β‰ˆ 7 Γ— 47 ms) Pass k computes k positions but keeps only the last one; the rest is wasted
Speculative 1 1 (β‰ˆ 47 ms) One pass computes 7 positions, all of them used to verify drafts

Here is the counterintuitive part: ordinary decoding's 7th forward pass also computes 7 positions β€” it's just that the first 6 predict "input we already know" and get thrown away. So the total matrix-multiply work of the two approaches is roughly the same. The real difference isn't how much you compute β€” it's how many times you load: ordinary decoding loads the weights 7 times; speculative decoding compresses that to 1. And since loading dominates latency (~47 ms per load), compressing 7 loads into 1 is compressing the time itself.

Within that single verification pass, the costs are also wildly asymmetric:

Stage Who What Cost
Verification forward Big model (GPU) One forward pass, one weight load, distributions at all positions in parallel The main cost (~47 ms)
Accept/reject decisions Algorithm layer (CPU or a tiny GPU kernel) Table lookups over a batch of distributions + corrected rejection sampling Practically free

⚠️ A common wrong formulation is "multiple verifications inside one forward pass" or "multiple forward passes." Both are imprecise. The forward pass is 1, the load is 1, and verification is many distributions from a single pass being consumed in parallel by the outer algorithm. It is a free dividend of the Transformer's causal structure.

Internalize this mechanism and the proof, the research landscape, and the interview questions in the next sections all become intuitive.


2. The Core Algorithm

2.1 The Procedure

Let:

  • Target model M_p with distribution p(Β· | context) (big, slow β€” say 70B)
  • Draft model M_q with distribution q(Β· | context), far smaller than M_p (small, fast β€” say 1B)

Each round of speculative decoding has 4 steps [1, 2]:

  1. Draft: M_q autoregressively generates Ξ³ candidate tokens x₁, …, x_Ξ³ (typically Ξ³ = 4–7)
  2. Parallel verification: feed all Ξ³ tokens plus the prefix to M_p in one forward pass, obtaining the conditional distributions p(Β· | x<α΅’) at every position
  3. Corrected rejection sampling: decide each xα΅’ left to right β€”
    • accept with probability min(1, p(xα΅’)/q(xα΅’))
    • otherwise reject, resample a replacement from the corrected distribution pβ€²(x) ∝ (p(x) βˆ’ q(x))β‚Š, and discard all subsequent drafts (where (Β·)β‚Š = max(0, Β·))
  4. Bonus token: if all Ξ³ are accepted, sample one extra token from p(Β· | x≀_Ξ³) β€” that distribution was computed in the pass anyway, so it's free

2.2 The Key Question: Why Is the Output Exactly Equivalent to Sampling from M_p?

This is the most magical and most important property of speculative decoding: it is not "approximately lossless" β€” it is mathematically exact. Deeply counterintuitive, yet the proof is short. Deriving it live in an interview instantly separates "read the paper" from "understands it."

Goal: show the probability of outputting any token x is exactly p(x).

There are two paths to outputting x:

Path 1 (x is accepted):

Pr⁑(output=x,Β accept)=q(x)β‹…min⁑!(1,Β p(x)q(x))=min⁑(p(x),q(x)) \Pr(\text{output}=x,\ \text{accept}) = q(x) \cdot \min!\left(1,\ \frac{p(x)}{q(x)}\right) = \min(p(x), q(x))

Path 2 (rejected, then x is resampled from the corrected distribution):

Pr⁑(output=x,Β reject)=Pr⁑(reject)β‹…(p(x)βˆ’q(x))+βˆ‘y(p(y)βˆ’q(y))+ \Pr(\text{output}=x,\ \text{reject}) = \Pr(\text{reject}) \cdot \frac{(p(x)-q(x))+}{\sum_y (p(y)-q(y))+}

Here we need one key identity:

βˆ‘y(p(y)βˆ’q(y))+=βˆ‘y[p(y)βˆ’min⁑(p(y),q(y))]=1βˆ’βˆ‘ymin⁑(p(y),q(y))=Pr⁑(reject) \sum_y (p(y)-q(y))_+ = \sum_y \big[p(y) - \min(p(y), q(y))\big] = 1 - \sum_y \min(p(y), q(y)) = \Pr(\text{reject})

That is: the normalizing constant of the corrected distribution equals the rejection probability exactly. The two cancel:

Pr⁑(output=x,Β reject)=(p(x)βˆ’q(x))+ \Pr(\text{output}=x,\ \text{reject}) = (p(x)-q(x))_+

Combine both paths:

Pr⁑(output=x)=min⁑(p(x),q(x))+(p(x)βˆ’q(x))+ \Pr(\text{output}=x) = \min(p(x), q(x)) + (p(x)-q(x))_+

Check both cases:

  • If p(x) β‰₯ q(x): min = q(x), (pβˆ’q)β‚Š = p(x) βˆ’ q(x), sum = p(x) βœ“
  • If p(x) < q(x): min = p(x), (pβˆ’q)β‚Š = 0, sum = p(x) βœ“

The output follows p exactly. ∎

Why this proof is beautiful: the normalizing constant Ξ£_y (p(y)βˆ’q(y))β‚Š would normally require summing over the entire vocabulary (tens of thousands of tokens). Through this identity, it cancels against the rejection probability automatically β€” the algorithm never has to compute it explicitly, yet the result is exactly correct. That is the elegance of corrected rejection sampling.

πŸ’‘ Interview tip: learn these five lines cold and derive them live. Instantly upgrades you from "has read about it" to "understands it."

2.3 Efficiency: Acceptance Rate Sets the Speedup Ceiling

Define the acceptance rate:

Ξ±=Ex∼q[min⁑(1,p(x)/q(x))]=1βˆ’TV(p,q) \alpha = \mathbb{E}_{x\sim q}\big[\min(1, p(x)/q(x))\big] = 1 - \mathrm{TV}(p, q)

where TV is total variation distance. Intuitively, Ξ± measures the overlap between the target and draft distributions β€” the more alike they are, the higher the acceptance, the bigger the speedup.

Expected tokens per round [1]:

ParseError: KaTeX parse error: Expected 'EOF', got '#' at position 13: \mathbb{E}[#Μ²\text{tokens}] …

With draft-to-target cost ratio c (typically c ∈ [0.02, 0.1]), the per-round speedup is:

S(Ξ³)=1βˆ’Ξ±Ξ³+1(1βˆ’Ξ±) (1+Ξ³c) S(\gamma) = \frac{1 - \alpha^{\gamma+1}}{(1-\alpha)\,(1 + \gamma c)}

Bottom line: as c β†’ 0 with optimal Ξ³, the speedup approaches 1 / (1 βˆ’ Ξ±). vLLM reports up to 2.8Γ— in production [3]; EAGLE-family methods reach 3–4Γ—.


3. The Research Landscape (5 Subfields)

Once vanilla speculative decoding was established, the past two years produced several active branches. These are exactly the tech stacks that inference teams hire for.

3.1 Self-Speculation: Medusa & the EAGLE Family

Vanilla requires deploying a separate small model β€” real ops cost and memory overhead. Self-speculation lets the target model draft for itself:

  • Medusa [4]: attach K independent prediction heads after the target model's last layer, predicting tokens 1 through K ahead. Shares the backbone features; cheap to train, simple to deploy
  • EAGLE [5]: the core insight is that token-level drafting uncertainty mostly originates at the feature level, so speculate in hidden-state space (predict the next hidden state, then decode it to a token). Acceptance rates significantly beat token-level methods
  • EAGLE-2 / EAGLE-3 [6]: introduce the dynamic draft tree β€” current SOTA on academic benchmarks, integrated into vLLM [7]

EAGLE-family speedups are typically 3–4Γ—, currently the mainstream production choice.

3.2 Token-Tree Verification: SpecInfer

Vanilla verifies one linear draft per round; a rejection at position 1 discards everything after it β€” wasteful.

SpecInfer [8] has the draft model generate multiple candidate branches organized as a tree, and the target model verifies the whole tree in one pass via custom tree attention, substantially raising expected accepted tokens. Later work (EAGLE-2 and others) adds dynamic depth adjustment.

πŸ’‘ Note: SpecInfer was published at ASPLOS β€” a systems conference, not an ML one. That fact alone reflects the true nature of this field (see Section 4).

3.3 Multi-Token Prediction (MTP)

MTP [9, 10] takes a different route but is often discussed alongside spec decoding.

The idea is to change the training objective so the model predicts k future tokens at every position:

LMTP=βˆ’βˆ‘i=1Nβˆ‘j=1klog⁑Pj(xi+j∣x≀i) \mathcal{L}{\text{MTP}} = -\sum{i=1}^{N} \sum_{j=1}^{k} \log P_j(x_{i+j} \mid x_{\le i})

MTP delivers two kinds of value:

  1. High-quality drafts for spec decoding (a form of self-speculation)
  2. Improved representation quality in the base model (empirically shown in Meta's paper) β€” a side benefit no other acceleration method offers

DeepSeek-V3 adopted MTP at scale [10]; it is one of the most watched directions in industry.

πŸ’‘ Advanced insight: MTP and spec decoding attack different bottlenecks β€” spec decoding borrows the hardware dividend (Bottleneck B) to relieve the algorithmic one (A); MTP attacks A directly. If future hardware (compute-in-memory, etc.) erases B, spec decoding's dividend shrinks dramatically β€” but MTP still works. Articulating this distinction is a senior-level signal in interviews.

3.4 Lookahead Decoding

Lookahead Decoding [11] needs no draft model at all: view autoregressive decoding as solving a nonlinear system, update multiple positions in parallel with Jacobi iteration, and converge to output identical to standard autoregressive decoding.

Pro: zero auxiliary models, zero training.
Con: speedups usually below spec decoding (1.5–2Γ—).

A good fit for resource-constrained deployments or teams that can't maintain an extra draft model.

3.5 Online Learning & Production Deployment

Online Speculative Decoding [12] observes that a draft model's acceptance rate drifts across query distributions β€” a draft trained on general text can lose half its acceptance rate on code-heavy production traffic. The fix: continuously fine-tune the draft model on live traffic during serving.

On the engineering side, vLLM Speculators [7] productizes spec-decoding training and deployment, supports mainstream variants like EAGLE-3, and is used in large production systems including Amazon Rufus and LinkedIn AI [13].


4. The Framing That Matters: This Is Software Engineering, Not Algorithmic Novelty

Understanding this makes you sound like someone who truly gets the field, not someone who just read the papers.

Step back and look at the whole area:

  1. The model itself never changes. Vanilla spec decoding uses the target model exactly as-is β€” zero parameter updates, zero architecture changes
  2. Asymptotic complexity never changes. Generating N tokens is still O(N) serial steps worst-case; only the constant factor drops severalfold
  3. The core math is classical corrected rejection sampling β€” textbook sampling theory, not a new invention
  4. The physical source of the speedup is a GPU-architecture dividend β€” the enormous gap between HBM bandwidth and SRAM speed opened a memory-bound window

Which implies:

  • It is tied to a hardware generation. If compute-in-memory (PIM/CIM) hardware erases the memory wall, the dividend shrinks dramatically
  • It is closer to a systems contribution. SpecInfer went to ASPLOS; vLLM went to SOSP [14] β€” the venues tell the story
  • Its algorithmic purity is limited β€” no new learning paradigm, no new representational capacity, no new objective

None of this diminishes its value β€” quite the opposite. It showcases what engineering insight does for LLM deployment: spotting wasted hardware capability and cashing it in with a clever scheme.

If you're job-hunting, this is great news. You don't need top-venue publications or deep ML theory. You need:

  • Solid systems knowledge (GPU architecture, memory hierarchy, concurrency)
  • The ability to read real code (navigate vLLM internals)
  • Hands-on projects with numbers (measured speedups, acceptance-rate distributions)

This is precisely the window of opportunity for strong engineers without elite-school or research pedigrees.


5. Learning Path & Interview Question Bank

5.1 Must-Read Papers (in order)

# Paper Focus
1 Leviathan et al. (2023) [1] Algorithm 1 + appendix proof
2 Chen et al. (2023) [2] Read against #1; two independent concurrent inventions
3 Cai et al. (2024) Medusa [4] Method section
4 Li et al. (2024) EAGLE [5] The motivation for feature-level speculation
5 Fu et al. (2024) Lookahead [11] The Jacobi-iteration intuition

Advanced: MTP [9], the DeepSeek-V3 report [10], SpecInfer [8], EAGLE-3 [6].

5.2 Hands-On Projects (where the real differentiation happens)

Do at least one:

  1. Run a spec-decoding demo with HuggingFace transformers: model.generate(..., assistant_model=...) β€” a few lines of code
  2. Measure the acceptance rate Ξ±: swap draft models of different sizes (1B vs 3B) and watch Ξ± move
  3. Read the vLLM spec-decoding source: github.com/vllm-project/vllm
  4. Plot the acceptance-position distribution: which tokens get rejected? (Named entities and numbers get rejected often; "the/a/of" sail through)

One sentence in an interview β€” "I benchmarked the X + Y model pair, got a ZΓ— speedup at Ξ± = …, and found that gets rejected most" β€” and you've pulled ahead of the pack.

5.3 Interview Question Bank

Warm-up (asked in every interview):

  1. Explain speculative decoding in one sentence
  2. Where does the speedup come from?
  3. Why is the output exactly lossless? Derive the proof live
  4. Define the acceptance rate Ξ± and what drives it

Mid-level (where most candidates get filtered):

  1. If Transformers are parallel, why can an LLM only output 1 token per pass? (Key: each position predicts P(Β· | prefixα΅’))
  2. How is the KV cache handled in spec decoding? How do rejected drafts get "rolled back" from the cache?
  3. How do you choose the draft length Ξ³? Why isn't bigger always better? Give the E[#tokens] formula and discuss
  4. When does spec decoding fail to accelerate? (Large batches, low Ξ±, a draft model that's too heavy relative to the target β€” extremely common question)
  5. What are Medusa's and EAGLE's core innovations, and what problems do they solve?

Senior (what separates top candidates):

  1. The fundamental difference between spec decoding and MTP? When to use which?
  2. If the workload becomes compute-bound (large batch, PIM hardware), does spec decoding still matter?
  3. What does token-tree verification buy over single-branch verification?
  4. What's the tension between speculative decoding and continuous batching?

Open-ended design:

  1. Design a production spec-decoding system for a 70B model at 1000 QPS: draft selection, dynamic Ξ³, memory budget
  2. Acceptance rate is stuck at 50% β€” diagnose (tokenizer mismatch / domain drift / temperature / model-family mismatch)

5.4 Tricks for Interns and New Grads

  1. Use the three key terms unprompted: memory-bound, acceptance rate Ξ±, corrected rejection sampling. Interviewers hear them and know you're real
  2. Derive, don't recite: producing min(p,q) + (pβˆ’q)β‚Š = p live raises your level instantly
  3. Volunteer the limitations: "In high-batch serving the gains shrink, because large batches are no longer memory-bound" β€” interviewers love hearing this
  4. Nail spec decoding vs MTP: "one borrows the memory-bound dividend to attack Bottleneck A; the other attacks A directly" β€” top-candidate signal

Closing

Speculative decoding is not ML mysticism. It is a clear, learnable engineering optimization. The whole field fits in one sentence:

Paying "move 140 GB of weights" for 1 token is a terrible deal; let a small model guess several tokens, have the big model grade them all in one load, and use corrected rejection sampling to guarantee the output is exactly lossless.

Hold that thread and every variant β€” Medusa, EAGLE, SpecInfer, MTP, Lookahead β€” is just a different branch of the same tree.

I hope this pair of articles helps anyone preparing for LLM inference roles. This field genuinely isn't that hard β€” the key is building projects with measurable numbers.

And if you don't have an elite-school or research pedigree: this is a fully viable path. Companies desperately need engineers who understand inference optimization, and the barrier to entry here is far lower than "training large models." Work through these two articles carefully, build one or two small projects with real measurements, and you're already ahead of most candidates.


References

Academic Papers

[1] Leviathan, Y., Kalman, M., & Matias, Y. (2023). Fast Inference from Transformers via Speculative Decoding. Proceedings of the 40th International Conference on Machine Learning (ICML 2023). arXiv:2211.17192.

[2] Chen, C., Borgeaud, S., Irving, G., Lespiau, J.-B., Sifre, L., & Jumper, J. (2023). Accelerating Large Language Model Decoding with Speculative Sampling. arXiv preprint arXiv:2302.01318.

[4] Cai, T., Li, Y., Geng, Z., Peng, H., Lee, J. D., Chen, D., & Dao, T. (2024). Medusa: Simple LLM Inference Acceleration Framework with Multiple Decoding Heads. ICML 2024. arXiv:2401.10774.

[5] Li, Y., Wei, F., Zhang, C., & Zhang, H. (2024). EAGLE: Speculative Sampling Requires Rethinking Feature Uncertainty. ICML 2024.

[6] Li, Y., Wei, F., Zhang, C., & Zhang, H. (2024). EAGLE-2: Faster Inference of Language Models with Dynamic Draft Trees. arXiv preprint arXiv:2406.16858.

[8] Miao, X., Oliaro, G., Zhang, Z., Cheng, X., Wang, Z., Wong, R. Y. Y., et al. (2024). SpecInfer: Accelerating Large Language Model Serving with Tree-based Speculative Inference and Verification. ASPLOS 2024.

[9] Gloeckle, F., Idrissi, B. Y., Rozière, B., Lopez-Paz, D., & Synnaeve, G. (2024). Better & Faster Large Language Models via Multi-token Prediction. ICML 2024.

[10] DeepSeek-AI. (2024). DeepSeek-V3 Technical Report. arXiv preprint arXiv:2412.19437.

[11] Fu, Y., Bailis, P., Stoica, I., & Zhang, H. (2024). Break the Sequential Dependency of LLM Inference Using Lookahead Decoding. ICML 2024.

[12] Liu, X., Hu, L., Bailis, P., Stoica, I., Deng, Z., Cheung, A., & Zhang, H. (2024). Online Speculative Decoding. ICML 2024.

[14] Kwon, W., Li, Z., Zhuang, S., Sheng, Y., Zheng, L., Yu, C. H., et al. (2023). Efficient Memory Management for Large Language Model Serving with PagedAttention. SOSP 2023.

[15] Vaswani, A., Shazeer, N., Parmar, N., Uszkoreit, J., Jones, L., Gomez, A. N., Kaiser, Ł., & Polosukhin, I. (2017). Attention Is All You Need. NeurIPS 2017. arXiv:1706.03762.

Industry Blogs

[3] vLLM Team. (2024-10-17). How Speculative Decoding Boosts vLLM Performance by up to 2.8x. https://blog.vllm.ai/2024/10/17/spec-decode.html

[7] vLLM Team. (2025-12-13). Diving into speculative decoding training support for vLLM with Speculators v0.3.0. https://blog.vllm.ai/2025/12/13/speculators-v030.html

[13] vLLM Team. (2025-01-10). vLLM 2024 Retrospective and 2025 Vision. https://blog.vllm.ai/2025/01/10/vllm-2024-wrapped-2025-vision.html


If this helped, the best way to support the series is to share it with someone prepping for inference-engineering interviews. Questions and corrections welcome.

Top comments (0)