Prhub

#27952 Bump spec logprob match delta for the bf16 eagle fixture

原始 PR 作者 hnyls2002 合并时间 2026-06-12 05:21 文件变更 1 提交数 1 评论 3 代码增减 +14 / -4

执行摘要

调高推测解码 logprob 匹配阈值以适应 bf16

PR body 指出,0.255 的阈值是为 fp16 校准的;fixture 迁移至 bf16 后(#27883),decode-vs-prefill 舍入噪声本地达到 ~0.25,CI 上高达 0.36,导致 test_logprob_spec_v2_match 在定时运行中间歇性失败。

此 PR 是常规测试维护,不值得精读,但可关注其阈值设定逻辑作为测试健壮性设计的参考。

讨论亮点

该 PR 无 review 评论。

实现拆解

  1. SpecLogprobKit 类定义中新增类属性 logprob_match_delta = 0.5,并添加注释说明 bf16 噪声特性及与 fp16 的差异。
  2. test_logprob_matchtest_logprob_spec_v2_match 中所有的 self.assertLess(max_diff, 0.255) 替换为 self.assertLess(max_diff, self.logprob_match_delta)
  3. test_logprob_spec_v2_matchassertAlmostEqualdelta=0.255 替换为 delta=self.logprob_match_delta
文件 模块 状态 重要度
python/sglang/test/kits/spec_server_kits.py 测试工具 modified 4.46

关键源码片段

python/sglang/test/kits/spec_server_kits.py test-coverage

这是唯一修改的文件,将硬编码阈值提升为类属性并增大到 0.5,以适配 bf16 精度。

# python/sglang/test/kits/spec_server_kits.py
class SpecLogprobKit:
    """Logprob correctness: start_len, prefill-rescore match, mixed sweep,
    spec-v2 decode-vs-prefill match, and ragged token_ids_logprob."""
​
    # Max |decode-path - prefill-rescore| logprob gap. The two paths run
    # different kernels / batch shapes, so the gap is accumulated rounding
    # noise of the fixture dtype: ~0.25 observed for bf16 (up to 0.36 on
    # some CI runners), ~8x smaller for fp16 (3 extra mantissa bits).
    logprob_match_delta = 0.5
​
    def test_logprob_match(self):
        # ... (omitted)
        diff = np.abs(output_logprobs - output_logprobs_score)
        max_diff = np.max(diff)
        self.assertLess(max_diff, self.logprob_match_delta) # was 0.255
​
    def test_logprob_spec_v2_match(self):
        # ... (omitted)
        max_diff = np.max(np.abs(decode_vals - score_vals))
        print(f"[round {round_idx}] logprob max_diff={max_diff:.6f}")
        self.assertLess(max_diff, self.logprob_match_delta) # was 0.255
        for tid in common_ids:
            self.assertAlmostEqual(
                dec_top[tid], scr_top[tid], delta=self.logprob_match_delta # was 0.255
            )
        for tid in dec_tid:
            self.assertAlmostEqual(
                dec_tid[tid], scr_tid[tid], delta=self.logprob_match_delta # was 0.255
            )

评论区精华

没有提炼出高价值讨论线程

当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。

风险与影响

阈值提升至 0.5 可能掩盖真正的 logprob 回归问题,因为显著的有意义差异(如 kernel bug 导致的 >0.5 偏差)仍会被捕获,但较小偏差(<0.5)将不再触发告警。当前改动合理,因为 bf16 的内在精度限制了更严格阈值的可行性。

仅影响测试框架 spec_server_kits.py 中的一个类,不涉及生产代码。修复了 CI 间歇性失败,提升了测试稳定性。

测试阈值调整 潜在回归掩盖

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

参与讨论