投机解码不用置信头vLLM 自适应验证怎么估草稿接受率原文vLLM Blog - 《Adaptive Verification Without a Confidence Head》https://vllm.ai/blog/2026-10-14-adaptive-verification-online-estimator一、先把三个词摆清楚做 Agent 或长文本应用的人迟早会撞上同一个瓶颈模型本身不慢慢的是一次请求要吐几千个 token。投机解码是目前最常用的一类加速手段——先用一个便宜的小模型草稿模型drafter一口气猜出若干个 token再让大模型目标模型一次性验证这批 token猜对多少就白赚多少。但验证也要花钱。同一批草稿 token 里有的几乎必被接受有的注定被丢。如果能提前把注定被丢的剪掉目标模型的正向计算就省下一截。这个机制在 vLLM 里叫自适应验证Adaptive Verification简称 AV。它需要知道每个草稿 token 被接受的概率这个概率就是置信分confidence score。于是问题收敛成一句话置信分从哪来。二、置信头好用但不是人人都有DSpark 这类草稿模型通常会自带一个置信头在草稿模型的隐状态上接一个小小的线性层训练成二分类器专门回答目标模型会不会接受这个 token。有头就省事。麻烦的是没头的那些原文点名了 EAGLE、MTP、DFlash以及一部分 DSpark 的 checkpoint。给它们补一个头意味着回头重训草稿模型而在线的成堆 checkpoint 显然不可能一个个重训。所以真正要回答的是在没有置信头的情况下能不能只靠已经算出来的东西现估一个接受概率三、一个标量、一次回归、K1 个参数vLLM 的答案非常省不看隐状态不加网络只用草稿模型自己吐出的一个标量——它最可能 token 的对数几率记作logit(q_max)。直觉是这样草稿模型对当前这步越有把握预测就越可能被目标模型接受。所以草稿模型的自信程度本身就是接受率的可用信号。具体做法是一个逐位置的逻辑回归特征只有一个logit(q_max)也就是草稿分布里最大概率那个 token 的对数几率参数是一根共享斜率 ω加上每个草稿位置各一个截距 βi所以一个能猜 K 个 token 的草稿模型只需要 K1 个参数输出是该位置的估计接受率 p直接当 AV 的置信分用。这里有个容易忽略的取舍为什么不把 q_max 直接当接受概率非要过一遍 logit 再做线性变换因为草稿模型有多自信和目标模型会不会接受不是线性关系用对数几率能把关系拉直。原文的数据也印证了——不拟合、直接用 q_max 时平均预测是 0.784实际观测接受率是 0.723校准误差 0.0736拟合之后这个误差降到 0.0100差了七倍。四、参数是边跑边学的这套东西最漂亮的地方是它不需要任何离线训练数据。ω 和 βi 是在线拟合出来的目标模型在正常验证流程里本来就会给出每个草稿 token 的接受或拒绝这些结果直接当标签。拟合用迭代重加权最小二乘IRLS目标是让预测概率与真实标签之间的对数似然损失最小。工程上有几处设计让它能真的跑在线每固定 N 个 decode step 重新拟合一次区间内只累积 Hessian 和梯度内存上界从原始标签的 O(N×B×K) 压到 O(K²)只用第一个拒绝之前的草稿 token 当标签拒绝之后的位置本来就没有信息量斜率在 K 个位置间共享缓解深位置样本少的标签饥饿问题原文测得共享带来的精度损失只有 0.0002 AUC 和 0.0003 log-loss更新量乘一个 n/(n常数) 的阻尼系数让样本少的深位置更新得更保守。五、选特征的四把尺子原文比较了多个候选特征评判标准值得直接抄下来因为它可以套用到任何预测接受率的场景无损特征会不会在投机解码中让输出分布偏移AUC随机取一个被接受的草稿它分数高于随机一个被拒绝草稿的概率0.5 等于瞎猜log-loss预测概率相对真实接受概率的平均负对数似然越低越好ECE把草稿按预测概率分桶比较桶内平均预测与平均实际频率越低说明这个概率越可信。在约 450 万个标注草稿上的结果里有两个细节很有意思。第一读取实际被采样到的那个 token的概率记作 q_sampled虽然 AUC 更高0.8553但它是有损的剪枝决策一旦依赖被采样的 token 本身输出分布就会偏离目标模型的精确分布破坏投机解码的无损保证因此直接落选。第二最终上线的logit(q_max)拿到 AUC 0.8336、log-loss 0.4284、ECE 0.0100而一个训练过的置信头是 AUC 0.8191、log-loss 0.4449、ECE 0.0052。AUC 和 log-loss 上估计器反而更好一点只有 ECE 略逊。六、它比置信头更耐换场景把第一个草稿位置排除之后再比一次差距更明显估计器 AUC 0.8352、log-loss 0.4420置信头掉到 0.8075、0.4743。原文的解释是置信头在第一个位置领先但从第二个位置起被估计器反超两者在第五个位置之后都开始衰减而 DeepSeek-V4-Flash 的 DSpark 声明的 block size 正好是 5草稿模型从未在更深的位上训练过。更关键的一层在斜率和截距的分工。固定模型对、只换工作负载时斜率几乎不动0.51 到 0.55与草稿平均熵的相关性只有 r−0.08而截距从 0.478 一路变到 −0.089与草稿平均熵的相关性是 r−0.89。换成不同模型对斜率落在 0.45 到 0.59。原文给的解读很干净斜率衡量的是草稿模型有多清楚自己是对的属于模型对与采样方法的固有属性截距吸收的是基础接受率随位置变深而下降遇到不可预测的内容再降一截。这也解释了为什么一根共享斜率 每位置一个截距就够——真正随内容波动的那部分被截距吃掉了。七、在 vLLM 里怎么打开当草稿模型没有置信头、且所有后端都支持变长注意力时估计器会被自动选中。手动开启是在投机配置里加一个开关vllm servetarget_model\--speculative-config{ model: draft_model, method: method, num_speculative_tokens: num_speculative_tokens, draft_sample_method: probabilistic, enable_adaptive_verification: true }几个参数值得点名。enable_adaptive_verification就是这次新增的开关对应 PR #52228。draft_sample_method要设成 probabilistic因为整套接受率推导的前提是草稿 token 按概率分布采样而不是贪心取最大。num_speculative_tokens决定草稿长度同时决定要拟合多少个截距。原文还提醒了两个前提目标模型的注意力后端必须支持变长验证这和 DSpark 早期 AV 的要求一致MTP 与 EAGLE 从 AV 里拿到的好处不如 DFlash、DSpark 多原因是自回归式的投机模型为可能被剪掉的草稿 token付出的起草成本占比更高。八、小结这篇东西值得学的不是某个系数而是它解决问题的姿势不去训练一个新头而是找出一个已经算出来的信号用一个参数极少的模型在线校准它。K1 个参数、每 N 步重拟合、一根共享斜率每一步都在往轻的方向走。放到 Agent 场景也一样。Agent 的推理开销大头往往在长上下文和长输出而投机解码加 AV 正好压这两块当你给自己微调的草稿模型配 AV 时置信头不再是硬门槛。具体参数与默认值请以 vLLM 官方文档和对应 PR 为准模型版本以实际部署的 checkpoint 为准本文未验证最新版本。