# PR #24282 完整报告

- 仓库：`sgl-project/sglang`
- 标题：[CI] Fix nightly NV jobs cancelling each other via shared concurrency groups
- 合并时间：2026-05-03 12:53
- 原文链接：http://prhub.com.cn/sgl-project/sglang/pull/24282

---

# PR 分析报告：修复夜间 CI 作业互相取消问题

## 执行摘要

本 PR 修复了 `nightly-test-nvidia.yml` 中因各作业共享 `concurrency.group` 导致同一硬件系列多个作业互相取消的 bug。通过删除所有 per-job 的 concurrency 块，依赖 runner 标签稀缺性和 `max-parallel` 限制来自然序列化作业，恢复了夜间测试的完整覆盖率。

## 功能与动机

夜间 CI 运行中，每个硬件系列（h100、h200、h20、b200）的所有作业共享同一个 `concurrency.group`（如 `nightly-hw-h100`）。根据 GitHub Actions 文档，并发组只能保留一个待处理作业：当第二个作业排队时，前一个待处理作业会被取消。这导致大量作业在分配 runner 前就被取消，例如 #25261510384 中 24 个 NVIDIA 作业被取消了 18 个，且持续影响多个最近运行（#25239610196、#24944658760、#24866511893）。

## 实现拆解

1. **定位问题**：作者通过分析被取消作业的日志（`started_at` 和 `completed_at` 仅差 1 秒，`runner_name` 为空，`steps_count` 为 0）确认是并发组取消行为。
2. **移除 per-job concurrency 块**：在 `.github/workflows/nightly-test-nvidia.yml` 中删除所有作业下的 `concurrency` 配置（共 48 行），涉及 8 个作业定义。
3. **保留已有防护**：保留 `max-parallel: 2`（限制矩阵作业并发数）和工作流级 `concurrency`（keyed on ref），以及 runner label 稀缺性带来的自然排队。

### 由于变更为纯配置删除，无代码片段展示。

## 评论区精华

无 review 讨论，PR 由作者自行合并。

## 风险与影响

- **风险**：低风险。若 runner 资源充裕，同一硬件家族可能同时运行多个作业导致资源争抢，但现有 `max-parallel: 2` 限制了矩阵作业并发，且 runner label 数量有限，因此风险可控。
- **影响**：仅 CI 基础设施变更，无用户可见影响。修复后夜间测试的所有作业均能正常调度和执行，避免了因并发取消导致的测试覆盖率下降。

## 关联脉络

- 本 PR 回退了 #23314 中添加的 per-job concurrency 配置，同时保留了其引入的 `max-parallel` 和超时调整。
- 与 #24291（保持 CI 中的自定义 sgl-kernel wheel）、#24265（删除 `--prerelease allow` 提升 CI 稳定性）等近期 CI 基础设施改进 PR 同属提升 CI 可靠性的系列工作。