Prhub

#35238 Exclude multimodal-gen NPU jobs from fast-fail cascade

原始 PR 作者 hhhh1252023 合并时间 2026-08-18 23:48 文件变更 3 提交数 6 评论 2 代码增减 +11 / -1

执行摘要

NPU CI 排除 multimodal-gen 测试的 fast-fail 级联

PR body 说明:NPU PR 测试工作流 pr-test-npu.yml 并行运行 multimodal-gen 测试与 perf/accuracy 测试,后者通过可复用工作流 _npu-single-node-test-stage.yml 实现,其中内联的 Check PR test health 步骤会在同一 run 中其他 job 因 root cause 失败时使当前 job 快速失败。multimodal-gen 测试与 perf/accuracy 测试无依赖关系,其失败不应级联影响 perf/accuracy 结果,因此需要从过滤器中剔除这两个 job。近期多个 multimodal-gen 相关 PR(如 Cosmos3 rollout、LoRA、encoder 并行、safetensors 修复)频繁变动该测试面,失败偶发,容易污染 perf/accuracy 的 CI 信号。

这是一个价值明确的 CI 防御性改进,逻辑直白但模式值得注意:用 health-check 步骤从 GitHub Actions run 内部分离 root cause 失败与级联失败。建议快速浏览两个 workflow 的过滤函数,理解 SGLang NPU CI 的快速失败机制;若后续要扩展,可考虑把 job 名过滤清单收敛为单一常量或配置文件,避免双份维护。

讨论亮点

唯一的 review 评论来自 cherryblo,针对 _npu-single-node-test-stage.yml 第 152 行新增注释,指出 'Modify the comment content.',属于注释措辞层面的风格建议,未涉及技术设计争议。从最终合并版本看,过滤条件与注释均已保留,推断作者按建议微调了注释表述。整个 PR 讨论复杂度低。

实现拆解

  1. 定位过滤入口pr-test-npu.yml 将 multimodal-gen 测试与 perf/accuracy 测试并行调度,perf/accuracy 通过可复用工作流 _npu-single-node-test-stage.yml 实现;该工作流与 _npu-pr-test-stage.yml 中均内联 Check PR test health 步骤,把当前 run 内其他 job 的失败状态与 root cause 失败判定逻辑比对,决定是否快速失败。
  2. 新增过滤分支:在健康检查的过滤函数中,于既有 h20 job 过滤逻辑之后新增分支——当 job 基名匹配 multimodal-gen-test-1-npu-a3multimodal-gen-test-2-npu-a3 时,打印 [health-check] Filtered out multimodal-gen NPU job 日志并返回 false,将该 job 排除出 root cause 失败判定,从而不再级联到 base-c-test-perf-*-npu-a3 / base-c-test-acc-*-npu-a3
  3. 同步修改双份工作流:由于 _npu-pr-test-stage.yml_npu-single-node-test-stage.yml 各维护一份相同的过滤逻辑,两处均加上完全一致的 5 行分支,保证行为一致,避免同一 run 内两种入口出现差异。
  4. 配套注释修正pr-test-npu.yml 中 gsm8k 数据集步骤的注释由 # copy gsm8k dataset 改为 # copy gsm8k dataset from cache,明确数据来自 ~/.cache/modelscope/hub/datasets 缓存目录,无行为变化。
  5. 验证方式:本 PR 无单元测试配套(纯 CI 配置变更);合并前由 sglang-npu-bot 通过 /tag-and-rerun-ci 触发 CI 复跑,最终 CI 状态为 PR Test 通过、PR Test (Extra) 失败,随后接入 main。
文件 模块 状态 重要度
.github/workflows/_npu-single-node-test-stage.yml 工作流 modified 3.59
.github/workflows/_npu-pr-test-stage.yml 工作流 modified 3.59
.github/workflows/pr-test-npu.yml 工作流 modified 2.38

关键符号

Check PR test health 步骤的 root cause 过滤逻辑

关键源码片段

.github/workflows/_npu-single-node-test-stage.yml infrastructure

可复用工作流中的 `Check PR test health` 步骤是 fast-fail 级联的核心实现,本 PR 在此新增 multimodal-gen NPU job 过滤分支,是行为变更的主要落点。

// Check PR test health 步骤的 root cause 过滤核心逻辑(重构示意)
// 内嵌于 NPU 测试工作流,负责从当前 run 的失败 job 中剔除
// 与当前阶段无依赖关系的失败,避免 fast-fail 级联误伤function shouldFilterJob(j) {
  const baseName = j.name.split('/')[0];  // 既有规则:h20 相关 job 失败属于已知环境问题,不当作 root cause
  if (baseName.includes('h20')) {
    core.info(`[health-check] Filtered out h20 job: ${j.name}`);
    return true;
  }  // 新增规则:multimodal-gen NPU 测试与 perf/accuracy 并行且互不依赖,
  // 其失败不应 cascading 到 `base-c-test-perf-*-npu-a3` / `base-c-test-acc-*-npu-a3` 阶段
  if (baseName === 'multimodal-gen-test-1-npu-a3' ||
      baseName === 'multimodal-gen-test-2-npu-a3') {
    core.info(`[health-check] Filtered out multimodal-gen NPU job: ${j.name}`);
    return true;
  }  // 失败步骤本身是 health check 时,说明是级联失败,跳过
  const failedStep = (j.steps || []).find(s => s.conclusion === 'failure');
  if (failedStep &&
      (failedStep.name.includes('check-pr-test-health') ||
       failedStep.name.includes('Check PR test health'))) {
    return true;
  }  return false;
}

评论区精华

新增注释的措辞需修改 style

cherryblo 在 `_npu-single-node-test-stage.yml` 第 152 行新增注释处评论 'Modify the comment content.',认为注释表述可以更准确。

结论:最终合并版本保留了过滤逻辑与注释,推断作者按建议微调了注释表述,未引发技术争议。 · 未确认

风险与影响

  1. job 名称硬编码:过滤条件直接匹配 multimodal-gen-test-1-npu-a3 / multimodal-gen-test-2-npu-a3 两个字符串,若未来重命名 job 或新增第三个 multimodal-gen 测试 job,过滤将静默失效。
  2. 过滤逻辑双份维护_npu-single-node-test-stage.yml_npu-pr-test-stage.yml 各维护一份相同的过滤代码,后续调整需要同步修改两处,存在漂移风险。
  3. fast-fail 保护范围收窄:multimodal-gen 的真实 root cause 失败不再触发 perf/accuracy 快速失败,依赖人工关注失败日志,可能带来少量资源浪费,但换来更稳定的 perf/accuracy 信号。

影响范围限定在 NPU PR 测试流水线:base-c-test-perf-*-npu-a3base-c-test-acc-*-npu-a3 不再因 multimodal-gen 测试失败而级联快速失败,CI 结果更可读、更稳定。对最终用户无任何行为影响;对 SGLang 团队而言减少了 CI 噪声,但 maintainer 需要在被过滤的 job 失败时主动查看原因。附带的 gsm8k 注释修正明确了数据来源,便于后续排查。

job 名称硬编码 过滤逻辑双份维护 fast-fail 保护范围收窄

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论