DSpark: Confidence-Scheduled Speculative Decoding with Semi-Autoregressive Generation
DSpark: Confidence-Scheduled Speculative Decoding with Semi-Autoregressive Generation
发表时间: 2026-07 · arXiv:2607.05147 (Peking University / DeepSeek-AI)
原文: https://arxiv.org/abs/2607.05147
Xin Cheng, Xingkai Yu, Chenze Shao, Jiashi Li, Yunfan Xiong, Yi Qian, Jiaqi Zhu, Shirong Ma, Xiaokang Zhang, Jiasheng Ye, Qinyu Chen, Chengqi Deng, Jiping Yu, Damai Dai, Zhengyan Zhang, Yixuan Wei, Yixuan Tan, Wenkai Yang, Runxin Xu, Yu Wu, Zhean Xu, Xuanyu Wang, Muyang Chen, Rui Tian, Xiao Bi, Zhewen Hao, Shaoyuan Chen, Huanqi Cao, Wentao Zhang, Anyi Xu, Huishuai Zhang, Dongyan Zhao, Wenfeng Liang
Peking University, DeepSeek-AI
速读
一句话结论 本文提出了结合半自回归生成与置信度调度验证的投机解码框架 DSpark,在无损生成质量的前提下解决了高并发场景的算力浪费,并在 DeepSeek-V4 生产系统中将同等吞吐量下的每用户生成速度提升了 60% 到 85%。
要解决什么问题 现有投机解码技术在实际生产中面临两个机制层面的卡点。首先是草稿生成端的接受率衰减:并行草稿模型虽能在单次前向传播中高效生成长序列,但各位置预测相互独立,缺乏 token 间的条件依赖。当上下文允许多种合理续写时,模型会产生不连贯组合,导致草稿块后部的接受率迅速崩塌。其次是系统验证端的算力浪费:传统方法不考虑系统实时负载,盲目让目标模型验证固定长度的完整草稿块。在高并发服务场景中,验证极大概率会被拒绝的低质量后缀 token,会白白占用本可用于处理其他活跃请求的关键批处理容量。这种数据侧低接受率与系统侧高并发的相互作用,严重拖垮了服务系统的高峰吞吐量。
怎么做的 核心思路是通过半自回归架构提升草稿质量,并引入硬件感知的动态调度修剪低质量草稿,绕开接受率衰减和算力浪费的卡点。方法由两个关键部件构成。第一是半自回归生成模块,将草稿生成拆分为并行和序列两阶段。先由计算密集的并行主干网络在单次前向传播中输出所有位置的基础对数几率 $U_k$ 和隐藏状态 $h_k$;接着,极其轻量的序列输出头(如马尔可夫头)从左到右依次采样,为每个位置补充依赖于前置 token 的过渡偏差 $B_k$。这种设计诱导出了因果块分布: $$p_k(\nu \mid x_0, x_{<k}) = \frac{\exp(U_k(\nu) + B_k(x_0, x_{<k}, \nu))}{\sum_{u \in \mathcal{V}} \exp(U_k(u) + B_k(x_0, x_{<k}, u))}$$ 其中马尔可夫头通过低秩分解 $B(x_{k-1}, \cdot) = W_1[x_{k-1}] W_2$ 实现。这使每个草稿位置能条件依赖于块内先前采样的 token,既保留并行模型的高速,又通过注入局部依赖缓解了后缀衰减。第二是置信度调度验证机制。为避免浪费目标模型算力,置信度头为每个草稿位置预测条件存活概率: $$c_k = \sigma\big(\boldsymbol{w}^\top [h_k; W_1[x_{k-1}]]\big)$$ 这些分数经过序列温度缩放(STS)事后校准以对齐经验接受率后,输入给硬件感知前缀调度器。调度器结合实时引擎吞吐量曲线 $\mathrm{SPS}(B)$,计算预期系统级吞吐量 $\Theta = \tau \cdot \mathrm{SPS}(B)$。它通过贪心算法动态决定每个请求的验证长度,当预期吞吐量开始下降时触发早停机制截断后续 token,确保算力只分配给预期回报为正的前缀,同时严格保证无损投机解码的因果性。
效果如何 实验在 Qwen3(4B、8B、14B)和 Gemma4-12B 目标模型上展开,草稿模型使用 130 万条混合指令数据训练。对比基线包括代表并行路线的最先进模型 DFlash,代表自回归路线的模型 Eagle3,以及生产环境中的单 token 基线 MTP-1。在离线基准测试中,DSpark 在 Qwen3 系列模型上的宏观平均接受长度比 Eagle3 提升了 26.7% 到 30.9%,比 DFlash 提升了 16.3% 到 18.4%。在接入真实用户流量的 DeepSeek-V4-Flash 生产系统中,与 MTP-1 相比,DSpark 在匹配的实际吞吐量水平下,将每用户生成速度提高了 60% 到 85%;在严格的交互性约束(每秒 120 个 token)下,实现了 661% 的标称吞吐量优势,成功向外推移了系统的帕累托前沿。代价方面,序列头极其轻量,提议长度扩展到 16 仅增加 0.2% 到 1.3% 的整轮延迟。作者也承认了实际部署的局限:在真实基础设施中,严格早停机制与底层零开销调度及离散硬件容量存在冲突。为此必须将调度器改为依赖两步前信息的异步运行模式,利用异步设计形成因果屏障,以此兼顾物理吞吐量最大化与无损分布保证。
主要贡献
大型语言模型(LLMs)自回归生成文本时,每个新token都需要基于所有前置token进行完整的前向传播,导致推理延迟与输出长度成正比,造成了生产环境中LLM服务(尤其是对延迟敏感的实时对话和多轮智能体工作流)的低GPU利用率和高用户等待时间。投机解码(Speculative decoding)提供了一种原则性解决方案:由轻量级草稿模型提出候选token块,目标模型通过拒绝采样在单次前向传播中验证整个块,在无损生成质量的前提下加速推理。然而,现有的并行草稿模型虽然能在单次前向传播中高效生成长序列,但由于缺乏token间的依赖关系,面临着严重的接受率衰减问题;此外,在不考虑系统负载的情况下盲目验证过长的草稿块,会浪费关键的批处理容量,严重降低高并发服务系统中的吞吐量。
为了解决上述问题,本文提出了DSpark,这是一个将高吞吐量并行生成与自适应、负载感知验证相统一的投机解码框架。DSpark的核心创新点包括:
1. 半自回归架构:为克服缺乏token间依赖的问题,DSpark将计算密集的并行主干网络与轻量级的序列输出头相结合,引入了块内依赖建模,从而显著缓解了后缀衰减问题,并在不损失并行模型生成速度的情况下提升了草稿质量。
2. 置信度调度验证:为解决系统级瓶颈,DSpark采用了置信度调度的验证机制。该机制通过一个预测每个位置前缀存活概率的置信度头,结合硬件感知的调度器,根据实时引擎吞吐量配置动态调整每个请求的验证长度,确保目标模型的验证预算仅分配给预期回报最高的token。
在跨领域的离线基准测试中,DSpark的接受长度显著优于最先进的自回归和并行草稿模型。在真实用户流量的DeepSeek-V4服务系统中部署时,DSpark成功缓解了验证浪费。与现有的生产基准(MTP-1)相比,DSpark在匹配的吞吐量水平下将每用户生成速度提高了$60\% - 85\%$。更重要的是,通过防止在严格交互性约束下出现严重的吞吐量下降,它解锁了以前无法实现的性能层级,成功向外推移了服务系统的帕累托前沿。本文开源了DSpark的权重以及算法驱动的投机解码训练仓库DeepSpec。
背景知识与设计原则
投机解码的延迟建模:自回归语言模型每次前向传播生成一个token,延迟与输出长度成正比。投机解码利用轻量级草稿模型$M_d$加速目标模型$M_t$的推理。在每个解码周期,草稿模型提出$\gamma$个候选token $x_1, \ldots, x_\gamma$。目标模型在单次前向传播中验证所有候选者,接受与其自身分布一致的最长前缀。具体而言,在草稿位置$k$,目标模型计算其分布$p_k^t$并与草稿分布$p_k^d$进行比较,token $x_k$以$\min(1, p_k^t(x_k) / p_k^d(x_k))$的概率被接受。验证从左到右进行,位置$k$的首次拒绝将丢弃所有后续token。设$\tau$为每周期接受的token数,$T_{\mathrm{draft}}$和$T_{\mathrm{verify}}$分别为草稿和验证的耗时,则生成每个token的平均延迟为$L = \frac{T_{\mathrm{draft}} + T_{\mathrm{verify}}}{\tau}$。因此,提高加速比依赖于降低$T_{\mathrm{draft}}$、提高$\tau$或减少有效的$T_{\mathrm{verify}}$。
草稿模型架构的权衡:草稿模型的设计决定了$T_{\mathrm{draft}}$和$\tau$之间的权衡。现有的自回归草稿模型按顺序生成token,每次条件依赖于先前采样的token,具有很强的建模能力,但其延迟随块大小线性增长($T_{\mathrm{draft}} \propto \gamma$),迫使其只能使用较小的$\gamma$和极浅的架构。并行草稿模型则在单次前向传播中生成所有$\gamma$个草稿token,使$T_{\mathrm{draft}}$几乎独立于块大小。其中,DFlash(Chen等,DFlash: Block diffusion for flash speculative decoding,2026,arXiv)作为最先进的并行草稿模型,将目标模型的上下文特征注入到草稿隐藏空间中。在Prefill阶段,目标层$\{l_1, \dots, l_m\}$的隐藏状态被拼接并投影为$H_{\mathrm{ctx}} = \mathrm{RMSNorm}\big(W_c [H^{(l_1)}; \dots; H^{(l_m)}]\big)$,随后注入到每个草稿层的键和值中:$\mathcal{K}_i = [W_i^K H_{\mathrm{ctx}}; W_i^K H_d]$,$\mathcal{V}_i = [W_i^V H_{\mathrm{ctx}}; W_i^V H_d]$。块内的所有位置进行双向注意力计算,草稿模型共享目标模型的嵌入层和语言建模头,通过单次前向传播输出所有掩码位置的对数几率(logits),这使得并行模型在相同延迟预算下能够承担比自回归模型更深的架构和更大的块。
方法细节
架构概览:DSpark旨在解决自回归草稿模型生成慢、并行草稿模型独立预测导致接受率低,以及固定长度验证浪费计算资源的问题。DSpark通过两个互补组件解决这些限制:半自回归生成(结合并行主干和轻量级序列块以注入依赖关系)以及置信度调度验证(通过置信度头和硬件感知调度器修剪低置信度后缀 token)。
并行阶段的局限与设计:由于并行草稿模型在单次前向传播中产生所有$\gamma$个草稿logits,每个预测无法条件依赖于块内其他位置采样的token。当上下文允许多种合理的延续时(例如“of course”和“no problem”),并行草稿模型可能会产生不连贯的组合(如“of problem”),因为每个位置都在边缘化所有可能的前置词,而不是基于实际采样的前缀。这导致接受率在块的后部迅速衰减。因此,DSpark将草稿生成分为两个阶段。在并行阶段,并行主干(实例化为DFlash)对整个块运行单次前向传播,产生隐藏状态$h_1, \ldots, h_\gamma$和基础logits $U_1, \dots, U_\gamma$。DSpark对原始DFlash做了一个微小修改:不再输入anchor token加上$\gamma$个掩码token并仅预测掩码位置,而是将anchor本身视为第一个预测位置,因此$\gamma$个输入token(anchor + $\gamma - 1$个掩码)直接产生$\gamma$个草稿logits,这在保持草稿质量的同时减少了计算量。
序列阶段的依赖注入:序列阶段通过补充前缀依赖的过渡偏差$B_k(x_0, x_{<k}, x_k)$,允许每个草稿位置条件依赖于块内先前采样的token。序列阶段没有定义全局归一化的能量模型,而是通过自回归分解诱导因果块分布:$P(X \mid x_0) = \prod_{k=1}^\gamma p_k(x_k \mid x_0, x_{<k})$,其中$p_k(\nu \mid x_0, x_{<k}) = \frac{\exp(U_k(\nu) + B_k(x_0, x_{<k}, \nu))}{\sum_{u \in \mathcal{V}} \exp(U_k(u) + B_k(x_0, x_{<k}, u))}$。这里$x_0$是前一验证周期的anchor token,$U_k$是并行主干在位置$k$产生的基础logit向量,$\mathcal{V}$是词表。在推理时,序列块根据$p_k(\cdot \mid x_0, x_{<k})$从左到右采样。由于该过程是顺序的,该模块必须极其轻量($T_{\mathrm{sequential}} \ll T_{\mathrm{parallel}}$),以确保整体草稿延迟仍由并行阶段主导。</p>
马尔可夫头(Markov head)的实现:这是最简单的实例化形式,限制$B_k$仅依赖于紧邻的前一个token,将其简化为一阶过渡$B(x_{k-1}, x_k)$。原则上这是一个完整的$V \times V$矩阵;DSpark使用低秩分解近似它:$B = W_1 W_2$,其中$W_1 \in \mathbb{R}^{V \times r}$,$W_2 \in \mathbb{R}^{r \times V}$。给定前一个token $x_{k-1}$,位置$k$的过渡偏差为$B(x_{k-1}, \cdot) = W_1[x_{k-1}] W_2 \in \mathbb{R}^V$。其中$W_1$充当嵌入查找表,$W_2$作为logit投影。低秩分解(默认$r = 256$)使存储和单步计算保持极小,即使对于大词表也能确保序列循环的高效性。例如,当位置1采样了“of”后,马尔可夫头会在位置2提升“course”的概率并抑制“problem”,从而缓解跨模态碰撞。
RNN头的实现:马尔可夫头在一跳之外是无记忆的,位置$k$无法访问$x_{k-1}$之前的token。RNN头通过维护一个循环状态$s_k$来放松这一限制,该状态累积了块内的完整前缀历史。在每一步,模块将当前状态$s_{k-1} \in \mathbb{R}^r$、前一个token的嵌入$W_1[x_{k-1}] \in \mathbb{R}^r$以及主干隐藏状态$h_k \in \mathbb{R}^d$拼接为输入向量$z_k = [s_{k-1}; W_1[x_{k-1}]; h_k] \in \mathbb{R}^{2r+d}$,然后应用单次门控更新:$s_k = \sigma(W_g z_k) \odot s_{k-1} + \left( 1 - \sigma(W_g z_k) \right) \odot \tanh(W_c z_k)$,以及$B_k(x_{<k}, \cdot) = W_2^\top \tanh(W_o z_k)$。其中$W_g, W_c, W_o \in \mathbb{R}^{r \times (2r+d)}$由拆分为门控、候选和输出组件的单一线性投影联合参数化,初始状态$s_0$设为零。</p>
系统级瓶颈与置信度调度的必要性:虽然半自回归架构能高效生成大草稿块,但盲目验证完整草稿块会降低系统吞吐量,尤其在并发场景下。这一瓶颈源于数据侧和系统侧的相互作用:代码等结构化文本天然具有高接受率,而开放式聊天的接受率极低;在轻系统负载下,验证额外token几乎没有成本,但在高并发下,验证高拒绝风险的token会占用本可服务其他活跃请求的关键批处理容量。因此,DSpark引入置信度调度验证,将目标模型计算资源仅路由到具有正向预期回报的token上。
置信度头的设计:置信度头为每个草稿位置$k$输出一个标量$c_k \in (0, 1)$,代表在块内所有前置token均被接受的条件下,位置$k$的草稿token在目标验证中存活的条件概率。其架构包含一个轻量级线性投影后接Sigmoid函数:$c_k = \sigma\big(\boldsymbol{w}^\top [h_k; W_1[x_{k-1}]]\big)$,其中$h_k$是主干隐藏状态,$W_1[x_{k-1}]$是来自前一个草稿token的马尔可夫嵌入。DSpark使用单步解析接受率$c_k^*$对其进行监督,该比率由草稿分布$p_k^d$和目标分布$p_k^t$之间的总变差距离决定:$c_k^* = 1 - \frac{1}{2} \|p_k^d - p_k^t\|_1$。
事后校准(Post-hoc Calibration):由于神经网络的置信度估计通常过度自信,直接使用原始置信度分数会扭曲吞吐量估计。DSpark引入了序列温度缩放(STS)。根据链式法则,草稿前缀被接受的联合概率分解为累积乘积$\prod_{i \leqslant k} c_i$。使用保留的验证集,STS从左到右连续校准该联合概率。具体而言,在每个位置$k \in \{1, \ldots, \gamma\}$,DSpark执行一维网格搜索以寻找使累积乘积的预期校准误差(ECE)最小化的最佳温度标量,同时保持所有前置位置已校准的分数固定。温度缩放是一种保序变换,它在使预测概率匹配经验接受率的同时,不会破坏置信度头学到的草稿token相对排名。
硬件感知前缀调度器(Hardware-Aware Prefix Scheduler):为了在生产系统中最大化全局吞吐量,DSpark将验证长度选择公式化为优化问题。对于批次中的$R$个活跃请求,设$c_{r,1}, \ldots, c_{r,\gamma}$为位置置信度估计,$\ell_r \in \{0, \ldots, \gamma\}$为调度的验证长度。位置$j$的存活概率为累积乘积$a_{r,j} = \prod_{i \leqslant j} c_{r,i}$。单次验证步骤中发送给目标模型的总批次大小为$B = \sum_{r=1}^R (1 + \ell_r)$,预期成功接受的token数为$\tau = \sum_{r=1}^R \bigl(1 + \sum_{j=1}^{\ell_r} a_{r,j}\bigr)$。令$\mathrm{SPS}(B)$表示引擎吞吐量(每秒步数),该容量曲线在引擎初始化时被分析并存储为轻量级成本表。调度器旨在通过动态选择$\ell_1, \ldots, \ell_R$来最大化预期系统级token吞吐量$\Theta = \tau \cdot \mathrm{SPS}(B)$。
贪心求解与因果性保证:由于$a_{r,j}$相对于$j$单调不增,将请求$r$的验证长度从$j-1$扩展到$j$的预期边际收益恰好是$a_{r,j}$。这种单调性确保了按$a_{r,j}$全局排序候选token自然尊重块内前缀依赖。调度器首先按存活概率降序全局排序所有有效的前缀扩展,然后从该排序池中增量接纳token,通过查找成本表更新预期吞吐量$\Theta$。为了强制执行严格的因果性(无损投机解码要求接纳决策不能依赖于未来的候选token),调度器采用了早停机制:当吞吐量下降($\Theta \leq \Theta_{\mathrm{best}}$)时立即中断贪心搜索。这隔离了接纳事件与未来的token,确保精确恢复目标分布。具体算法流程如下(Algorithm 1):
输入:活跃请求 r ∈ {1, ..., R};每个请求的置信度序列 c_{r,1}, ..., c_{r,\gamma};引擎吞吐量曲线 SPS(B)
输出:选择的每个请求的前缀长度 \ell_1^*, ..., \ell_R^*
1: 遍历 r = 1 到 R:
2: 计算前缀存活概率:a_{r,j} = \prod_{i \leqslant j} c_{r,i},对于 j = 1, ..., \gamma
3: 结束遍历
4: 构建候选空间 E = {(r, j) | a_{r,j} > 0} 并按 a_{r,j} 降序排序
5: 初始化状态:\ell_r = 0;批次大小 B = R;预期接受数 \tau^* = R
6: 初始化跟踪:\Theta_{best} = R * SPS(R);选择的长度 \ell_r^* = 0
7: 按排序顺序遍历 E 中的每个 (r, j):
8: \ell_r = j; B = B + 1; \tau^* = \tau^* + a_{r,j}
9: 当前吞吐量 \Theta = \tau^* * SPS(B)
10: 如果 \Theta > \Theta_{best} 则:
11: \Theta_{best} = \Theta; 更新选择的长度 \ell_r^* = \ell_r
12: 否则:
13: 中断循环 (break)
14: 结束如果
15: 结束遍历
16: 返回 (\ell_1^*, ..., \ell_R^*)
训练目标:在训练期间,目标模型被冻结,草稿模型共享其嵌入层和语言建模头并保持冻结,仅更新主干草稿器、序列块和置信度头。训练目标由三项组成,所有项均按$w_k = \exp(-(k-1)/\gamma)$进行位置加权,以强调对前缀验证贡献更大的早期块位置。交叉熵损失$\mathcal{L}_{\mathrm{ce}} = - \sum_{k=1}^\gamma w_k \log p_k^d(x_k^*)$训练草稿器预测正确的下一个token;分布匹配损失$\mathcal{L}_{\mathrm{tv}} = \sum_{k=1}^\gamma w_k \|p_k^d - p_k^t\|_1$惩罚草稿和目标分布之间的总变差距离,直接最大化预期接受率;置信度损失$\mathcal{L}_{\mathrm{conf}} = - \sum_{k=1}^\gamma w_k \left[ c_k^* \log c_k + (1 - c_k^*) \log (1 - c_k) \right]$是一个二元交叉熵,训练置信度头预测软接受标签$c_k^*$。总目标是三者的加权组合(默认权重$\alpha_{\mathrm{ce}} = 0.1$, $\alpha_{\mathrm{tv}} = 0.9$, $\alpha_{\mathrm{conf}} = 1.0$):$\mathcal{L} = \alpha_{\mathrm{ce}} \mathcal{L}_{\mathrm{ce}} + \alpha_{\mathrm{tv}} \mathcal{L}_{\mathrm{tv}} + \alpha_{\mathrm{conf}} \mathcal{L}_{\mathrm{conf}}$。
实验环境
数据集:训练使用Open-PerfectBlend(130万样本),包含聊天(17.6%)、数学(39.4%)、代码(38.9%)和指令遵循数据(4.1%)。评估域包括数学推理(GSM8K, MATH500, AIME25)、代码生成(MBPP, HumanEval, Live-CodeBench)和日常聊天(MT-Bench, Alpaca, Arena-Hard)。
模型与参数:目标模型涵盖Qwen3-{4B, 8B, 14B}和Gemma4-12B。对比草稿模型为DFlash(并行)和Eagle3(自回归)。DSpark和DFlash均设置5层,Eagle3设置1层,块大小均为7。采样温度设为1.0。
软件配置:所有草稿模型在相同的训练框架和数据上重新训练以确保公平比较,并采用基于链的草稿生成。
实验结果
主实验结果:在离线评估中(禁用置信度调度器,强制提议固定长度),DSpark在所有评估的目标模型和基准领域中一致优于Eagle3和DFlash。具体而言,在Qwen3-4B、8B和14B模型上,DSpark的宏观平均接受长度比Eagle3分别提高了$30.9\%$、$26.7\%$和$30.0\%$;比DFlash分别提高了$16.3\%$、$18.4\%$和$18.3\%$。Gemma4-12B上也显示出一致的性能提升。结果还揭示了强烈的领域效应:结构化任务(如数学和代码)的接受长度自然高于开放式聊天,这直接验证了动态修剪草稿块的置信度调度验证的必要性。
并行生成为何优于自回归:通过分析Qwen3-4B上的位置级条件接受率,发现在第一个草稿位置,并行草稿模型(DFlash)由于$O(1)$延迟优势可以采用更深的架构,从而在位置1取得了比浅层自回归模型(Eagle3)显著更高的准确率(例如在数学任务上0.88对0.81)。由于投机解码是严格的前缀匹配,第一个token的杠杆作用最大。然而,在后续位置(2到7),DFlash由于独立预测遭遇了严重的接受率衰减(多模态碰撞),而Eagle3利用条件确定性保持或增加了接受率。DSpark的半自回归设计成功继承了并行模型初始token的高接受率,同时通过轻量级序列头缓解了后缀衰减,在整个草稿块中保持了高且稳定的条件接受率。
草稿器深度与提议长度的影响:固定块大小为7时,DSpark的性能随层数增加单调提升,且仅2层的DSpark在所有领域就超过了5层DFlash基线,证明了注入局部自回归的高参数效率。固定深度为5层并缩放提议长度(4到16)时,DSpark在每个长度上均优于DFlash,且差距随$\gamma$增加而稳步扩大(在$\gamma=15$时,数学、代码、聊天上的增益分别扩大到$30\%$、$26\%$和$22\%$)。RNN头仅在较长提议时提供微小额外增益。延迟测量表明,序列块的开销极小,提议长度从4缩放至16仅比DFlash基线增加了$0.2\%$到$1.3\%$的整轮延迟。
置信度头的作用:离线静态阈值扫描表明,随着阈值增加,置信度头能有效过滤掉最终会被拒绝的token,从而稳步提高整体接受率。这种修剪在聊天工作负载中最明显(接受率从$45.7\%$升至$95.7\%$)。可靠性图分析显示,虽然原始模型具有很强的区分度(ROC-AUC 0.81至0.90),但存在过度自信(ECE $3\% - 8\%$)。应用STS校准后,平均ECE降至约$1\%$,产生了可靠的存活概率估计。
补充细节
可扩展的灵活训练:DSpark草稿模型与预览版的DeepSeek-V4-Flash和DeepSeek-V4-Pro共同部署。并行主干包含三个MoE层,使用mHC和128的滑动窗口注意力。最大块大小配置为$\gamma = 5$,使用马尔可夫头进行序列建模。为了解决目标模型输出分布带来的内存和通信瓶颈,内部训练框架(HAI-LLM)实施了两个系统级优化:一是隐藏状态通信,缓存目标模型前向激活并仅通信LM头之前的隐藏状态,在草稿模型工作节点上局部执行LM头投影,将通信复杂度从$O(V)$降至$O(d)$;二是锚点边界的序列打包,从训练序列中采样固定数量的草稿锚点并打包成密集批次,通过token级注意力索引管理打包,避免了标准填充的开销。
生产环境中的硬件感知前缀调度器:直接部署Algorithm 1面临现实基础设施冲突:真实的硬件容量SPS(B)是离散且阶梯式下降的,且动态调度每步token与连续CUDA图重放和零开销调度(ZOS)相冲突。为此,DSpark将调度器调整为异步运行。使用两步前的置信度头输出来近似即将到来的验证容量,当前步候选token仍按最新的累积置信度排序,历史预测仅用于确定动态截断长度(即批次容量限制$K$),将接纳过程转化为动态Top-K选择。为了解决锯齿状SPS悬崖导致的局部最优问题,调度器移除了早停机制,启用了无约束全局搜索。虽然回溯搜索通常会破坏无损保证,但ZOS驱动的异步设计使得截断长度仅依赖于两步前的信息,隔离了当前token的实现,从而形成了因果屏障,在跨越硬件悬崖最大化物理吞吐量的同时保留了精确的目标分布。
高吞吐量与低延迟推理:为了支持单批次内的可变长度查询,推理框架解耦了物理执行与逻辑序列跟踪。在计算内核中,跨不同请求的所有token被展平并作为独立元素同等处理,复杂的序列内依赖通过集成到稀疏注意力实现中的标记张量严格传达。在DeepSeek-V4架构上,仅修改了index-attention和compress内核以支持这种可变长度路由,使动态调度器能够无缝运行而不引入低级执行开销。
实时用户流量下的性能:在DeepSeek-V4-Flash和Pro的生产引擎中,将配置为$\gamma = 5$的DSpark与MTP-1(单token基线)进行比较。在V4-Flash中,在中等SLA(80 tok/s/user)下,DSpark将总吞吐量提高了$51\%$;在严格的SLA(120 tok/s/user)下,MTP-1接近运行边界,DSpark实现了$661\%$的标称吞吐量优势。在匹配的实际吞吐量水平下,DSpark将每用户生成速度提高了$60\%$到$85\%$。在V4-Pro中,DSpark在匹配系统容量下提供了$57\%$到$78\%$的生成速度提升,成功向外推移了吞吐量-交互性边界。负载动态分析表明,在轻负载下,调度器将验证预算从静态2扩展到4-6个token;随着并发扩展,调度器动态限制预算,确保低置信度token在消耗关键容量前被修剪。
结论
本文提出了DSpark投机解码框架,克服了高并发生产环境中LLM推理的结构和系统级瓶颈。在算法上,DSpark引入了半自回归生成范式,将计算繁重的并行主干与轻量级序列头结合,缓解了并行草稿模型的后缀衰减。在系统层面上,将验证长度选择公式化为全局吞吐量最大化问题,采用硬件感知前缀调度器,基于校准的存活概率和实时引擎负载动态调整验证预算。离线评估表明DSpark显著优于基线;其在DeepSeek-V4中的实际部署验证了其智能管理验证开销的能力,在重负载下维持了健壮的并发,一致加速了每用户生成速度,并扩展了LLM服务的帕累托前沿。
附录
无早停机制导致的选择偏差反例:附录A提供了一个反例,说明在没有Algorithm 1中早停条件的情况下进行离线全局搜索,是如何违反无损投机解码所需的非预期(non-anticipating)属性的。假设请求数$R = 1$,最大草稿长度$\gamma = 2$。位置1的置信度$a_1 = 0.8$,容量曲线为$\mathrm{SPS}(1) = 1.0, \mathrm{SPS}(2) = 0.5, \mathrm{SPS}(3) = 0.45$。验证0和1个token的预期吞吐量为$\Theta_0 = 1.0$和$\Theta_1 = 0.9$。如果没有早停,调度器会继续评估$\Theta_2$。由于马尔可夫头依赖于先前采样的token,$c_2$显式依赖于$x_1$的实现,因此$a_2 = a_1 c_2$也依赖于$x_1$。如果$x_1$导致高$c_2$(如0.9),则$a_2 = 0.72$,$\Theta_2 = 1.134$,调度器返回$\ell = 2$;如果$x_1$导致低$c_2$(如0),则$a_2 = 0$,$\Theta_2 = 0.81$,全局最大值为$\Theta_0 = 1.0$,调度器返回$\ell = 0$。因此,第一个草稿token是否被接纳动态依赖于它自身的值,这种回溯依赖引入了选择偏差。早停机制通过在$\Theta_1 < \Theta_0$时立即停止并返回$\ell = 0$,防止了评估依赖于延续的量(如$c_2$),从而恢复了非预期属性。
方法细节中引用的主要参考文献
- 并行草稿模型基线与架构参考:DFlash (Chen等,DFlash: Block diffusion for flash speculative decoding,2026,arXiv)。
- 自回归草稿模型基线参考:Eagle3 (Li等,EAGLE-3: Scaling up inference acceleration of large language models via training-time test,2026,NeurIPS)。
- 投机解码基础验证规则:(Chen等,Accelerating large language model decoding with speculative sampling,2023,arXiv);(Leviathan等,Fast inference from transformers via speculative decoding,2023,ICML)。
- 多模态碰撞与并行生成局限:(Gu等,Non-autoregressive neural machine translation,2018,ICLR);(Huang等,Directed acyclic transformer for nonautoregressive machine translation,2022,ICML)。
- 置信度估计灵感:(Huang等,Specdec++: Boosting speculative decoding via adaptive candidate lengths,2024,arXiv);(Wang等,THE END OF MANUAL DECODING: TOWARDS TRULY END-TO-END LANGUAGE MODELS,2026,ICLR)。
- MoE层架构参考:(Dai等,Deepseekmoe: Towards ultimate expert specialization in mixture-of-experts language models,2024,ACL)。
- 零开销调度(ZOS)参考:(Zheng等,Sglang: Efficient execution of structured language model programs,2024,NeurIPS);(Zhu等,Nanoflow: towards optimal large language model serving throughput,2025,OSDI)。
💬 评论讨论
欢迎在这里分享您的想法和见解!