---
title: "第 8 课:现代 Speculative Systems:EAGLE-3、MTP、DFlash 与 DSpark"
jupyter: python3
---
## 本课目标与通过标准
本课产出:能从 vLLM/SGLang 当前源码辨认已集成的 proposer/worker 与 verify 路径,比较 autoregressive feature/token draft、MTP、block-diffusion draft 和 adaptive depth,并设计不误导的 benchmark。
通过要求:唯一代码填空题通过全部断言;Q1~Q3 都能沿源码对象给出因果链;能指出一个正确性不变量、一个性能边界和一个需要 benchmark 才能确认的结论;总分至少 8/10。
## 源码版本与阅读方法
本课程使用固定 commit 的永久链接保证行号可复现,同时链接 current docs 供核对最新变化。阅读时先画调用图和状态所有权,再进入分支;不要从大文件第一行机械顺读。
源码阅读路线:
1. SGLang `speculative/spec_info.py::SpeculativeAlgorithm`:当前内置 DFLASH、DSPARK、EAGLE/EAGLE3、FROZEN_KV_MTP、STANDALONE、NGRAM。
2. `eagle_worker_v2.py::draft/verify`:tree draft、target verify、CUDA graph 与 adaptive runtime state。
3. `dflash_worker_v2.py::forward_batch_generation`:target hidden capture、block draft、verify 和下一轮状态。
4. `dspark_components/dspark_worker_v2.py`:ragged verify、confidence budget 和动态长度。
5. vLLM `v1/spec_decode/` 与 worker speculator/rejection sampler:对照 proposer 与通用 verifier 的边界。
6. SGLang Spec V2/overlap 文档与发布记录:区分“源码存在”“默认启用”“某模型可用”。
源码快照:vLLM `8e958902eee5`;SGLang `9deb6952afa4`。
## 核心概念与运行机制
### 1. 它是什么,解决什么问题
尽管传统独立小模型投机采样(Standalone Speculative Decoding)在理论上证明了无偏加速的可行性,但在工业界落地中遭遇了三个难以逾越的系统瓶颈:
1. **草稿质量上限(Draft Quality Ceiling)**:独立小模型参数量仅为主模型的 $1/10$ 甚至更小,表征能力存在天然断层,在复杂推理任务中的 Token 接受率往往难以突破 60%;
2. **草稿串行生成瓶颈(Sequential Drafting Bottleneck)**:小模型本身依然是自回归生成,生成 $\gamma$ 个草稿 Token 依然需要串行触发 $\gamma$ 次 GPU Kernel 发射与显存加载,草稿阶段的时延开销侵蚀了验证阶段的加速红利;
3. **线性链式验证的概率衰减(Exponential Decay of Linear Chains)**:若第 $i$ 个 Token 被拒绝,后续所有草稿全盘报废。单条线性链的期望接受长度受制于 $\prod \alpha_i$ 的指数级衰减。
**现代投机系统(Modern Speculative Systems)**(以 EAGLE-3、DeepSeek MTP、DFlash 与 DSpark 为代表)重塑了投机推测的算法与系统协同设计:
- **特征级外推与树状拓扑(Feature-level Extrapolation & Tree Drafting)**:如图 8-1 所示,
```{=html}
<div class="fd fd-flow" role="img"><div class="fd-stack"><div class="fd-comp fd-td"><div class="fd-rank fd-few"><div class="fd-sg" data-nid="EAGLE" data-depth="0"><div class="fd-sg-title">EAGLE-3 隐层外推投机</div><div class="fd-stack"><div class="fd-comp fd-td"><div class="fd-rank"><div class="fd-node fd-box" data-nid="Hidden">Target 低/中/高层融合特征 (Fused Features)</div></div><div class="fd-gap" style="--gl:44px;--gt:38px"></div><div class="fd-rank"><div class="fd-node fd-box" data-nid="Head">轻量 Drafter 自回归直接预测 Token</div></div></div></div></div><div class="fd-sg" data-nid="MTP" data-depth="0"><div class="fd-sg-title">DeepSeek MTP (Multi-Token Prediction)</div><div class="fd-stack"><div class="fd-comp fd-td"><div class="fd-rank"><div class="fd-node fd-box" data-nid="Trunk">主模型主干 (预测 Token N+1)</div></div><div class="fd-gap" style="--gl:44px;--gt:38px"></div><div class="fd-rank fd-few"><div class="fd-node fd-box" data-nid="Head1">MTP 模块 1:主干隐状态 + Emb(N+1) → 预测 N+2</div><div class="fd-node fd-box" data-nid="Head2">MTP 模块 2:依赖模块 1 隐状态 → 预测 N+3</div></div></div></div></div></div><div class="fd-gap" style="--gl:44px;--gt:38px"></div><div class="fd-rank"><div class="fd-node fd-box" data-nid="TreeAttn">树状拓扑注意力掩码验证 (Tree Attention Verification)</div></div></div></div><i class="fd-e" data-s="Hidden" data-t="Head" data-k="solid" data-h="1" data-b="0"></i><i class="fd-e" data-s="Trunk" data-t="Head1" data-k="solid" data-h="1" data-b="0"></i><i class="fd-e" data-s="Trunk" data-t="Head2" data-k="solid" data-h="1" data-b="0"></i><i class="fd-e" data-s="EAGLE" data-t="TreeAttn" data-k="solid" data-h="1" data-b="0"></i><i class="fd-e" data-s="MTP" data-t="TreeAttn" data-k="solid" data-h="1" data-b="0"></i></div>
```
<p class="caption" align="center"><em>图 8-1:现代投机加速体系 (EAGLE 多层融合特征 vs MTP 顺序预测模块) 结构</em></p>
EAGLE-1/2 复用 Target 模型顶层隐层特征并在特征空间做回归外推;EAGLE-3 改为融合 Target 低、中、高层的隐层特征,并借助训练时测试(training-time test)直接预测 Token,不再做特征回归;同时将单一线性链扩展为分支候选树(Tree Drafting),极大提升了单轮验证的期望接受 Token 数;
- **原生多 Token 预测(Multi-Token Prediction, MTP)**:以 DeepSeek-V3/R1 为代表,在主模型训练阶段集成 MTP 模块。各深度的模块是顺序的:每个深度是一个 Transformer block,输入上一深度的隐状态与下一个 Token 的 Embedding(DeepSeek-V3 使用深度 D=1)。推理时 vLLM/SGLang 把 MTP 模块当作 draft 模型使用,每个草稿 Token 仍需一次额外的 MTP 前向,但无需外挂独立模型;
- **非自回归并行草稿生成(Block Diffusion / DFlash)**:打破草稿阶段的串行自回归循环,利用扩散或非自回归架构单步直接迸发出一整块(Block)候选 Token;
- **自适应置信度调度(Confidence-Adaptive Budget / DSpark)**:按请求难度与当前 Token 置信度动态调整投机深度,在收益不足时敏捷回退,兼顾吞吐与延迟。
### 2. 它如何工作
现代投机系统的工程实现涵盖了前向特征截取、树状注意力掩码组装、原子显存回滚与流水线重叠(流程如图 8-2 所示):
```{=html}
<div class="fd fd-flow" role="img"><div class="fd-stack"><div class="fd-comp fd-td"><div class="fd-rank"><div class="fd-node fd-box" data-nid="DraftTree">构建投机 Token 候选树 (Tree Mask)</div></div><div class="fd-gap" style="--gl:44px;--gt:38px"></div><div class="fd-rank"><div class="fd-node fd-box" data-nid="TargetForward">Target 模型执行一次 Tree Attention 并行验证</div></div><div class="fd-gap" style="--gl:44px;--gt:38px"></div><div class="fd-rank"><div class="fd-node fd-box" data-nid="SelectPath">沿最佳拓扑路径选择最长接受前缀</div></div><div class="fd-gap" style="--gl:44px;--gt:38px"></div><div class="fd-rank"><div class="fd-node fd-box" data-nid="Rollback">回滚未采纳分支的 KV Cache 指针</div></div><div class="fd-gap" style="--gl:44px;--gt:38px"></div><div class="fd-rank"><div class="fd-node fd-box" data-nid="Commit">提交被验证分支 Token,进入下一循环</div></div></div></div><i class="fd-e" data-s="DraftTree" data-t="TargetForward" data-k="solid" data-h="1" data-b="0"></i><i class="fd-e" data-s="TargetForward" data-t="SelectPath" data-k="solid" data-h="1" data-b="0"></i><i class="fd-e" data-s="SelectPath" data-t="Rollback" data-k="solid" data-h="1" data-b="0"></i><i class="fd-e" data-s="Rollback" data-t="Commit" data-k="solid" data-h="1" data-b="0"></i></div>
```
<p class="caption" align="center"><em>图 8-2:基于树形拓扑的投机验证、KV 状态回滚与批量采纳流水线</em></p>
1. **EAGLE-3 与特征外推机制**:
- 传统小模型在离散 Token 空间自回归;EAGLE-1/2 截取 Target 模型顶层的连续隐藏状态(Hidden States),并以特征回归为训练目标;EAGLE-3 则截取低、中、高三层的隐藏状态并融合。
- 将融合后的特征序列输入仅包含 1 层左右 Transformer 的轻量 Drafter,训练时通过 training-time test 把 Drafter 自身的输出回灌为输入,直接以 Token 预测为目标,不再回归特征。由于融合了主模型强大的语义特征,接受率可提升至 80%~90%。
2. **树状注意力并行验证(Tree Attention Verification)**:
- 将 Top-$K$ 展开的多条分支候选组织为一棵拓扑树。
- 构造定制的 2D 树状注意力掩码(Tree Attention Mask):节点只能对其在树中的祖先节点(Ancestors)计算注意力,严格屏蔽同级兄弟分支(Siblings)与堂兄弟分支的注意力交互;
- 目标模型仅执行一次 Forward 前向计算,即可同时并行检验整棵树上数十个候选路径的条件概率;
3. **KV Cache 原子回滚与状态提交(Rollback & Commit)**:
- 如图 8-2 所示,在树状验证完成并确定最长被接受的拓扑分支后,调度器将该路径上的 Token 序列正式固化;
- 对于未被采纳的所有侧枝节点,系统调用 `rollback_tree_kv`,通过操作页表(Page Table)和槽位计数器,将临时分配给未选分支的 KV Cache 槽位原子归还给内存池,重置序列逻辑长度,杜绝显存泄漏。
4. **DFlash 与 DSpark 的系统创新**:
- **DFlash**:采用非自回归 Block Drafter,单次前向直接给出 $\gamma$ 个位置各自的边缘分布(各位置独立预测,并非联合概率),将草稿阶段的 Kernel 发射次数由 $\gamma$ 次骤降为 1 次;
- **DSpark**:实时监控上一轮的置信度得分与实际接受长度。若遇到高熵词(如复杂逻辑分支点),动态将本轮投机步数降为 1 甚至退化为原生单步 Decode;遇到模板化重复代码时,动态将深度拉满至 5~8,实现精准算力投资。
### 3. 正确性条件与常见误区
- **树状掩码因果隔离性(Tree Mask Causal Invariant)**:
- 在构建 Tree Attention 的 2D 掩码时,必须严格遵循有向无环图的偏序因果性:节点 $j$ 能关注节点 $i$ 当且仅当 $i$ 是 $j$ 的前驱祖先。若掩码发生逻辑反转或允许横向交叉关注,会导致分支间的信息越界泄露,破坏因果注意力的数学有效性。
- **KV Cache 回滚的内存完整性(Memory Rollback Contract)**:
- *致命陷阱*:树状验证在 GPU 显存中为各个分支分配了临时物理 Block。若回滚逻辑仅修改了 CPU 侧的请求长度,而未在底层的 `BlockAllocator` 中同步释放侧枝占用的物理页索引,在高并发下显存池将在几分钟内被幽灵页面耗尽,引发 OOM 崩溃。
- **CUDA Graph 捕获与 Ragged Tree 的冲突**:
- 动态树状验证导致每次验证的 Token 总数剧烈波动(例如从 3 到 16 不等)。若未预先对树形尺寸进行分桶(Bucketing)并为各个 Bucket 分别捕获 CUDA Graph,运行时的树验证将频繁退化为耗时漫长的 PyTorch Eager 模式,算子发射开销将直接抵消所有算法加速。
### 4. 性能与工程取舍
- **草稿质量 vs. 草稿阶段算力开销(Drafter Capacity Trade-off)**:
- Drafter 越强大(参数量越大),Token 接受率 $\alpha$ 越高;但 Drafter 前向耗时 $T_{\text{draft}}$ 也呈线性攀升。
- 工程选型的黄金法则:只有当 $\frac{\Delta \text{Accepted Tokens}}{\Delta T_{\text{draft}}}$ 的边际收益大于 Target 模型原生每 Token 的生成速度时,增加 Drafter 体积才具有正向意义。
- **树结构宽深比的物理权衡(Width vs. Depth in Tree Search)**:
- 较宽的树(如 Top-3 扩展 3 层,共 27 个叶子):多路径容错率极高,几乎总能找到接受路径;但验证阶段 Target 模型需一次性计算 40 个 Token 的 Attention,KV 显存带宽消耗与矩阵乘计算量暴增。
- 较深的单链(如单路径深度 5):验证轻量,但在复杂文本下极易在第 1 步夭折,导致后续 4 个步骤的计算全盘浪费。
## 具体演示
设有投机方案针对某复杂推理任务,逐位置条件接受率为 $\alpha = [0.8, 0.7, 0.5]$:
1. **推导各位置存活概率(Survival Probability)**:
- 第 1 个草稿 Token 接受概率:$S_1 = \alpha_1 = 0.8$;
- 第 2 个草稿 Token 接受概率(需第 1 步也存活):$S_2 = S_1 \times \alpha_2 = 0.8 \times 0.7 = 0.56$;
- 第 3 个草稿 Token 接受概率(需前 2 步全存活):$S_3 = S_2 \times \alpha_3 = 0.56 \times 0.5 = 0.28$;
2. **计算期望接受草稿数与单轮总产出**:
- 期望接受草稿数:$E[\text{accepted}] = S_1 + S_2 + S_3 = 0.8 + 0.56 + 0.28 = 1.64$;
- 包含拒绝纠正词或全对奖励词(Bonus Token)后,单轮期望产出:
$$E[\text{total tokens}] = 1.0 + E[\text{accepted}] = 1.0 + 1.64 = 2.64 \text{ tokens}$$
3. **成本效益分析**:
- 设 Target 单步 Decode 耗时为 $10.0\ \text{ms}$,基线生成 2.64 个 Token 需 $26.4\ \text{ms}$;
- 若当前方案单轮耗时:草稿 $T_{\text{draft}} = 1.5\ \text{ms}$,验证 $T_{\text{verify}} = 8.5\ \text{ms}$,框架开销 $T_{\text{overhead}} = 1.0\ \text{ms}$,单轮总耗时 $11.0\ \text{ms}$;
- 端到端实际加速比为:
$$\text{Speedup} = \frac{26.4\ \text{ms}}{11.0\ \text{ms}} \approx 2.40 \times$$
- 只要额外显存开销处于安全预算内,该方案即构成显著的生产正收益。
## 实践任务:唯一代码填空题
补齐投机方案成本模型:由逐位置条件接受率计算每轮期望产出,并在显存预算内选择相对 baseline 真正加速的方案。输入时间必须来自同一 workload 的测量。
只能修改 `TODO`/`______` 位置,不得删除断言或放宽通过条件。
```{python}
#| course_role: exercise
def expected_tokens_per_round(conditional_acceptance):
survival = 1.0
expected_accepted = 0.0
for probability in conditional_acceptance:
if not 0.0 <= probability <= 1.0:
raise ValueError("acceptance probability out of range")
# TODO:第 i 个 token 被接受要求前面全部存活。
survival = ______
expected_accepted += ______
return 1.0 + expected_accepted # replacement/bonus token
def choose_spec_method(methods, baseline_ms_per_token, memory_budget_gb):
best = ("baseline", 1.0)
for method in methods:
if method["extra_memory_gb"] > memory_budget_gb:
continue
produced = expected_tokens_per_round(method["conditional_acceptance"])
round_ms = method["draft_ms"] + method["verify_ms"] + method["overhead_ms"]
speedup = produced * baseline_ms_per_token / round_ms
if speedup > best[1]:
best = (method["name"], speedup)
return best
methods = [
{"name": "tree", "conditional_acceptance": [0.8, 0.7, 0.5],
"draft_ms": 3.0, "verify_ms": 8.0, "overhead_ms": 1.0, "extra_memory_gb": 4},
{"name": "block", "conditional_acceptance": [0.75, 0.75, 0.7],
"draft_ms": 1.5, "verify_ms": 8.5, "overhead_ms": 1.0, "extra_memory_gb": 6},
]
name, speedup = choose_spec_method(methods, baseline_ms_per_token=10.0, memory_budget_gb=8)
assert name == "block" and speedup > 1.0
assert abs(expected_tokens_per_round([0.8, 0.7, 0.5]) - 2.64) < 1e-12
assert choose_spec_method(methods, 2.0, 5)[0] == "baseline"
```
### 检查方法
运行断言;把 batch 增大后测得的 verify_ms 代入,观察选择是否改变。该模型是筛选器,最终必须报告实测 goodput。
### Q1
EAGLE-3、MTP 与 DFlash 的 proposal 临界路径有何根本区别?
**你的答案:**
### Q2
为什么固定把 speculative depth 调到最大通常不是先进实践?
**你的答案:**
### Q3
你会怎样设计一次不会夸大 DFlash/EAGLE-3 收益的 benchmark?
**你的答案:**
## 评分规则
- 代码 4 分:主路径 2 分、边界条件 1 分、能映射回源码对象 1 分;
- Q1~Q3 各 2 分:必须包含对象、状态变化、正确性或成本链;
- 一票否决:把论文峰值写成普遍生产结论;把源码支持写成所有模型/硬件可用;混淆算法正确性与性能;只背类名而说不清状态所有权。
::: {.callout-tip collapse="true" title="💡 点击展开参考答案与详细代码实现" icon="false"}
## 参考答案(仅 answer 分支)
先独立完成。核对后请更换一个 batch、cache 或硬件条件重新推演,不能只复制。
```{python}
#| course_role: solution
def expected_tokens_per_round(conditional_acceptance):
survival = 1.0
expected_accepted = 0.0
for probability in conditional_acceptance:
if not 0.0 <= probability <= 1.0:
raise ValueError("acceptance probability out of range")
survival *= probability
expected_accepted += survival
return 1.0 + expected_accepted
def choose_spec_method(methods, baseline_ms_per_token, memory_budget_gb):
best = ("baseline", 1.0)
for method in methods:
if method["extra_memory_gb"] > memory_budget_gb:
continue
produced = expected_tokens_per_round(method["conditional_acceptance"])
round_ms = method["draft_ms"] + method["verify_ms"] + method["overhead_ms"]
speedup = produced * baseline_ms_per_token / round_ms
if speedup > best[1]:
best = (method["name"], speedup)
return best
methods = [
{"name": "tree", "conditional_acceptance": [0.8, 0.7, 0.5],
"draft_ms": 3.0, "verify_ms": 8.0, "overhead_ms": 1.0, "extra_memory_gb": 4},
{"name": "block", "conditional_acceptance": [0.75, 0.75, 0.7],
"draft_ms": 1.5, "verify_ms": 8.5, "overhead_ms": 1.0, "extra_memory_gb": 6},
]
name, speedup = choose_spec_method(methods, baseline_ms_per_token=10.0, memory_budget_gb=8)
assert name == "block" and speedup > 1.0
assert abs(expected_tokens_per_round([0.8, 0.7, 0.5]) - 2.64) < 1e-12
assert choose_spec_method(methods, 2.0, 5)[0] == "baseline"
```
### Q1 参考答案
EAGLE-3、MTP 与 DFlash 代表了现代投机系统三种截然不同的草稿提议哲学与系统临界路径:
1. **EAGLE-3(特征级外推 + 树状拓扑草稿)**:
- **信息源与架构**:突破了传统在离散 Token 空间自回归的小模型瓶颈,截取 Target 模型低、中、高层的连续隐藏状态并融合作为输入,接入约 1 层 Transformer 的轻量 Drafter,直接预测 Token(EAGLE-1/2 只用顶层特征);
- **临界路径**:执行“截取 Target 隐层 $\to$ 多步轻量特征自回归推进 $\to$ 组装 Tree Attention 掩码 $\to$ Target 模型单次树状并行验证”。虽然草稿阶段仍存在微小的串行步进,但凭借高阶语义表征将 Token 接受率拉升至 80%~90%,且支持外挂式迁移到各类开源基础模型。
2. **DeepSeek MTP(Multi-Token Prediction,原生多模块直出)**:
- **信息源与架构**:MTP 模块在主模型预训练阶段即作为主干网络的延伸,与 Target 模型同源训练。各深度模块顺序串联:每个深度是一个 Transformer block,输入上一深度的隐状态与下一个 Token 的 Embedding(DeepSeek-V3 使用 D=1);
- **临界路径**:推理时 vLLM/SGLang 把 MTP 模块当作 draft 模型:主模型前向得到隐状态后,MTP 模块逐步前向生成草稿 Token,每多一个草稿就多一次 MTP 前向(若 D=1 而草稿步数大于 1,则重复调用同一模块)。这些前向比独立小模型轻,也不需要额外模型调度,但仍有额外 Kernel 发射与显存占用;其权重与目标模型绑定,无法外挂到其他模型。
3. **DFlash(Block Diffusion / 非自回归并行迸发)**:
- **信息源与架构**:针对自回归 Drafter 依然受制于串行 GPU 访存受限循环的痛点,DFlash 采用非自回归(NAR)或单步扩散架构;
- **临界路径**:利用已有的上下文特征,仅需单次前向(One-Step Parallel Forward)给出 $\gamma$ 个位置各自的边缘分布,组成候选 Block。将草稿阶段的 Kernel 发射次数由 $\gamma$ 次骤降为 1 次,消除了草稿串行时延,但对非自回归模型的跨位置解耦与对齐精度提出了严苛要求。
### Q2 参考答案
固定将投机深度(Speculative Depth $\gamma$)调至最大(如设为 8 或 12)是脱离硬件与负载特性的典型工程误区:
1. **条件概率的乘法衰减效应(Exponential Survival Decay)**:
- 投机序列存活率受各位置条件接受率连乘制约:$S_k = \prod_{i=1}^k \alpha_i$。在复杂数学推导、开放性问答或高温度采样场景下,第 2~3 个 Token 的接受率往往已跌破 30%。盲目配置大深度,会导致后半段草稿有超过 80%~90% 的概率被直接作废截断,草稿生成所耗费的计算与显存完全沦为无谓损耗;
2. **验证阶段算力与访存带宽暴增(Verification Compute Inflation)**:
- 目标模型在验证阶段需要执行长为 $\gamma+1$(或树状拓扑中数十个候选)的并行 Attention 与 FFN 计算。过大的 $\gamma$ 会导致验证 Kernel 耗时急剧上升。若接受率偏低,单轮总耗时($T_{\text{draft}} + T_{\text{verify}} + T_{\text{overhead}}$)甚至会显著超过 Target 原生自回归单步耗时的数倍,加速比跌破 1.0(严重负收益);
3. **CUDA Graph 捕获与显存碎片化冲突(Graph Bucketing & Memory Overhead)**:
- 深度越大,单轮实际接受长度($1 \sim \gamma+1$)的动态跳变范围越宽。若无法精准命中预捕获的 CUDA Graph Bucket,将频繁触发昂贵的 Eager 模式回退;同时,为庞大候选树预留的临时 KV Cache 会严重挤占并发显存池,降低高并发下的服务容量;
4. **自适应调度(Confidence-Adaptive Scheduling / DSpark)的必然性**:
- 最优工程方案是实时监控生成熵与置信度(Confidence):在低熵模式文本(如代码固定模板、重复词)下动态拉满深度;在高熵决策分叉点敏捷将深度降为 1 甚至回退原生单步 Decode,以确保严苛的 SLO 吞吐底线。
### Q3 参考答案
1. **同等条件基线**:投机系统与基线使用同一引擎 commit、驱动、量化与 CUDA Graph 配置,基线为 Target-only 解码,并锁定 GPU 频率。
2. **开环负载**:按泊松过程到达请求,而不是单并发闭环压测。
3. **混合数据**:混合代码、数学推理、长文本 RAG 与高温度采样;只跑代码补全会高估接受率。
4. **完整指标**:报告输出吞吐、TTFT 与 ITL 的 P50/P99、SLO 约束下的 goodput、draft 与 verify 的耗时占比,以及额外显存占用。
5. **负收益边界**:画出加速比随并发变化的曲线,标出加速比跌破 1 的并发点。
## 参考资料
- [SGLang speculative algorithm registry](https://github.com/sgl-project/sglang/blob/9deb6952afa483e38f96385a375b96f463da5303/python/sglang/srt/speculative/spec_info.py#L30-L316)
- [SGLang EAGLE V2 worker](https://github.com/sgl-project/sglang/blob/9deb6952afa483e38f96385a375b96f463da5303/python/sglang/srt/speculative/eagle_worker_v2.py#L489-L1508)
- [SGLang DFlash V2 worker](https://github.com/sgl-project/sglang/blob/9deb6952afa483e38f96385a375b96f463da5303/python/sglang/srt/speculative/dflash_worker_v2.py#L168-L1600)
- [SGLang DSpark worker](https://github.com/sgl-project/sglang/blob/9deb6952afa483e38f96385a375b96f463da5303/python/sglang/srt/speculative/dspark_components/dspark_worker_v2.py)
- [vLLM speculative decode implementations](https://github.com/vllm-project/vllm/tree/8e958902eee56ca5158728f1dd5a32246f0246f3/vllm/v1/spec_decode)
- [SGLang speculative decoding guide](https://docs.sglang.io/docs/advanced_features/speculative_decoding)
- [EAGLE-3 paper](https://arxiv.org/abs/2503.01840)
- [DFlash paper](https://arxiv.org/abs/2602.06036)
- [Production-grade speculative decoding study](https://arxiv.org/abs/2601.11580)
源码链接固定到本课审阅 commit;current docs、支持矩阵和默认参数会变化,面试或部署前必须按目标版本重新核对。
:::
::: {.course-pagination}
[**← 上一课**<br>第 7 课:投机采样正确性](lesson07.qmd){.pagination-link .pagination-prev}
[**下一课 →**<br>第 12 课:PD 物理分离架构](lesson12_disaggregated_prefill.qmd){.pagination-link .pagination-next}
:::