Prhub

#21667 Unify GSM8K eval path to Chat API for regression CI readiness

原始 PR 作者 hnyls2002 合并时间 2026-04-02 08:12 文件变更 79 提交数 55 评论 2 代码增减 +1349 / -1359

执行摘要

统一 GSM8K 评估路径到 Chat API,支持 CI 回归测试。

根据PR body和关联Issue #21046,SGLang当前有8个独立的评估系统,导致代码重复和维护负担。GSM8K有5个不同实现,本次变更旨在统一路径,作为Phase 1 of #21157(基于回归的CI检查)的一部分,实现自动dump_metric覆盖,以支持历史基线比较而非静态阈值。

建议技术管理者精读此PR,因为它展示了评估基础设施的统一设计决策,如API参数抽象和向后兼容处理。工程师可关注run_eval.py中的CompletionSampler扩展和测试迁移模式,以理解如何平滑过渡遗留系统。

讨论亮点

由于没有review评论,讨论亮点主要从commit历史中提取。关键决策包括:1. 兼容性处理:为AMD/NPU测试保留few_shot_gsm8k文件并添加弃用警告,确保团队可逐步迁移(commit '66d15c8f')。2. API设计:在run_eval.py中使model参数可选以支持服务器自动检测,并设置Completion API默认停止词匹配旧行为(commit '329e49d7'和'dfbedab7')。3. 迁移迭代:多次修复参数错误和模型切换,如调整MooncakeSpec测试阈值和线程数(commit '50516fd7'、'2623be53')。

实现拆解

实现分为框架层和测试迁移两大部分。框架层:1. accuracy_test_runner.py移除_run_few_shot_eval函数,将GSM8K评估路由至run_eval;2. run_eval.py使model参数可选(通过getattr),并为Completion API添加默认停止词["Question", "Assistant:", "<|separator|>"];3. eval_accuracy_kit.py更新GSM8KMixin使用新参数格式(base_url、eval_name="gsm8k"、api="completion");4. few_shot_gsm8k.py和few_shot_gsm8k_engine.py添加弃用警告。测试迁移:约72个NVIDIA测试文件从导入few_shot_gsm8k改为run_eval,参数从host/port格式转换为base_url/eval_name格式,指标键从accuracy改为score,阈值保持不变。AMD/NPU测试保留旧路径通过弃用警告处理。

文件 模块 状态 重要度
python/sglang/test/accuracy_test_runner.py test-infrastructure modified 7.0
python/sglang/test/run_eval.py test-infrastructure modified 8.0
python/sglang/test/kits/eval_accuracy_kit.py test-kits modified 6.0

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

关键符号

run_eval (from sglang.test.run_eval) GSM8KMixin.test_gsm8k _run_few_shot_eval (removed)

评论区精华

AMD/NPU 测试兼容性决策 设计

在 commit 历史中决定保留 few_shot_gsm8k 文件并添加弃用警告,而非强制迁移 AMD/NPU 测试,以避免破坏现有工作流。

结论:保持向后兼容,允许团队逐步迁移,减少短期风险。 · 已解决

风险与影响

技术风险:1. 回归风险:大规模测试文件修改(79个文件)可能引入参数错误或逻辑偏差,特别是在指标键名从accuracy改为score的转换中。2. 兼容性问题:AMD/NPU测试仍使用旧路径,可能导致团队间代码不一致和长期维护负担。3. 性能影响:新Chat API路径可能引入额外延迟,但PR声称行为一致,需验证dump_metric开销。4. 测试覆盖:尽管启用了dump_metric,但需确保所有迁移后的测试正确调用,避免遗漏指标收集。

影响范围:1. 对用户:测试行为保持不变,准确性阈值未变,但开发者需注意弃用警告并计划迁移AMD/NPU代码。2. 对系统:统一评估入口点简化维护,减少代码重复,为CI回归测试(Phase 2+)奠定基础,提升测试可观测性。3. 对团队:促进测试基础设施标准化,但需要AMD/NPU团队配合迁移,可能短期内增加跨团队协调成本。影响程度中等,涉及广泛测试但核心逻辑未变。

广泛测试迁移 API 变更风险 团队间不一致

关联 Issue

#21046 Consolidate fragmented evaluation systems
#21157 [CI Infrastructure] Roadmap: Regression-Based CI Checks

完整报告

执行摘要

本次PR将三个独立的GSM8K评估实现统一至单一入口点run_eval.py,通过Chat API的Completion接口路由,为所有NVIDIA测试文件启用dump_metric自动覆盖(包括得分、延迟、输出吞吐量)。这是CI回归测试基础设施的关键第一步,旨在消除代码冗余、提升测试可观测性,同时保持行为与旧实现完全一致。变更涉及79个文件,大量测试迁移,但AMD/NPU路径通过弃用警告保留以确保兼容性。

功能与动机

SGLang当前存在8个独立的评估系统(Issue #21046),导致显著的代码重复和维护负担。以GSM8K为例,竟有5个不同实现,包括few_shot_gsm8k.pysimple_eval_gsm8k.pyfew_shot_gsm8k_engine.py,各有不同的接口和指标收集能力。PR body明确指出:“After this PR: one entry point (run_eval), one args format, one set of metric keys, same Completion API behavior.” 这直接支持Issue #21157中“基于回归的CI检查”的Phase 1,为后续自动基线比较奠定基础。

实现拆解

框架层变更

文件 关键改动 目的
accuracy_test_runner.py 删除_run_few_shot_eval函数,移除GSM8K特殊路由 将GSM8K评估统一至run_eval路径
run_eval.py 使model参数可选(getattr(args, "model", None)),为Completion API添加默认停止词 支持服务器自动检测并匹配旧行为
eval_accuracy_kit.py 更新GSM8KMixin.test_gsm8k使用新参数:base_urleval_name="gsm8k"api="completion" 统一Mixin接口,影响众多测试类
few_shot_gsm8k.py 添加DeprecationWarning,提示迁移至run_eval 提供平滑过渡,保留AMD/NPU使用

测试迁移

约72个NVIDIA测试文件完成以下转换:

  • 导入从from sglang.test.few_shot_gsm8k import run_eval改为from sglang.test.run_eval import run_eval
  • 参数从SimpleNamespace(host=..., port=...)转为SimpleNamespace(base_url=..., eval_name="gsm8k", api="completion", ...)
  • 指标键从metrics["accuracy"]转为metrics["score"]
  • 所有准确性阈值保持不变,确保评估结果一致

评论区精华

由于没有正式review讨论,但从55次commit历史中可提炼关键设计交锋:

兼容性权衡:在commit '66d15c8f'中,作者决定“Keep few_shot_gsm8k files for AMD/NPU tests, add deprecation warnings”,这反映了对团队自主权的尊重——AMD和NPU测试由各自团队维护,不在此次PR中强制迁移,避免了破坏性变更。
API细节优化:commit 'dfbedab7'添加了max_tokens=512和默认停止词["Question", "Assistant:", "<|separator|>"]到Completion API,以确保与旧few_shot_gsm8k.py行为完全匹配,体现了对边缘用例的细致处理。

风险与影响

技术风险

  1. 回归风险:大规模文件修改可能引入参数错误,例如遗漏base_url设置或model属性缺失(commit '6db5913b'曾修复此类问题)。
  2. 性能偏差:新的Chat API路径可能引入额外网络开销,尽管PR声称行为一致,但需在CI中监控dump_metric收集的延迟指标。
  3. 兼容性裂痕:AMD/NPU测试保留旧路径,长期可能加剧代码分歧,增加跨平台维护成本。

影响评估

  • 正面:统一入口点减少代码重复,为CI回归测试提供标准化指标收集,提升团队效率。
  • 负面:短期需AMD/NPU团队响应弃用警告进行迁移,否则可能错过dump_metric覆盖。
  • 范围:影响所有NVIDIA测试的GSM8K评估,但对最终用户透明。

关联脉络

本PR是更大基础设施演进的一部分:

  • 直接关联Issue:#21046(整合碎片化评估系统)和#21157(回归CI检查路线图),本PR实现了两者的初期目标。
  • 历史PR趋势:近期PR如#21873(添加评估数据集下载超时)和#21830(修复CI测试稳定性)显示项目正加强CI可靠性,而本PR的dump_metric覆盖是这一趋势的延续。
  • 未来方向:统一GSM8K路径后,预计类似变更将扩展至MMLU、MMMU等其他数据集,逐步实现评估系统的全面标准化。

参与讨论