Prhub

#22049 [Speculative] Support penalty for spec v2 overlap scheduling

原始 PR 作者 YMbmzy 合并时间 2026-04-09 16:59 文件变更 2 提交数 3 评论 9 代码增减 +77 / -0

执行摘要

为 spec v2 重叠调度添加惩罚参数支持,修复验证时忽略惩罚的问题。

PR body指出spec v2 previously ignored frequency_penalty, presence_penalty, repetition_penalty, and logit_bias during verification,导致输出unpenalized。目标关闭issue #11762中的'penalty support'项,以支持重叠调度中的惩罚参数。

建议工程师精读此PR以理解推测解码中惩罚参数的设计实现,特别关注惩罚累积和应用的技术权衡,以及如何通过测试验证多种场景。

讨论亮点

review评论由gemini-code-assist[bot]提出:

  1. prepare_for_decode中只累积最后一个接受token而非所有新接受token,可能导致频率/存在惩罚计数器不准确;
  2. sample中属性名acc_linear_penalties错误(应为acc_additive_penalties),且缩放惩罚未正确应用。从提交历史有'fix'提交,可能已修复这些问题,但未显示具体讨论结论。

实现拆解

关键改动在python/sglang/srt/speculative/eagle_info_v2.py:

  1. 在prepare_for_decode中累积惩罚状态,通过penalizer_orchestrator.cumulate_output_tokens更新计数器;
  2. 在sample中应用惩罚到验证logits,使用repeat_interleave广播累加惩罚、缩放惩罚和logit偏置到(bs * draft_token_num, V)形状。测试文件test/registered/spec/eagle/test_eagle_infer_beta.py新增test_penalty(),模拟并发请求测试多种惩罚组合和max_new_tokens。
文件 模块 状态 重要度
python/sglang/srt/speculative/eagle_info_v2.py speculative modified 8.0
test/registered/spec/eagle/test_eagle_infer_beta.py test modified 5.0

关键符号

prepare_for_decode sample

分析完成后,这里会展示 LLM 生成的相对完整源码片段和详细注释。

评论区精华

惩罚累积逻辑不完整 正确性

review 评论指出 prepare_for_decode 只累积最后一个接受 token,而非所有新接受 token,这可能导致频率惩罚和存在惩罚计数器不准确。

结论:从提交历史看有 'fix' 提交,可能已修复此问题,但未提供细节。 · 已解决

属性名错误和惩罚应用问题 正确性

review 指出 sample 中使用了不存在的属性 acc_linear_penalties,正确应为 acc_additive_penalties,且缩放惩罚未正确应用,可能导致运行时错误或惩罚效果不佳。

结论:可能通过 'fix' 提交修复,但未明确说明。 · 已解决

风险与影响

技术风险包括:

  1. 惩罚累积逻辑不完整(只累积最后一个token),可能影响频率惩罚和存在惩罚的准确性;
  2. 属性名错误(acc_linear_penalties)可能导致运行时AttributeError;
  3. 惩罚应用引入额外计算开销,可能轻微影响性能。风险集中在eagle_info_v2.py的prepare_for_decode和sample函数。

对用户:spec v2推理现在能正确应用惩罚参数,确保输出符合预期惩罚效果,提升一致性和质量。对系统:增强推测解码功能完整性,可能引入微小性能开销。对团队:推动spec v2功能演进,与其他speculative解码特性(如ngram支持)对齐。

惩罚累积不完整 属性名错误风险 性能开销增加

关联 Issue

#11762 [Feature] Overlap Spec Support

完整报告

参与讨论