Prhub

#22136 [CI] Lower GSM8K baselines for B200 nightly after eval unification

原始 PR 作者 Kangyan-Zhou 合并时间 2026-04-23 13:30 文件变更 3 提交数 2 评论 4 代码增减 +11 / -2

执行摘要

修复 B200 夜间测试因评估统一导致的 GSM8K 准确性基线问题。

PR #21667统一了GSM8K评估路径,但引入了两个问题:

1) FP8 MOE后端因旧评估包含少量样本泄露导致分数虚高约4%,新评估分数降至0.905-0.925,原基线0.93过高;
2) FP4 DeepSeek-R1因新评估默认使用Chat API且缺少样本数限制,分数从0.975降至0.86。需调整测试基线以反映真实准确性,避免CI失败。

该PR值得快速浏览,以了解评估统一后的测试适配模式;重点关注AccuracyTestParams扩展api字段的设计,以及如何通过配置修复因评估方法变更导致的测试失败。

讨论亮点

review中主要讨论了测试一致性和潜在遗漏:

  • gemini-code-assist[bot]指出FlashinferTrtllmGenMoeBackendMXFP8Base(使用mxfp8量化)可能同样受评估统一影响,建议将其基线也从0.93更新至0.89以避免CI失败。
  • 建议增强一致性:推荐在DeepSeek-R1测试中显式设置num_threads=128以匹配其他后端测试配置。
  • 决策结论:PR已合并,但FlashinferTrtllmGenMoeBackendMXFP8Base的基线未调整,可能存在后续CI风险。

实现拆解

  1. 扩展测试框架支持API参数:在python/sglang/test/accuracy_test_runner.py中,为AccuracyTestParams数据类添加api字段(可选"chat"或"completion"),并在_run_simple_eval函数中新增api参数,将其传递给评估后端,以控制评估使用的API模式。
  2. 调整FP8 MOE后端基线阈值:在test/registered/backends/test_flashinfer_trtllm_gen_moe_backend.py中,将test_gsm8k方法的断言阈值从0.93降至0.89,匹配新评估方法下的实际分数范围(0.905-0.925)。
  3. 修复FP4 DeepSeek-R1测试配置:在test/registered/perf/test_dpsk_v3_fp4_4gpu_perf.py中,为AccuracyTestParams添加num_examples=200api="completion",确保评估使用正确的API并限制样本数,恢复基线0.935。
  4. 测试配套调整:所有变更均为测试文件修改,无源码主路径改动,旨在确保夜间CI测试通过,不涉及功能逻辑变更。
文件 模块 状态 重要度
python/sglang/test/accuracy_test_runner.py 测试框架 modified 4.68
test/registered/perf/test_dpsk_v3_fp4_4gpu_perf.py 性能测试 modified 4.06
test/registered/backends/test_flashinfer_trtllm_gen_moe_backend.py 后端测试 modified 3.65

关键符号

AccuracyTestParams _run_simple_eval run_accuracy_test test_gsm8k

关键源码片段

python/sglang/test/accuracy_test_runner.py test-coverage

核心测试框架扩展,新增 API 参数支持,影响所有准确性测试的配置传递。

@dataclass
class AccuracyTestParams:
    """Parameters for accuracy testing."""
​
    dataset: str # e.g., "mgsm_en", "gsm8k", "mmmu", "gpqa"
    baseline_accuracy: float # Required: minimum accuracy threshold
    num_examples: Optional[int] = None
    num_threads: Optional[int] = None
    max_tokens: Optional[int] = None
    return_latency: bool = False
    thinking_mode: Optional[str] = None # e.g., "deepseek-v3"
    temperature: Optional[float] = None
    top_p: Optional[float] = None
    top_k: Optional[int] = None
    repeat: Optional[int] = None
    api: Optional[str] = None # 新增字段:控制评估 API 模式,可选 "chat" 或 "completion",默认在 run_eval 中为 "chat"
​
​
def _run_simple_eval(
    model: ModelLaunchSettings,
    base_url: str,
    dataset: str,
    num_examples: Optional[int] = None,
    num_threads: Optional[int] = None,
    max_tokens: Optional[int] = None,
    return_latency: bool = False,
    thinking_mode: Optional[str] = None,
    temperature: Optional[float] = None,
    top_p: Optional[float] = None,
    top_k: Optional[int] = None,
    repeat: Optional[int] = None,
    api: Optional[str] = None, # 新增参数:接收 API 模式配置
) -> Tuple[bool, Optional[str], Optional[dict]]:
    """Run evaluation using simple_eval backend (run_eval.py)."""
    process = None
    try:
        process = popen_launch_server(
            model.model_path,
            base_url,
            other_args=model.extra_args,
            timeout=model.launch_timeout or DEFAULT_TIMEOUT_FOR_SERVER_LAUNCH,
            env=model.env,
        )
​
        args = SimpleNamespace(
            base_url=base_url,
            model=model.model_path,
            eval_name=dataset,
            num_examples=num_examples,
            num_threads=num_threads or 1024,
        )
​
        if api is not None: # 将 API 参数传递给评估后端
            args.api = api
        # ... 其他参数处理逻辑

评论区精华

FP8 MOE 后端基线一致性 正确性

gemini-code-assist[bot] 指出 FlashinferTrtllmGenMoeBackendMXFP8Base 可能同样受评估统一影响,建议更新其基线以避免 CI 失败。

结论:PR 未调整该基线,可能存在后续测试失败风险。 · unresolved

测试参数一致性建议 测试

建议在 DeepSeek-R1 测试中添加 num_threads=128 以匹配其他后端测试配置。

结论:PR 未采纳此建议,但核心问题已通过 num_examples 和 api 修复。 · 已解决

风险与影响

  1. 回归风险低:变更仅影响测试断言和配置,不修改核心业务逻辑。
  2. 兼容性风险:新增api字段向后兼容,但依赖方需注意默认值从"chat"变为可配置。
  3. 测试覆盖风险FlashinferTrtllmGenMoeBackendMXFP8Base基线未更新,可能导致未来CI失败。
  4. 性能风险无:纯测试调整,不影响运行时性能。
  1. 对用户影响:无直接影响,仅夜间测试通过性改善。
  2. 对系统影响:确保B200夜间测试准确反映模型性能,避免误报失败。
  3. 对团队影响:减少CI噪音,但需关注未调整基线的潜在测试失败。
测试基线未完全覆盖 配置依赖变更

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论