执行摘要
调高推测解码 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 评论。
PR body 指出,0.255 的阈值是为 fp16 校准的;fixture 迁移至 bf16 后(#27883),decode-vs-prefill 舍入噪声本地达到 ~0.25,CI 上高达 0.36,导致 test_logprob_spec_v2_match 在定时运行中间歇性失败。
此 PR 是常规测试维护,不值得精读,但可关注其阈值设定逻辑作为测试健壮性设计的参考。
该 PR 无 review 评论。
SpecLogprobKit 类定义中新增类属性 logprob_match_delta = 0.5,并添加注释说明 bf16 噪声特性及与 fp16 的差异。test_logprob_match 和 test_logprob_spec_v2_match 中所有的 self.assertLess(max_diff, 0.255) 替换为 self.assertLess(max_diff, self.logprob_match_delta)。test_logprob_spec_v2_match 中 assertAlmostEqual 的 delta=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 链接,后续同步到相关引用后会出现在这里。
参与讨论