JetSpec:用并行树草稿突破推测解码的扩展上限

笔记日期: 2026-06-27 笔记作者: Zhongzhu Zhou 论文标题: JetSpec: Breaking the Scaling Ceiling of Speculative Decoding with Parallel Tree Drafting 作者: Lanxiang Hu, Zhaoxiang Feng, Yulun Wu, Haoran Yuan, Yujie Zhao, Yu-Yang Qian, Bojun Wang, Peng Zhao, Daxin Jiang, Yibo Zhu, Tajana Rosing, Hao Zhang arXiv: 2606.18394 状态: 预印本(2026 年 6 月,v3 — 加州大学圣地亚哥分校、浙江大学、UIUC、南京大学、StepFun)

一句话总结

JetSpec 训练了一个因果并行草稿头,通过树因果注意力掩码在单次前向传播中生成所有候选树节点,同时保留分支内的自回归因果依赖,在 H100 GPU 上对 Qwen3-8B 的 MATH-500 推断任务实现了 9.64 倍端到端加速比,彻底打破了推测解码随草稿预算增大而”边际递减”的扩展上限。

前置知识

读这篇论文需要理解几个基础概念。我从头解释,不跳过任何步骤。

自回归语言模型生成

大语言模型(LLM)一个词元(token)一个词元地生成文本。给定上下文 x=(x1,x2,,xn)x = (x_1, x_2, \ldots, x_n),模型预测下一个词元的概率分布并采样:

xn+1p(x1,x2,,xn)x_{n+1} \sim p(\cdot \mid x_1, x_2, \ldots, x_n)

然后把新词元追加到上下文,继续生成 xn+2x_{n+2},如此循环。这种因果链是不可打破的:必须先知道 xn+1x_{n+1} 才能生成 xn+2x_{n+2}

这在现代 GPU 上是一个严重问题。GPU 天生适合大规模并行计算——它拥有成千上万个核心,但每次自回归解码步骤只产出”一个词元”的数据量。GPU 需要从高带宽内存(HBM)加载全部模型权重(几百 GB),却只为了生成一个词元。整个过程是内存带宽受限的,而非算术计算受限的——大量算力被浪费了。

KV 缓存

为了避免每步都重新计算注意力的 Key 和 Value,LLM 推理维护一个 KV 缓存:每一层的历史词元对应的 Key、Value 被存储起来,下一步直接复用。随着序列变长,KV 缓存占用的 GPU 内存线性增长,成为长上下文推理的主要瓶颈。

推测解码的核心思想

推测解码(Speculative Decoding, SD)把串行生成转化为并行验证,分两个阶段:

草稿阶段(Draft): 一个轻量级”草稿模型”MqM_q 快速、廉价地提出 NN 个候选词元 (y1,y2,,yN)(y_1, y_2, \ldots, y_N)

验证阶段(Verify): 大型目标模型 MpM_p一次并行前向传播中同时验证全部 NN 个候选词元——因为注意力机制天然支持批量处理,这次验证花费的时间与处理单个词元差不多。

关键保证:输出分布与 MpM_p 自回归生成完全一致,没有任何质量损失。加速来源于把一次昂贵的目标模型调用摊销到多个已提出的词元上。

接受/拒绝采样机制

对草稿序列中每个候选词元 yty_t,标准的非贪心推测解码接受概率为:

αt=min ⁣(1,  p(ytx,y<t)q(ytx,y<t))(1)\alpha_t = \min\!\left(1,\; \frac{p(y_t \mid x, y_{<t})}{q(y_t \mid x, y_{<t})}\right) \tag{1}

其中 pp 是目标模型分布,qq 是草稿模型分布。这是经典的拒绝采样规则:若草稿对 yty_t 的置信度不低于目标模型,则以概率 1 接受;否则按 p/qp/q 比例接受,并在拒绝时从修正分布重新采样——该修正保证输出分布的无偏性。

平均接受率 α\alpha 越高(草稿与目标越吻合),每次验证步骤平均接受的词元越多,加速比越大。

基于树的推测解码

线性草稿只提出一条分支:y1y2yNy_1 \to y_2 \to \cdots \to y_N。若 y1y_1 被拒绝,后续全部词元作废——最坏情况下 NN 个草稿词元产出 0 个有效词元。

树形草稿改为提出一棵候选树 T(x)\mathcal{T}(x),树中每条从根到节点的路径都是一个候选延续。目标模型用树注意力掩码(每个节点只关注其祖先)在一次前向传播中验证所有路径。只要树中任意一条路径与目标模型的延续匹配,就能接受一段较长的前缀。

树形草稿比线性草稿在相同词元预算下实现更高的平均接受长度 τ\tau(每步提交的词元数),代价是更复杂的树构建和验证逻辑。

推测解码加速比公式

α\alpha 为平均每词元接受率,NN 为草稿词元数,cc 为草稿单个词元的开销(以目标模型一次验证通道为单位 1)。在 i.i.d. 接受假设下,每次推测解码迭代平均推进的词元数为:

E[#tokens]=1αN+11α(2)\mathbb{E}[\#\text{tokens}] = \frac{1 - \alpha^{N+1}}{1 - \alpha} \tag{2}

公式推导: 恰好接受 kk 个词元的概率为 αk(1α)\alpha^k(1-\alpha)k<Nk < N),接受全部 NN 个的概率为 αN\alpha^N。求期望:

E=k=0N1(k+1)αk(1α)+(N+1)αN=1αN+11α\mathbb{E} = \sum_{k=0}^{N-1}(k+1)\alpha^k(1-\alpha) + (N+1)\alpha^N = \frac{1-\alpha^{N+1}}{1-\alpha}

相对于纯自回归解码的加速比(分母 = 一次验证通道 + NN 次草稿通道,共 Nc+1Nc+1):

Speedup=1αN+1(1α)(Nc+1)(3)\text{Speedup} = \frac{1 - \alpha^{N+1}}{(1-\alpha)(Nc + 1)} \tag{3}

这个公式揭示的核心矛盾: 增大 NN 只有在 α\alpha 保持高位且 NcNc 保持较小时才有收益。当 NN 增大时,分子趋于 11α\frac{1}{1-\alpha}(饱和);但分母 Nc+1Nc + 1 线性增长。若 α\alphaNN 下降,或 ccNN 增大,加速比就会停滞甚至下降。这正是 JetSpec 要打破的”扩展上限”。

知识蒸馏:正向 KL vs 逆向 KL

知识蒸馏让小型”学生”模型学习大型”教师”模型的输出分布,有两种常用损失:

正向 KLDKL(pq)D_{\text{KL}}(p \| q),教师 → 学生):

DKL(pq)=yp(y)logp(y)q(y)(4)D_{\text{KL}}(p \| q) = \sum_y p(y) \log \frac{p(y)}{q(y)} \tag{4}

正向 KL 具有”零避免”性质:若 p(y)>0p(y) > 0q(y)q(y) 不能为 0(否则损失无穷大)。这迫使学生覆盖教师的所有模式(mode-covering)。

逆向 KLDKL(qp)D_{\text{KL}}(q \| p),学生 → 教师):

DKL(qp)=yq(y)logq(y)p(y)(5)D_{\text{KL}}(q \| p) = \sum_y q(y) \log \frac{q(y)}{p(y)} \tag{5}

逆向 KL 具有”趋向模式”性质(mode-seeking):学生可以把概率质量集中到教师最高概率的少数几个词元上,忽略低概率区域。对于树形推测解码来说,这是致命的——我们需要草稿覆盖多条可信分支,而不是坍缩到单一最高概率词元。

核心问题:为什么推测解码有扩展上限?

有了前置知识,现在可以精确描述现有方法的困境。

两种策略,各有取舍

策略 A:提高 α\alpha(对齐型方法) EAGLE 系列(EAGLE, EAGLE-2, EAGLE-3)训练自回归草稿头:每次生成一个草稿词元,每次都条件化于前一个词元的隐状态。这种”路径感知”草稿实现了高 α\alpha——每条树分支内部自洽。但建一棵深度 NN 的树需要 NN 次串行草稿通道,cc 随树深线性增长。当 NN 很大时,NcNc 抵消了高 α\alpha 带来的收益。

策略 B:降低 cc(并行扩散型方法) DFlash 使用块扩散(block-diffusion)草稿头:一次前向传播同时生成全部 NN 个草稿位置,c1/Nc \approx 1/N 极低。但这个头是分支无关的(branch-agnostic):它独立地预测每个位置的词元分布,不考虑同一分支内祖先词元选择了什么。

因果-效率两难困境的数学本质

分支无关的草稿头在构建树时使用的替代分布为:

qsur(y1:kx)i=1kri(yix)(6)q_{\text{sur}}(y_{1:k} \mid x) \propto \prod_{i=1}^{k} r_i(y_i \mid x) \tag{6}

其中 ri(x)r_i(\cdot|x) 是深度 ii 的位置边缘分布,与其他深度的选择无关。

问题在于:深度 1 词元和深度 2 词元可以各自具有高边缘概率(r1(y1x)r_1(y_1|x) 高且 r2(y2x)r_2(y_2|x) 高),但两者的联合概率极低——现实语言中 y1y_1 后面根本不会紧跟 y2y_2

目标模型验证的是真实因果分解:

p(y1:kx)=i=1kp(yix,y<i)(7)p(y_{1:k} \mid x) = \prod_{i=1}^{k} p(y_i \mid x, y_{<i}) \tag{7}

qsurq_{\text{sur}}pp 相差悬殊,验证时接受率 α\alpha 崩溃,大量草稿预算被浪费在目标模型会立即拒绝的分支上。

一个具体的失败案例

论文附录 A 提供了 MATH-500 第 0 题、解码步骤 0(根词元”We”)处的对比:

图 1:因果头 vs 扩散头——分支质量对比

扩散头(branch-agnostic,γ=0):
  排名 1 分支:"given told that"
    草稿联合 ΣlogR = -3.76  (每个位置单独看都很"合理"!)
    目标联合 ΣlogP = -63.32  (联合概率 ≈ e^{-63} ≈ 10^{-27}!)
    差距 Δ = +59.56 nats ← 严重不连贯
    验证器只接受 4 个词元
  
  排名 3 分支(实际连贯的):"are given that the"
    目标联合 ΣlogP = -0.08,但被排在了第 3 位

因果头(JetSpec,γ=0):
  排名 1 分支:"are told that"
    草稿联合 ΣlogR ≈ 目标联合 ΣlogP = -3.54
    差距 Δ = -0.34 nats ← 连贯
    验证器接受 6 个词元

扩散头在 26% 的 MATH-500 提示词中出现排名 1 分支差距 ≥ +80 nats 的极端失败
因果头出现此类极端失败的概率为 0%

这个例子清晰地展示了为什么扩散头的第一排名分支可以联合概率低到 102710^{-27},而因果头的结构性约束从根本上杜绝了这种失败模式。

JetSpec 的方法设计

核心思路

JetSpec 同时实现两个目标:

  • 单次前向传播生成所有树节点(像 DFlash 一样高效,c1/Nc \approx 1/N
  • 分支内因果条件依赖(像 EAGLE 一样高接受率,α\alpha 高)

关键机制:在草稿头内部施加树因果注意力掩码

图 2:JetSpec 系统架构总览

  ┌──────────────────────────────────────────────────────────┐
  │ 第 i 步:已验证词元 [def][sum][1][1][·][·]               │
  │                      ↓                                    │
  │  ┌─────────────────────────────────┐                     │
  │  │  冻结目标模型 M_p               │ 提取第 {1,9,17,25,33}│
  │  │  (Qwen3-8B, 36 层)             │ 层的隐状态            │
  │  └──────────────┬──────────────────┘                     │
  │                 │ h^o_x(5×d 拼接,d=4096)               │
  │                 ▼                                         │
  │  ┌──────────────────────────────┐                        │
  │  │  特征融合:无偏置线性 + RMSNorm│ 5d → d,降维          │
  │  └──────────────┬───────────────┘                        │
  │                 │ 融合上下文特征                            │
  │                 ▼                                         │
  │  ┌───────────────────────────────────────┐               │
  │  │  因果并行草稿头 M_q                    │               │
  │  │  (5 层 Qwen3 解码器,32 注意力头,    │◄── 树因果      │
  │  │   8 KV 头,head_dim=128,             │    注意力掩码   │
  │  │   MLP 中间维度 12288)                 │    保证分支内   │
  │  │  注入目标特征作为 KV 状态             │    因果依赖     │
  │  └──────────────┬────────────────────────┘               │
  │                 │ 一次前向传播输出所有树节点的 logits       │
  │                 ▼                                         │
  │    最优先队列扩展 → 候选树 T(x)                           │
  │                 ↓                                         │
  │  ┌──────────────────────────────┐                        │
  │  │  目标模型 M_p(树注意力验证)  │ 一次前向传播验证全部分支│
  │  └──────────────────────────────┘                        │
  │                 ↓                                         │
  │    接受最深的合法分支 → 提交词元,开始下一步               │
  └──────────────────────────────────────────────────────────┘

树因果注意力掩码

对候选树中任意两个节点 uuvv

Mv,u={0若 uAnc(v){v}否则(8)M_{v,u} = \begin{cases} 0 & \text{若 } u \in \text{Anc}(v) \cup \{v\} \\ -\infty & \text{否则} \end{cases} \tag{8}

其中 Anc(v)\text{Anc}(v)vv 的祖先集合。节点 vv 处的掩码注意力为:

Attn(Qv,K,V)=softmax ⁣(QvKd+Mv)V(9)\text{Attn}(Q_v, K, V) = \text{softmax}\!\left(\frac{Q_v K^\top}{\sqrt{d}} + M_v\right) V \tag{9}

-\infty 的掩码项经过 softmax 后衰减为 0,阻断非祖先节点的信息流动。

图 3:树因果注意力掩码的可视化

候选树结构:             注意力掩码矩阵(●=可关注,·=屏蔽):
    根节点
    ├── A(深度 1)              根  A    B    C    D    E
    │   ├── C(深度 2)   根  [  ●    ·    ·    ·    ·    · ]
    │   └── D(深度 2)      A  [  ●    ●    ·    ·    ·    · ]
    └── B(深度 1)            B  [  ●    ·    ●    ·    ·    · ]
        └── E(深度 2)        C  [  ●    ●    ·    ●    ·    · ]
                               D  [  ●    ●    ·    ·    ●    · ]
                               E  [  ●    ·    ●    ·    ·    ● ]

节点 C 只能关注:根节点、A、C 自身
节点 E 只能关注:根节点、B、E 自身
跨分支词元(C 无法看到 B,E 无法看到 A)→ 无信息泄漏

所有节点在草稿头的一次前向传播中并行处理。
掩码确保每条分支的计算等价于按自回归顺序逐词生成。

为什么这能实现并行中的因果条件依赖? 当草稿头处理节点 C 时,C 的 query 只能从 A 和根节点的 key/value 中汇聚信息。C 对下一词元的预测 q(yCx,yA)q(y_C | x, y_A) 条件化于具体的祖先词元 yAy_A——不受兄弟分支 B、E 影响。这与逐步自回归生成产生的因果依赖在结构上完全相同,但所有分支在一次 Transformer 前向传播中并行执行。

草稿分布与目标分布的对齐

树因果掩码诱导出草稿分布的分支级因果分解:

q(π(v)x)=uπ(v)q(yux,hxo,π<u)(10)q(\pi(v) \mid x) = \prod_{u \in \pi(v)} q(y_u \mid x, h_x^o, \pi_{<u}) \tag{10}

其中 π<u\pi_{<u}uu 所在分支上祖先节点的词元序列。对比目标模型的因果分解(式 7):

p(y1:kx)=i=1kp(yix,y<i)(7(重复))p(y_{1:k} \mid x) = \prod_{i=1}^{k} p(y_i \mid x, y_{<i}) \tag{7(重复)}

两者结构相同:都对每个词元条件化于该分支路径上的全部前驱词元。这种对齐使草稿分布 qq 与目标分布 pp “说同一种语言”,从而实现高接受率。

训练过程:让草稿头学会因果意识

数据准备

JetSpec 在 Nemotron Post-Training Dataset V2 的 78 万个样本上训练,包含数学、编程和对话数据。关键设计:以目标模型再生成的序列作为监督信号,而非原始语料库文本。

给定训练前缀 xx,目标模型 MpM_p 自回归运行生成延续 (y1,y2,)(y_1, y_2, \ldots)。在延续中的每个锚点位置 ii,采样 NN 个连续的未来位置作为训练块。草稿头在块因果掩码下并行预测这 NN 个位置,学习匹配目标模型在同一真实前缀下输出的 logits。

图 4:训练监督块结构(附录 D,图 6)

  上下文:[x₁ ... xₙ](来自原始语料或再生成延续)

  采样的训练块(每个锚点 + N=16 个未来位置):

  块 1:  [a₁ | b₁,₁  b₁,₂  b₁,₃  ...  b₁,₁₆]
           ↑    ↑      ↑      ↑            ↑
          无损失 损失  损失   损失          损失

  块 2:  [a₂ | b₂,₁  b₂,₂  ...            b₂,₁₆]
  块 3:  [a₃ | b₃,₁  b₃,₂  ...            b₃,₁₆]

  注意力规则:
  - 每个位置可关注完整前缀 + 同一块内的更早位置
  - 不同块之间完全隔离(独立处理)
  - 锚点 a_i 仅作上下文,不计入损失
  - 教师 logits 来自冻结的 M_p 在相同真实序列上的输出
  - 每个训练样本最多采样 512 个锚点

为什么一定要用再生成序列? 目标模型有自己的”文字习惯”——特定词元偏好、表达模式、续写倾向——这些与人类写的语料文本不同。用目标模型自己生成的序列训练草稿头,能让草稿头精准学到目标模型在推理时会生成什么。表 6 的实验结果显示:再生成版 JetSpec 与语料库版 JetSpec 在预算=256 时的加速比差距高达 2.4 倍(8.78× vs 3.66×)——差距触目惊心。

蒸馏损失函数

对每个激活的草稿位置 mm,设草稿头和目标模型的 logits 分别为 zq(m)z_q^{(m)}zp(m)z_p^{(m)}。温度归一化:

q~(m)=softmax(zq(m)/TKD)(11)\tilde{q}^{(m)} = \text{softmax}(z_q^{(m)} / T_{\text{KD}}) \tag{11} p~(m)=softmax(zp(m)/TKD)(12)\tilde{p}^{(m)} = \text{softmax}(z_p^{(m)} / T_{\text{KD}}) \tag{12}

每个位置的正向 KL 损失(教师 → 学生):

LFKL(m)=DKL ⁣(p~(m)q~(m))=yVp~(m)(y)logp~(m)(y)q~(m)(y)(13)\mathcal{L}_{\text{FKL}}^{(m)} = D_{\text{KL}}\!\left(\tilde{p}^{(m)} \,\Big\|\, \tilde{q}^{(m)}\right) = \sum_{y \in \mathcal{V}} \tilde{p}^{(m)}(y) \log \frac{\tilde{p}^{(m)}(y)}{\tilde{q}^{(m)}(y)} \tag{13}

加权汇总所有激活位置得到总训练目标:

Ltrain=TKD2mwmLFKL(m)mwm(14)\mathcal{L}_{\text{train}} = T_{\text{KD}}^2 \cdot \frac{\sum_m w_m \mathcal{L}_{\text{FKL}}^{(m)}}{\sum_m w_m} \tag{14}

TKD2T_{\text{KD}}^2 前缀因子是蒸馏文献中的标准技巧,确保梯度幅值不随温度变化。

为什么是正向 KL,而不是逆向 KL?

这是一个微妙但关键的设计选择。逆向 KL 是”趋向模式的”——学生把概率质量集中在教师的最高概率模式上,可以忽略低概率区域。对于线性草稿(只提一条续写),这没问题:你希望草稿自信地预测最可能的下一个词元。

但对于树形草稿,你需要草稿覆盖多条可信分支,而不是坍缩到单一最高概率词元。逆向 KL 训练出的草稿头几乎只会生成线性树(每个深度只有一条真实候选),大量预算被花在意义重复的克隆分支上。正向 KL 的”零避免”性质迫使草稿头给教师认为可信的所有词元赋予非零概率,天然生成多样而铺展的候选树。

实验结果(表 4):

训练目标GSM8K 加速比MATH-500 加速比AIME25 加速比
SFT(硬标签)5.968.427.51
正向 KL 蒸馏6.118.467.56
逆向 KL 蒸馏3.295.254.76

逆向 KL 导致 36–46% 的相对性能下降,印证了树形草稿必须用正向 KL 的论断。

算法 1:并行树草稿构建详解

完整算法

算法 1:并行树草稿构建

输入:前缀 x,最大草稿深度 N,分支宽度 W,
      节点预算 B,评分函数 Score(·)
输出:候选树 T(x)

 1: 初始化树 T,根节点为 v₀
 2: 初始化优先队列 Q ← {(v₀, Score(π(v₀)))}
 3: while |V_T| < B  且  Q ≠ ∅  do
 4:     从 Q 弹出得分最高的节点 v
 5:     if depth(v) = N then
 6:         continue          ▷ 叶节点:不再扩展
 7:     end if
 8:     获取节点 v 的前 W 个候选子词元 C(v)
         (来自草稿头在 v 位置输出的 logits)
 9:     for y ∈ C(v) do
10:         if |V_T| = B then
11:             break         ▷ 预算已用尽
12:         end if
13:         在树 T 中添加子节点 u,词元 y_u = y,父节点为 v
14:         计算 s_u ← Score(π(u))
15:         将 (u, s_u) 压入队列 Q
16:     end for
17: end while
18: return T(x) = {π(v) | v ∈ V_T}

逐步解析:

第 1–2 行(初始化): 树从只有根节点(已验证前缀 xx)开始。注意:在算法运行之前,草稿头已经完成了对整个树结构的一次前向传播,预计算了深度 1 到深度 NN 所有潜在节点的 logits。算法本身是一个纯粹的树搜索过程:从预计算的 logits 中选择哪些节点纳入候选树。

第 3 行(循环条件): 只要节点总数未达预算 BB 且还有可扩展节点,循环继续。

第 4–7 行(弹出并检查深度): 最优先策略:总是扩展当前得分最高的节点。若该节点已到最大深度 NN,跳过(叶节点不可再扩展)。

第 8–16 行(扩展节点): 从预计算的草稿 logits 中取前 WW 个最可能的子词元。对每个候选子词元:添加到树、计算路径得分、压入优先队列待后续扩展。

第 18 行(返回): 返回所有根到节点路径的集合——每条路径都是目标模型将要验证的候选续写。

分支评分函数

默认评分函数是沿分支的累积草稿对数概率:

s(π(v))=uπ(v)logq(yux,hxo,π<u)(15)s(\pi(v)) = \sum_{u \in \pi(v)} \log q(y_u \mid x, h_x^o, \pi_{<u}) \tag{15}

即整条分支在因果草稿分布下的联合对数概率。使用这个分数的最优优先搜索会优先选择全程高概率(从根到叶都连贯)的延续。

消融实验对比(附录 C,表 10):

评分策略MATH-500 加速比平均接受长度 τ
累积对数概率(默认)8.159.81
纯熵引导4.765.52
混合(对数概率 + α·熵,α=1)8.159.78
混合(α=4)7.759.27

纯熵引导下降 42%——因为”这个深度的边缘熵高(多个可能词元)“无法告诉我们哪个词元应该跟在当前分支的具体祖先词元之后。联合对数概率才是正确的信号。

树验证过程

草稿头构建候选树 T(x)\mathcal{T}(x) 后,目标模型用与式 8 结构相同的树注意力掩码,在一次前向传播中验证所有分支。对每条分支 π(v)=y1:k\pi(v) = y_{1:k},逐词执行:

AtBernoulli(αt),αt=min ⁣(1,p(ytx,y<t)q(ytx,y<t))(16)A_t \sim \text{Bernoulli}(\alpha_t), \quad \alpha_t = \min\!\left(1, \frac{p(y_t \mid x, y_{<t})}{q(y_t \mid x, y_{<t})}\right) \tag{16}

该分支接受的前缀长度:

a=max{rk:At=1,  tr}(17)a = \max\{r \leq k : A_t = 1,\; \forall t \leq r\} \tag{17}
图 5:树验证过程示例

  候选树 T(x):              目标模型验证(✓=接受,✗=拒绝):


  ├── "are"→"told"→"that"   根→"are"(✓)→"told"(✓)→"that"(✓)  a=3 ✓
  ├── "are"→"given"→"the"   根→"are"(✓)→"given"(✗)             a=1 ✗
  ├── "sum"→"return"→"b"    根→"sum"(✗)                         a=0 ✗
  └── "sum"→"return"→"a"    根→"sum"(✗)                         a=0 ✗

  最佳分支:"are told that",接受长度 a=3
  修正词元:目标模型从 p(·|x,"are told that") 采样 → ":"
  下一步从 x + "are told that :" 开始
  本步提交词元:3(草稿)+ 1(修正)= 4 个词元,耗费 ≈1 次目标模型通道

在贪心模式(T=0T=0)下,验证完全确定性:当 yt=argmaxp(x,y<t)y_t = \arg\max p(\cdot|x,y_{<t}) 时才接受。

实验结果

实验设置

目标模型:

  • Qwen3-8B(稠密 Transformer,36 层)
  • Qwen3-30B-A3B(MoE,3B 活跃参数) 均使用非思考模式(non-thinking mode)

基线方法:

  • EAGLE-3:多层特征融合自回归头,树模式最大深度 8
  • DFlash:块扩散并行草稿头,一次前向传播生成所有位置
  • DDTree:DFlash 的扩散头 + JetSpec 的树扩展算法(最强扩散头基线)

评测集: 数学(GSM8K、MATH-500、AIME25)、编程(HumanEval、MBPP、LiveCodeBench)、对话(MT-Bench);贪心(T=0)和非贪心(T=1)均报告

硬件: 离线评估在 8×H100 或 4×B200;服务评估在单张 H100(vLLM)

低预算区间结果

预算 16 和 32 时,JetSpec 与 DFlash 表现相当,大幅优于 EAGLE-3:

方法预算GSM8K 加速比MATH-500 加速比MT-Bench 加速比
EAGLE-3162.242.101.91
DFlash164.806.122.72
JetSpec164.806.062.68
EAGLE-3322.392.222.04
DFlash324.215.152.48
JetSpec324.895.752.40

低预算下,因果与非因果草稿头的质量差距不明显——草稿序列短,分支不连贯的机会较少。

高预算区间结果

高预算(64–256)是 JetSpec 优势最突出的区间:EAGLE-3 停滞甚至下滑,DDTree 的扩散头因果性丢失,JetSpec 持续增长:

图 6:高预算区间加速比对比(Qwen3-8B,T=0,MATH-500)

预算       64      128      256
─────────────────────────────────────
EAGLE-3:  2.36x   ≈2.5x    ≈2.5x  (训练不匹配,基本停滞)
DFlash:   6.40x   8.27x    8.78x
DDTree:   6.40x   8.27x    8.78x  (同 DFlash head,不同扩展算法)
JetSpec:  6.76x   8.93x    9.64x  ← 持续扩展,无上限

                  预算 256 时 τ=10.76,平均每步提交近 11 个词元

MATH-500 任务的数学推理序列具有高可预测性(一旦走在正确推理路径上,后续词元高度受约束),这使得 JetSpec 的因果条件草稿在深树上能找到长而连贯的正确分支。

全任务对比(预算=256,Qwen3-8B,T=0):

基准测试DDTreeJetSpecJetSpec τ
GSM8K7.047.828.62
MATH-5008.789.6410.76
AIME258.789.82
HumanEval7.127.127.78
MBPP6.736.737.43
LCB6.757.678.79
MT-Bench4.264.585.94

系统级性能:vLLM 集成结果

vLLM 集成实验揭示了一个重要的系统级规律:最优预算强烈依赖于批次大小

批次大小AR(TPS)预算=16预算=32预算=64预算=128
1127.8224.0 (1.75×)312.0 (2.44×)447.3 (3.50×)553.3 (4.33×)
2163.3266.2 (1.63×)360.3 (2.21×)516.0 (3.16×)621.6 (3.81×)
4203.8433.6 (2.13×)534.2 (2.62×)664.2 (3.26×)742.9 (3.64×)
8246.2679.3 (2.76×)839.3 (3.41×)859.3 (3.49×)803.5 (3.26×)
16287.3891.8 (3.10×)1094.6 (3.81×)995.8 (3.47×)803.1 (2.80×)

单请求时,更大的预算单调提升吞吐量(4.33× 在 batch=1)。但 batch=16 时,最优预算是 32,而预算 128 反而劣于预算 32(3.10× vs 2.80×)。原因:大批次下验证开销、内存压力和 GPU 占用率的增加抵消了减少验证轮次的收益。这说明实际部署中必须动态调整预算——一个论文明确留作未来工作的问题。

消融研究:因果头 vs 扩散头(表 7)

这是论文最具说服力的消融。在 MATH-500 上对比不同 γ\gamma(深度权重参数)下的性能:

架构γ=0 加速比γ=0 τγ=7 加速比γ=7 τ
因果头8.299.818.409.99
扩散头5.466.458.369.72

γ=0\gamma=0 时扩散头灾难性失败:26% 的提示词出现排名 1 分支差距 ≥ +80 nats 的极端情况(联合概率几乎为零)。因果头这一极端失败率为 0%。

更重要的是:因果头在所有 γ\gamma 下性能稳定(γ=0\gamma=0γ=7\gamma=7 几乎相同)。扩散头需要精心调整 γ=7\gamma=7 才能恢复到接近因果头的性能——而且即便 γ=7\gamma=7,极端失败率仍有 4%,因果头只有 2%。这种结构性鲁棒性来自掩码的拓扑约束:因果头从架构上就无法产生跨分支不连贯的组合。

训练数据消融(表 6)对比(预算=256):

设置GSM8KAIME25HumanEvalMT-Bench
JetSpec(再生成)8.787.126.734.58
JetSpec-Corpus(语料库)3.663.533.272.63

差距达 2.4 倍——再次证明再生成序列的必要性。

局限性与适用边界

静态预算策略

JetSpec 使用固定的节点预算训练和推理。但系统实验表明最优预算因批次大小而异,变化幅度达 8 倍(batch=1 时 128,batch=16 时 32)。在实际服务系统中,请求量在全天波动剧烈,静态预算策略导致大量性能浪费。论文明确指出这是未来工作——但这个”未来工作”对生产部署至关重要。

训练数据再生成开销

部署 JetSpec 之前,必须先用目标模型对 78 万条样本进行再生成推理。对于 Qwen3-30B-A3B(3B 活跃参数),这一预计算步骤消耗显著的 GPU 时间。论文未提供任何关于这一成本的估算,使得”JetSpec 是否比从零训练一个小型独立草稿模型更高效”这一关键比较无从进行。

评估范围局限

所有基准均在 Qwen3 非思考模式下评测。思考模式(extended CoT)生成更长的推理轨迹,有更强的重复结构,SD 方法在此类工作负载上表现可能截然不同,但论文未涉及。

草稿头与目标模型强绑定

草稿头条件化于目标模型特定层({1,9,17,25,33}\{1, 9, 17, 25, 33\})的隐状态。任何对目标模型的修改——微调、量化、LoRA 适配器——都使草稿头失效,需要重新训练。在频繁更新模型的生产系统中,这是显著的运维负担。

i.i.d. 接受假设

理论加速比公式(式 3)假设各词元独立接受。实际中,位置 tt 的拒绝会通过修正词元影响位置 t+1t+1 之后的验证——接受事件之间存在相关性。该近似通常在宏观平均水平上成立,但在对抗性或分布偏移场景下可能偏差更大。

批判性分析:不足与可改进之处

不好的地方与方法缺陷

W1:高预算下与 EAGLE-3 的对比存在结构性不公平。 论文表 2 脚注明确指出”EAGLE-3 使用最大深度 8 的树模式;更大预算因训练不匹配带来极小甚至更差的收益”。EAGLE-3 从未为高预算操作设计,却在预算=256 的高预算区间被当作基线展示。公平的比较应该是 JetSpec vs DDTree(两者均为高预算设计),而不是 JetSpec vs 一个在训练不匹配设置下运行的 EAGLE-3。这掩盖了”扩展上限突破”究竟源于架构优势还是训练区间设计的差异。

W2:vLLM 服务数字依赖一个文档不完整的自定义内核。 表 11 的服务加速比依赖于一个 SM90 CuTe DSL 内核,用于高效树注意力验证。论文对该内核的描述仅停留在功能层面,没有实现细节。没有 NVIDIA H100/B200 和相应 CUDA 工具链的研究人员无法复现这些服务结果。离线结果(表 1–2)可以用标准 Triton 内核复现,但服务贡献建立在这个黑盒内核上。

W3:未提供再生成数据的计算成本分析。 78 万条再生成序列加上 8×H100 的训练开销,JetSpec 的总部署成本可能与训练一个小型独立草稿模型相当。论文完全没有这方面的对比,导致读者无法理性评估 JetSpec 相对于”维护独立草稿模型”方案的真实优势。

W4:MoE 实验结果分析不足。 Qwen3-30B-A3B 上的结果(表 5)显示 JetSpec 一致优于 DDTree,但加速比幅度系统性低于稠密模型(MATH-500 上 τ=10.28 vs 10.76)。论文没有解释为什么 MoE 对 JetSpec 更难——是专家路由引入了更大的目标分布方差?还是 MoE 层的隐状态信息量不足?这是一个对日益主流的 MoE 架构部署者而言重要的知识空缺。

W5:服务评估局限于单卡。 表 11 的 vLLM 集成评估在单张 H100 上进行。实际部署大模型时通常使用张量并行(2–8 张 GPU)。JetSpec 的树草稿与张量并行通信模式的相互作用完全未被研究——跨设备同步树掩码和 logits 的额外通信开销可能显著削减服务收益。

作者淡化或回避的局限

L1:γ=0\gamma=0 下扩散头的失败是一个精心选取的对比点。 论文将 γ=0\gamma=0 的扩散头崩溃作为因果条件必要性的核心证据。但在实际使用 DFlash 的场景中,从业者自然会调整 γ\gamma——调整到 γ=7\gamma=7 后,扩散头在 MATH-500 上达到 8.36× 加速比(因果头 8.40×)。实际差距远比 γ=0\gamma=0 的对比(8.29× vs 5.46×)小得多。JetSpec 的核心优势是对 γ\gamma 调参的鲁棒性,而非在任意固定 γ\gamma 下的绝对性能领先。

L2:所有实验均未报告方差或置信区间。 表 1–7 均为点估计。对于随机(T=1)评估,多次运行间的方差可能不小。没有误差棒或多随机种子的结果,无法判断 JetSpec vs DDTree 的差距(通常 0.3–0.9× 加速比)在统计上是否显著。

L3:对超出训练预算的泛化能力未作探讨。 草稿头训练时使用 block_size=16(对应树深度 16)。推理时用更大的预算(如 256 节点)是否要求训练时也用同样大的预算?还是因果掩码能自然泛化到更深的树?这一关键问题未被探讨。若泛化成立,训练成本大幅降低;若不成立,每次更换预算都需要重新训练。

可以改进的地方

I1:加入动态预算调度实验。 哪怕是一个简单的基于批次大小查表的动态预算策略(根据表 11 数据离线确定对应关系),也能把这个”最重要的未来工作”变成一个具体的贡献。表 11 的数据已经支持构建这样的查找表,加入这个实验对论文的完整性提升显著。

I2:训练-推理预算不匹配的泛化实验。 固定训练预算 Btrain=16B_{\text{train}}=16,在 Beval{32,64,128,256}B_{\text{eval}} \in \{32, 64, 128, 256\} 下评估。若泛化成立,单次训练的草稿头可以部署于任意预算设置,大幅降低总部署成本。

I3:思考模式评估。 在 Qwen3-8B 思考模式(开启 extended CoT)下,对 AIME 等长推理任务评测 JetSpec。思考模式生成的序列更长、重复结构更强,SD 方法的行为可能与非思考模式截然不同。这一评估能将论文的适用范围扩展到当前最主流的推理场景。

I4:多卡张量并行服务评估。 至少增加一个 2-GPU 张量并行 vLLM 服务结果,量化跨设备树掩码同步对服务加速比的影响。这对于使用多卡服务大模型的生产场景至关重要。

I5:训练成本与独立草稿模型方案的对比。 量化 JetSpec 部署的总成本(再生成数据的推理时间 + 训练时间,以 GPU 小时计),并与训练一个 1B 参数独立草稿模型对比。这让从业者能做出理性的方案选择。

相关工作定位:JetSpec 在推测解码家族中的位置

理解 JetSpec 为什么重要,需要先把现有方法按两个维度梳理清楚:草稿来源(独立草稿模型 vs 草稿头)和生成方式(自回归 vs 并行)。

维度一:独立草稿模型 vs 草稿头

独立草稿模型: 用一个独立的小模型(如 7B 模型为 70B 目标服务)生成草稿。优势:草稿模型可以独立对齐优化;缺点:占用额外内存和推理资源,部署复杂度高。

草稿头(draft head): 在冻结目标模型上附加一个小型预测头,条件化于目标模型的内部隐状态。优势:复用目标模型的 KV 缓存,几乎不需要额外内存;缺点:草稿头与具体目标模型强绑定。

JetSpec 明确属于草稿头方案。

维度二:自回归头 vs 并行头

图 7:基于草稿头的 SD 方法设计空间


  高 α        │  EAGLE-3           JetSpec
 (因果)      │ (顺序自回归,      (并行一次前向传播,
              │   多次草稿通道)     树因果掩码)


  低 α        │  Medusa            DFlash / DDTree
 (无因果)    │ (并行,            (并行,块扩散,
              │   位置独立)         分支无关边缘分布)

              └──────────────────────────────────────
                高 c(慢)                     低 c(快)
               (多次通道)                 (单次通道)

EAGLE-3 在左上角:因果条件好,α\alpha 高,但多次草稿通道使 cc 随树深增长。DFlash 在右下角:单次前向传播使 cc 极低,但分支无关导致 α\alpha 受损。JetSpec 填补了右上角这个原本空置的格子——低 cc、高 α\alpha 同时满足。

与 DFlash 的关键关系

DFlash [Chen 等,2026] 首先引入了块并行草稿头的概念:用一次前向传播在目标模型隐状态注入(KV 注入)的引导下生成所有草稿位置。JetSpec 直接在这一架构上扩展,用树因果掩码替换扩散注意力模式。因此 JetSpec 对 DFlash 的核心增量是树因果注意力掩码以及分支无关边缘分布为何在有预算的树构建中失败的理论分析。

深挖:每词元草稿成本分析与扩展算术

附录 G 提供了在现代硬件上对 DFlash 风格草稿头的每词元草稿成本 cc 的精确测量,这一分析从数量上验证了 JetSpec 扩展能力的根本来源。

定义 cc 并测量它

每草稿词元成本系数 cc 定义为:

c(N,L)=T草稿(N,L)/NT验证(N,L)(18)c(N, L) = \frac{T_{\text{草稿}}(N, L) / N}{T_{\text{验证}}(N, L)} \tag{18}

其中 T草稿(N,L)T_{\text{草稿}}(N, L) 是草稿头在上下文长度 LL 下提出 NN 个词元的单次前向传播延迟,T验证(N,L)T_{\text{验证}}(N, L) 是目标模型对同样 NN 个候选词元的并行验证延迟。分母中的 1/N1/N 将草稿头的前向传播成本摊销到每个被提出的词元上。

在 H200 NVL GPU、Qwen3-8B 目标、上下文长度 L=1024L=1024 下测量的代表性数值:

上下文长度 L=1024 时各草稿深度 N 对应的 c 值(占一次验证通道的百分比):

N=1:    8.45%   (摊销不足,成本仍相对高)
N=8:    1.11%
N=16:   0.845%  ← JetSpec 训练块大小对应点
N=32:   0.45%
N=64:   0.23%
N=128:  0.12%
N=256:  0.054%  ← 预算=256 时,c 不足一次验证通道的 0.1%

关键规律:在实际相关区间(L2048L \leq 2048N16N \geq 16),每草稿词元成本低于一次目标模型验证通道的 1%。预算=256 时,c0.054%c \approx 0.054\%——这就是图 2(超低成本 SD)中加速比曲线接近理论上限 11α\frac{1}{1-\alpha} 的量化解释。

这组数字如何改变扩展算术

c=0.00054c = 0.00054(预算=256)代入加速比公式(式 3):

SpeedupN=256=1α257(1α)(256×0.00054+1)=1α257(1α)×1.138(19)\text{Speedup}_{N=256} = \frac{1 - \alpha^{257}}{(1-\alpha)(256 \times 0.00054 + 1)} = \frac{1 - \alpha^{257}}{(1-\alpha) \times 1.138} \tag{19}

对比 N=16N=16c=0.00845c=0.00845

SpeedupN=16=1α17(1α)(16×0.00845+1)=1α17(1α)×1.135(20)\text{Speedup}_{N=16} = \frac{1 - \alpha^{17}}{(1-\alpha)(16 \times 0.00845 + 1)} = \frac{1 - \alpha^{17}}{(1-\alpha) \times 1.135} \tag{20}

分母几乎相同!(1.138 vs 1.135)预算从 16 增大到 256(增加了 16 倍),但每步的总开销几乎没有变化。这意味着:推测解码的”加速利润”完全被分子——即随 NN 增大逐渐趋向 11α\frac{1}{1-\alpha} 的期望接受词元数——所决定。

α=0.9\alpha=0.9 时(高接受率,因果草稿的典型场景):

  • N=16N=16:分子 10.9170.18.35\approx \frac{1-0.9^{17}}{0.1} \approx 8.35;加速比 7.4×\approx 7.4\times
  • N=256N=256:分子 10.1=10.0\approx \frac{1}{0.1} = 10.0;加速比 8.8×\approx 8.8\times

α\alpha 因分支不连贯降至 0.7(扩散头在大预算下的典型情况):

  • N=256N=256:分子 10.3=3.33\approx \frac{1}{0.3} = 3.33;加速比 2.9×\approx 2.9\times——比 α=0.9\alpha=0.9N=16N=16 的情况还差!

这个简单的算术揭示了 JetSpec 的全部逻辑:在大预算下,cc 已经低到可以忽略不计;决定加速比的唯一变量是 α\alpha 树因果掩码的存在意义,正是为了在大 NN 下维持高 α\alpha

复现笔记

论文提供了合理的复现支持:

  • 代码和模型: https://github.com/hao-ai-lab/JetSpec(已公开)
  • 训练设置: 8×H100,学习率 3×1043\times 10^{-4},micro-batch 2,780K 样本,Nemotron Post-Training Dataset V2(HuggingFace 公开)
  • 基线: DFlash 和 DDTree 在相同数据混合下训练,对比公平
  • 评估: T=0 和 T=1 均报告;使用标准基准(GSM8K, MATH-500, HumanEval 等)

复现难度评估: 离线结果(表 1–2)难度中等(需要 8×H100 + 公开数据 + 开源代码);服务结果(表 11)难度高(需要 SM90 自定义 CuTe DSL 内核 + vLLM 适配,H100 或 B200 GPU 必需)。

计算需求: 训练需 8×H100 GPU,具体时长未披露(同类方法通常约 1–2 天);轻量草稿头的推理评估理论上 2×H100 可行。

研究组复现 JetSpec 的建议步骤:

  1. 从 HuggingFace 下载 Nemotron Post-Training Dataset V2,用目标模型再生成序列(这是最大的隐性计算成本)
  2. 用公开配置(8×H100,LR 3×1043\times 10^{-4},block_size=16)训练因果并行草稿头
  3. 使用论文附带的 Triton 内核评估离线加速比(此步骤不需要自定义 CuTe 内核)
  4. vLLM 集成与服务评估:SM90 CuTe DSL 内核需要 H100/B200 GPU 和 NVIDIA CuTe 工具链,建议参考 GitHub 仓库的最新说明(随硬件支持迭代更新)
  5. 对照表 1(低预算)和表 2(高预算)验证数值——重点关注 MATH-500 的 τ 值,它对因果掩码的有效性最敏感

补充:MoE 架构上的泛化性

论文中一个值得单独关注但被低调处理的结果是 JetSpec 在 Qwen3-30B-A3B(混合专家模型,MoE)上的泛化实验。MoE 架构对推测解码提出了不同于稠密模型的挑战:每个词元的下一词元分布受专家路由影响,不同位置的分布方差更大,草稿头需要在目标模型特征固定的情况下预测这些路由决策驱动的分布。

JetSpec 在 Qwen3-30B-A3B(预算=256,T=0)上的结果(表 5):

方法GSM8K 加速比/τMATH-500 加速比/τHumanEval 加速比/τ
DDTree7.26 / 7.938.61 / 9.496.18 / 6.76
JetSpec7.40 / 8.189.45 / 10.656.51 / 7.23

JetSpec 在所有任务上保持领先,平均接受长度 τ\tau 在 MATH-500 上达到 10.65——对于一个 30B 参数量的 MoE 模型来说相当可观。这表明树因果掩码的收益来自结构性的分支连贯性保证,而非针对稠密 Transformer 特定的架构适配。MoE 模型的路由驱动隐状态仍然携带足够的信息,使得因果草稿头能够学到有效的条件依赖。

这一结果对从业者具有实际意义:MoE 模型正日益成为生产服务中的主力架构(DeepSeek 系列、Mixtral、Qwen3-MoE 等),JetSpec 在这类模型上的有效性使其具有更广泛的部署价值。

总结

JetSpec 提出了一个简洁而有力的贡献:树因果注意力掩码从架构层面解决了推测解码领域长达数年的因果-效率两难困境。核心洞见——用结构性约束(掩码)而非顺序计算(自回归)来保持因果依赖——既优雅又实用:单次前向传播生成全部树节点,同时保证每条分支内部的因果一致性。

MATH-500 上 9.64 倍加速比(预算=256)相比 DFlash 的 8.78 倍和 DDTree 的 8.78 倍,差距虽不如某些宣传那样惊天动地,但在高预算下持续扩展、无饱和迹象,正是论文名”打破扩展上限”的实质所在。最有价值的贡献或许不是这 0.86× 的绝对数字,而是因果头对 γ\gamma 调参天然鲁棒的结构性保证——这在真实部署中意味着省去一个需要精心调试的超参数。

对于在低至中等负载下追求单请求低延迟的服务场景,JetSpec 是立即值得集成的方案。在高负载或多卡张量并行场景下,目前的实验数据还不足以得出明确结论。对研究者而言,动态预算调度、训练-推理预算泛化和思考模式评估是最值得跟进的开放方向。

从业者决策参考

为了帮助判断 JetSpec 是否适合特定部署场景,总结如下:

JetSpec 强适配的场景:

  • 低至中等请求量(批次大小 ≤ 8),每请求延迟是核心指标
  • 目标模型稳定,不频繁微调——避免反复重训草稿头
  • 任务结构可预测(数学、代码、多步推理),α\alpha 自然较高
  • 单卡或小规模部署,无需担心张量并行通信开销
  • GPU 显存允许容纳 64–256 节点规模的候选树

需要谨慎评估的场景:

  • 高负载(批次 > 16)——最优预算急剧下降,静态策略效果打折
  • 目标模型频繁更新——每次更新都使草稿头失效,需重训
  • 开放式对话任务(MT-Bench 在预算=256 时仅 4.58×)——可预测性低,收益有限
  • 需要多卡张量并行——跨设备树掩码同步的开销尚未量化

暂不适合的场景:

  • 思考模式(extended CoT)推理——无任何评估数据
  • 对量化或适配模型有严格无损分布保证需求——i.i.d. 接受分析未考虑量化误差
  • 数据再生成算力成本受限——论文未提供具体的再生成成本估算

综合来看,JetSpec 在”低负载 + 数学/代码任务 + 单卡或小集群部署”这一场景下提供了切实可观的加速收益,这也是当前相当多学术机构和中小型企业 LLM 部署的现实写照。在动态预算调度和思考模式支持出现明确的后续工作之前,高负载或开放域生产系统部署 JetSpec 需要更审慎的评估。

从更宏观的视角看,JetSpec 传递了一个超越推测解码领域本身的技术洞见:结构化注意力掩码是实现”并行计算、因果语义并存”的强力设计原语。树因果掩码本质上是将标准因果掩码从线性序列推广到树结构。类似的构造可以想象用于图结构生成、并行修订链、多路径推理树等场景——核心原则都是”并行处理所有分支,但让每条分支只关注自身谱系”。JetSpec 在生产规模验证了这一原则的有效性,为更广义的”高效并行语言生成”研究提供了重要的概念锚点。

如果我来做 JetSpec,最想补充的实验: 训练-推理深度泛化研究——固定训练深度 16,在推理时用深度 32/64/128 测试。若因果掩码能泛化到训练深度以外(这是可能的,因为掩码结构是位置无关的),JetSpec 的部署灵活性将大幅提升,而无需增加任何训练成本。这个实验只需半天运行时间,却能回答关于该方法最重要的开放性实践问题。

给从业者的一句话建议: 如果你已经在用 DFlash 风格的并行草稿头,把注意力计算中的掩码换成树因果掩码是一次改动量极小但收益可观的工程升级——尤其是在大草稿预算(≥64 词元)的场景下,这一升级能直接转化为测量得到的端到端延迟下降。

JetSpec 的代码和模型权重已在 GitHub 公开(https://github.com/hao-ai-lab/JetSpec),Qwen3-8B 和 Qwen3-30B-A3B 的草稿头均可直接下载使用。对于想在自己的推理基础设施上评估的团队,离线测试(不需要 CuTe 内核)是最低门槛的起点——先在 GSM8K/MATH-500 上跑 benchmark,确认加速比落在论文报告的范围内,再决定是否投入 vLLM 集成的工程成本。

最终,JetSpec 解决了一个真实存在的技术问题,方法简洁,证据充分,代码开放。它不是推测解码领域的最终答案——动态预算、思考模式兼容、多卡服务扩展都有待后续工作填补——但它为下一个阶段的研究划定了一条清晰的新起点:在大草稿预算下,因果连贯性是决定加速比上限的核心变量,而 JetSpec 用一个优雅的工程构件(树因果注意力掩码)将这一认识转化为了实践。