Prhub

#21804 [Misc] Fix comparator e2e tests: add polars dep + fix dp-attention test

原始 PR 作者 alisonshao 合并时间 2026-04-02 06:44 文件变更 2 提交数 2 评论 6 代码增减 +29 / -4

执行摘要

修复比较器端到端测试:添加 polars 依赖并修正 dp-attention 测试逻辑。

修复比较器端到端测试中的两个缺陷:1) 由于缺少polars依赖,比较器子进程在运行前就因ModuleNotFoundError崩溃,导致测试从未真正执行比较;2) dp-attention测试中的mlp_output维度标注错误,且解码步骤的令牌分布在多个DP rank上,违反了单rank假设。这些问题在之前的dump比较器PR系列(#19274, #19681)中引入但未被发现。

该PR值得快速浏览,特别是对于维护测试基础设施的工程师。关注点:1) 依赖管理的完整性;2) 测试中硬件特定假设(如dp-attention模式)的准确性;3) 允许特定张量比较失败的权衡。

讨论亮点

无review评论,但PR body中详细说明了修复原因和测试计划,并通过多个CI运行链接验证了修复效果。

实现拆解

实现分为两部分:1) 在python/pyproject.toml的test依赖组中添加polars包,确保比较器模块能正常导入;2) 在test/registered/debug_utils/test_engine_dumper_comparator_e2e.py中修正dp-attention测试:将mlp_output的dims从't h # tp:replicated'改为't h[moe_tp:partial] # tp:replicated',添加--end-step 0参数限制比较到预填充步骤,并添加--allow-failed-pattern mlp_output允许mlp_output比较失败。

文件 模块 状态 重要度
python/pyproject.toml 依赖管理 modified 5.0
test/registered/debug_utils/test_engine_dumper_comparator_e2e.py 测试框架 modified 6.0

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

关键符号

test_dp_attention _run_e2e_scenario

评论区精华

测试依赖缺失 正确性

比较器模块需要 polars 但未在依赖中声明,导致测试提前崩溃。

结论:在 python/pyproject.toml 的 test 依赖组中添加 polars。 · 已解决

dp-attention 测试逻辑错误 正确性

mlp_output 维度标注错误且解码步骤违反单 DP rank 假设。

结论:修正维度标注,限制比较到预填充步骤,并允许 mlp_output 失败。 · 已解决

风险与影响

风险较低:1) 依赖添加仅影响测试环境,不改变运行时行为;2) 测试逻辑修正使比较更准确,但允许mlp_output失败可能掩盖潜在问题;3) 限制比较到预填充步骤可能遗漏解码步骤的回归。

影响范围限于测试基础设施:修复后比较器端到端测试能正常运行,有助于发现未来代码变更引入的回归问题。对用户和系统无直接影响,但提升了测试覆盖的可靠性。

测试逻辑修正 依赖管理

关联 Issue

未识别关联 Issue

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

完整报告

执行摘要

该PR修复了比较器端到端测试中的两个关键缺陷:添加缺失的polars依赖解决了测试提前崩溃问题,并修正了dp-attention测试中的维度标注和步骤限制逻辑。这些修复确保了测试能够实际运行并正确验证功能,提升了测试基础设施的可靠性,对系统运行时无直接影响。

功能与动机

修复比较器端到端测试中的长期缺陷:由于比较器模块(sglang.srt.debug_utils.comparator)在顶层导入polars,但该依赖从未添加到任何依赖组中,导致测试在运行比较前就因ModuleNotFoundError崩溃。同时,dp-attention测试中存在逻辑错误:mlp_output的维度被错误标注为已全部归约,而实际上在转储点仍为部分状态;且解码步骤的令牌分布在多个DP rank上,违反了单rank假设。这些问题在之前的dump比较器PR系列(#19274, #19681)中引入但一直未被发现,因为依赖缺失导致测试从未真正执行比较。

实现拆解

实现分为两个关键文件修改:

  1. 依赖修复(python/pyproject.toml):

    test = [
      "pandas",
      "parameterized",
      "peft>=0.18.0",
    + "polars",
      "pytest",
      "pytest-cov",
      "diff-cover",
    ]
    

    添加polars到test依赖组,确保比较器模块能正常导入。

  2. 测试逻辑修正(test/registered/debug_utils/test_engine_dumper_comparator_e2e.py):

    • 将mlp_output的dims从't h # tp:replicated'改为't h[moe_tp:partial] # tp:replicated',反映MLP输出在转储点仍为部分状态(归约分散在postprocess_layer()中发生)。
    • test_dp_attention中添加extra_comparator_args参数:
      extra_comparator_args=[
          "--end-step",
          "0",
          "--allow-failed-pattern",
          "mlp_output",
      ]
      

      限制比较到步骤0(预填充),避免解码步骤中多DP rank导致的比较错误;并允许mlp_output比较失败,因为FusedMoE调度器组合路径可能包含隐式全部归约。

评论区精华

无review评论,但PR body中提供了详细的修复说明和测试验证链接:

这些bug在dump比较器PR系列(#19274, #19681)中引入但从未被发现,因为缺失的polars依赖在比较运行前就使比较器子进程崩溃。

作者通过多个CI运行链接(如https://github.com/sgl-project/sglang/actions/runs/23853524625/job/69540028112)验证了修复后测试通过。

风险与影响

风险

  • 依赖添加仅影响测试环境,无运行时风险。
  • 测试逻辑修正使比较更准确,但允许mlp_output失败可能掩盖FusedMoE调度器的潜在问题。
  • 限制比较到预填充步骤可能遗漏解码步骤的回归,需后续测试补充。

影响

  • 直接影响测试基础设施,确保比较器端到端测试能正常运行,有助于发现未来代码变更引入的回归。
  • 对用户和系统无直接影响,但提升了测试覆盖的可靠性。

关联脉络

该PR与历史PR #19274和#19681关联,这些PR引入了dump比较器功能但未正确处理依赖和测试逻辑。从近期PR分析看,该仓库频繁进行测试基础设施的维护和修复(如#21873添加网络超时、#21830修复CI稳定性),表明团队重视测试可靠性。本次修复延续了这一趋势,解决了长期存在的测试缺陷,为后续功能开发提供了更稳定的验证基础。

参与讨论