Prhub

#34667 Drop the mmlu case from the unified radix cache kit

原始 PR 作者 ispobock 合并时间 2026-08-13 15:16 文件变更 6 提交数 1 评论 3 代码增减 +4 / -32

执行摘要

移除 radix 缓存测试中不可达阈值的 MMLU 用例

PR body 指出 UnifiedRadixTreeTestMixin 捆绑的 MMLU 用例没有消费者信任:7 个使用该 mixin 的文件中,两个在 CI 里跳过(其中 SWA 模型明确标注 mmlu eval not stable enough),四个把阈值降到 0.4 或 0.7,剩余两个用默认 0.8 并刚刚失败:AssertionError: 0.796875 not greater than or equal to 0.8。作者论证这不是回归而是算术问题:num_examples=64 时分数只能是 1/64 的倍数,51/64 = 0.796952/64 = 0.8125,没有任何可达分数等于 0.8,实际门槛被抬高到 0.8125,而 64 题评估的 run-to-run 波动有数个百分点。同一文件的三个 KL 用例全部通过、gsm8k 得分 0.965,MMLU 与 gsm8k 同为粗粒度兜底网且没有独立失败模式,因此选择删除而不是重调阈值。

该 PR 值得一读,但重点不在代码而在 PR body 的论证:它展示了如何识别“不可达阈值”这类测试设计缺陷(num_examples=64 时阈值 0.8 无解),以及测试分层的取舍哲学——精准 KL 守卫 + 粗粒度 gsm8k 兜底的组合。对维护大型 CI 测试套件的工程师有参考价值,尤其是删除而不是反复调阈值、以及通过共享 mixin 一次覆盖所有消费者的做法。不需要对实现做深入代码评审,因为变更只是删除方法、属性和覆盖配置。

讨论亮点

PR 的 review 评论为空,核心讨论集中在 PR body 的自述论证和 issue 评论中的 CI 重跑:

阈值不可达是算术而非回归:51/64 = 0.796952/64 = 0.8125,没有可达分数等于 0.8,实际门槛是 0.8125。

删除而非重调阈值:三个 KL 用例是精准仪器,gsm8k 是粗粒度兜底网,MMLU 是第二张测量同一件事的粗网——在该套件里没有独立失败模式。

针对 /rerun-test,作者说明:

The change is in the shared mixin, so this covers every consumer of it, not only the files edited here.

github-actions 机器人的回复显示重跑结果:4-gpu-h100(4 个测试运行)仍标记失败,4-gpu-b200(1 个测试运行)通过。失败用例的具体归属未在评论区进一步说明,PR 随后由作者合并,推测失败与本次 MMLU 删除无直接关联,归属于既有环境波动或 KL 相关的不稳定。

实现拆解

  1. 共享基座变更:在 python/sglang/test/kits/unified_radix_cache_kit.py 中删除 UnifiedRadixTreeTestMixintest_mmlu 方法(约 20 行)与 mmlu_threshold: float = 0.8 类属性,并将类 docstring 从 gsm8k, mmlu and multi-turn KL tests 改为 gsm8k and multi-turn KL tests。由于这是全部消费者的共享基座,删除后未显式覆盖该用例的文件会自动停止运行 MMLU,无需逐一编辑。
  2. 消费者清理:清理显式关联的 5 个文件——test_unified_radix_cache_kl_swa.py 删除 @unittest.skipIf(is_in_ci(), "SWA model mmlu eval not stable enough") 包装的 test_mmlu 覆盖和 mmlu_threshold = 0.7test_unified_radix_cache_hicache_pp_kl.pytest_unified_radix_cache_kl_cp.py 各删除 mmlu_threshold = 0.7 一行;test_unified_radix_cache_kl_dcp.py 删除 mmlu_threshold = 0.4 一行。这些都是纯删逻辑,避免留下“半转换”的消费者。
  3. 文档同步test_unified_radix_cache_kl_hybrid_bitexact.py 本不继承该 mixin,但其 docstring 提到 mixin 捆绑 gsm8k and mmlu,本次同步更新为只捆绑 gsm8k,防止文档与实现漂移。
  4. 范围边界test_unified_radix_cache_kl_dsv4.py 中的 mmlu_num_threads 配置保留不动,因为该类使用 AccuracyTwoPassMixin(另一套测试 kit),超出本 PR 范围。
  5. CI 验证:没有新增测试;作者通过 /rerun-test 一次性重跑 7 个使用该 mixin 的消费者文件,覆盖共享基座变更的全部影响面。
文件 模块 状态 重要度
python/sglang/test/kits/unified_radix_cache_kit.py 测试套件 modified 5.51
test/registered/radix_cache/unified_radix_tree/test_unified_radix_cache_kl_swa.py SWA 用例 modified 4.85
test/registered/radix_cache/unified_radix_tree/test_unified_radix_cache_kl_hybrid_bitexact.py 比特一致 modified 4.19
test/registered/radix_cache/unified_radix_tree/test_unified_radix_cache_hicache_pp_kl.py PP 用例 modified 3.46
test/registered/radix_cache/unified_radix_tree/test_unified_radix_cache_kl_cp.py CP 用例 modified 3.46
test/registered/radix_cache/unified_radix_tree/test_unified_radix_cache_kl_dcp.py DCP 用例 modified 3.46

关键符号

test_mmlu test_gsm8k test_multiturn_logprobs_match UnifiedRadixTreeTestMixin

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

评论区精华

重跑共享 mixin 的全部消费者 测试

作者在 issue 评论中说明变更位于共享 mixin,因此重跑 7 个消费者文件(kl_swa、kl_cp、kl_dcp、kl_dsv4、kl_full、kl_mamba、hicache_pp_kl),而不只是编辑过的文件。github-actions 机器人回复:4-gpu-h100 上 4 个测试运行标记失败,4-gpu-b200 上 1 个通过。

结论:评论区未进一步定位 h100 失败的具体用例,PR 随后由作者合并,推测失败与本次 MMLU 删除无直接关联,属于既有环境波动;但合并前未看到全绿记录。 · 已合并,失败细节未澄清

删除而不是重调阈值的设计依据 设计

PR body 论证:num_examples=64 时 MMLU 可达分数为 1/64 的倍数,默认阈值 0.8 不可达(实际为 0.8125);三个 KL 用例是精准守卫,gsm8k 是粗粒度兜底网,MMLU 与 gsm8k 重复且没有独立失败模式,因此删除而非反复调阈值。

结论:删除 `test_mmlu` 并清理所有消费者的显式覆盖与跳过,保留 gsm8k + 三个 KL 用例的分层结构。 · 已解决

风险与影响

  1. 测试覆盖收紧:删除 MMLU 后,7 个 unified radix cache 测试配置不再有 MMLU 这层兜底。作者论证它与 gsm8k 重复且无独立失败模式,但若未来 MMLU 恰好能暴露某类缓存回归,将失去这层保护;缓解点在于三个 KL 用例仍是精准守卫。
  2. 共享基座变更的兼容性sglang.test.kits.unified_radix_cache_kit 是仓库内测试基础设施,本次已清理全部显式引用;但仓库外或未来新增消费者若仍引用 mmlu_thresholdtest_mmlu,会触发 AttributeError
  3. CI 状态存疑:重跑结果中 4-gpu-h100 上的 4 个测试运行仍标红,评论未给出失败用例明细,合并前未看到全绿记录。存在与本次变更无关的既有 flake 或环境问题,后续需留意相关 KL/PP/CP/Mamba 测试稳定性。
  4. 无运行时风险:变更不涉及任何产品源码、配置或部署路径,不产生性能、安全或兼容性影响。

变更范围严格限定在测试领域,对最终用户和运行时系统零影响。对 CI 的影响是实质性的:7 个 unified radix cache 测试配置(SWA、HiCache PP、CP、DCP、Mamba、Full 等)不再执行 64 题 MMLU 评估,消除了因阈值不可达和 64 题评估随机波动导致的假红,也节省了每次 CI 中一次简单评估的耗时。对团队而言,共享 mixin 的契约被简化,后续新增消费者不再需要理解 mmlu_threshold 的覆盖语义;代价是失去了 MMLU 这一层粗粒度准确性参考(作者判定与 gsm8k 冗余)。整体影响程度中低,集中在测试维护与 CI 稳定性。

测试覆盖收紧 共享测试基座变更 CI 重跑仍见失败

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论