Prhub

#36242 [CI] Register test_dflash_logits at its real cost

原始 PR 作者 alexnails 合并时间 2026-08-25 09:22 文件变更 1 提交数 2 评论 6 代码增减 +1 / -1

执行摘要

修正 test_dflash_logits.py 的 CI 预估耗时从 1s 至 35s

PR 描述指出 test_dflash_logits.py 注册的 est_time=1,实际在 base-a-test-cpu 上耗时 32 秒,是 CPU 测试套件中耗时与预估比最差的(32 倍低估)。分片分配器在缺少实时统计时会使用该数字,导致过度打包分片并引发分片超时。该问题是在调查 run 32786070189 的分片 7 超时时发现的。

该 PR 为 CI 基础设施微调,值得快速浏览以了解分片预估机制;推荐作为 CI 配置维护的参考。

讨论亮点

无 review 评论或讨论线程;PR 通过 CI 重跑请求验证测试仍通过。

实现拆解

  1. 修改预估耗时:在 test/registered/unit/spec/test_dflash_logits.py 中将 register_cpu_ci(est_time=1, suite="base-a-test-cpu") 改为 est_time=35,这是唯一的代码变更。
  2. 分析耗时根因:耗时主要来自 CPU 上 cold Inductor 编译(涉及 sglang/srt/models/dflash.py 中的 _grouped_conv_score_edges_follow_maps 三个 @torch.compile 函数)。量化测试显示 cold compile 约为 6.51s,两次 cold compile 加上解释器导入开销可复现 32s。
  3. 评估并否决优化方案:尝试了延迟导入 triton kernel 和缩小 block-size 循环,但均无收益;保留编译路径的测试覆盖是合理的,因此选择修正预估耗时而非改动测试。
文件 模块 状态 重要度
test/registered/unit/spec/test_dflash_logits.py 测试注册 modified 3.25

关键源码片段

test/registered/unit/spec/test_dflash_logits.py test-coverage

唯一的变更文件,修正 CI 预估耗时,直接影响分片分配

# test/registered/unit/spec/test_dflash_logits.py
import sys
from types import SimpleNamespaceimport pytest
import torchfrom sglang.srt.models.dflash import (
    CandidateSelector,
    DFlash2DraftModel,
    _grouped_conv,
)
from sglang.srt.speculative.dflash_utils import parse_dflash_draft_config
from sglang.test.ci.ci_register import register_cpu_ci# 修正预估耗时:该测试在 CPU 上需约 32s(主要来自 cold Inductor 编译),
# 之前注册为 1s 导致分片分配器低估其开销,容易引发分片超时。
# 改动仅涉及 est_time,不改变测试逻辑。
register_cpu_ci(est_time=35, suite="base-a-test-cpu")

评论区精华

没有提炼出高价值讨论线程

当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。

风险与影响

无代码逻辑变更,风险极低;但预估耗时 35s 可能仍低估或高估其他硬件/环境下的实际耗时,可能影响分片平衡的精确性。

该 PR 影响 CI 分片分配,使 test_dflash_logits.py 被分配足够时间,减少分片超时风险;对用户功能和运行时性能无影响。

CI 基础设施调优 预估耗时可能随环境变化

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论