执行摘要
- 一句话:恢复 GB300 CI 任务,nightly、PR 与 DeepGEMM 测试回线
- 推荐动作:值得快速浏览,作为“runner 恢复后如何回滚禁用 CI 的模板”;对源码阅读没有价值。重点关注两点:restartPolicy 对 runner 可用性的保障方法,以及评论中对 EADDRINUSE 的系统性排查(ephemeral 范围、外部占用排除)。不建议精读。
功能与动机
GB300 是 Blackwell 系列重要推理平台,此前因 runner 不可用(个别 pod 丢失、宿主重启后无法恢复)在 #31764 中禁用相关 CI。作者在 PR body 中说明:两个 GB300 runner 已重新上线并携带 4-gpu-gb300 标签,重新创建的 gb300-4-gpu-03 这次使用了 restartPolicy: Always,宿主重启也不会再让它永久离线;并在真实安装路径(GRACE_BLACKWELL=1 ci_install_deepep.sh)上 smoke test 通过,因此可以恢复被禁用的任务。
实现拆解
- 恢复夜间性能套件:在
.github/workflows/nightly-test-nvidia.yml 中取消 nightly-test-perf-4-gpu-gb300 job 的注释,恢复 4 个 model 矩阵(glm5-nvfp4、qwen35-fp8、deepseek-v4-pro-fp4、kimi-k25-nvfp4),并在 workflow 调度列表(on: 事件与 consolidate-metrics 的依赖项)中重新加入该 job。该 job 使用 GRACE_BLACKWELL=1 ci_install_deepep.sh 安装依赖,通过 run_suite.py --hw cuda --suite ... --nightly --continue-on-error 运行,并保留 trace 发布与 coredump 上传步骤。
- 恢复 PR 门禁:在
.github/workflows/pr-test.yml 中恢复 base-c-test-4-gpu-gb300,复用 _pr-test-stage.yml 模板,设置 runner_config: 4-gpu-gb300、单文件超时 1800 秒,并把该 job 加回 pr-test-finish 的 needs 列表,使 GB300 测试重新成为每次 commit 合并前的必过门禁。
- 恢复 wheel 构建:在
.github/workflows/release-whl-deepgemm.yml 中恢复 sm100-aarch64 矩阵项(runner: 4-gpu-gb300),保留 sm120 的注释状态(#32193 的 skip 与本次恢复无关)。
- 配套说明:三个改动均为 workflow 配置,无产品代码、测试或 schema 变更;实际验证依赖 GitHub Actions 的 rerun(
/rerun-test)与两次真实 job 运行。
关键文件:
.github/workflows/nightly-test-nvidia.yml(模块 夜间测试;类别 infra;类型 infrastructure;符号 nightly-test-perf-4-gpu-gb300): 恢复了整个 GB300 夜间性能套件的 job 定义与调度入口,是本 PR 最大的配置恢复,影响 4 个模型矩阵的 nightly 基准。
.github/workflows/pr-test.yml(模块 PR 测试;类别 infra;类型 infrastructure;符号 base-c-test-4-gpu-gb300, pr-test-finish): 恢复 per-commit GB300 测试并把其加入 pr-test-finish 门禁,直接影响每个 PR 的合并质量门槛。
.github/workflows/release-whl-deepgemm.yml(模块 发版构建;类别 infra;类型 infrastructure;符号 sm100-aarch64): 恢复 aarch64 DeepGEMM wheel 的构建矩阵项,低频但影响发版物覆盖。
关键符号:未识别
评论区精华
- alisonshao 第一次 rerun 后,bot 回报
4-gpu-gb300 上 4 个测试中 test_deepseek_v3_cutedsl_4gpu 失败(两次在 torch-dist init 因 EADDRINUSE 退出,端口 39539、39537,exit code -3),其余通过;4-gpu-b200 上 test_numa_utils 通过。
- alisonshao 的归因分析:失败端口落在宿主 ephemeral 范围 32768-60999 内,属于服务器自己端口规划冲突;主机上该范围 0 监听、0 socket 绑定,排除外部占用;
test_flashinfer_a2a 通过说明 NVSHMEM bootstrap 正常。她明确指出这是 main 上 #31731 修复的竞态,与本 PR 无关(本 PR 只取消注释)。
- 第二次 rerun 后,
4-gpu-gb300 4 个测试与 4-gpu-b200 1 个测试全部通过,恢复的 job 在真实 runner 上稳定;reviewer Fridge003 直接 approve。
- 首次 rerun 结果:GB300 测试失败报告 (testing): 失败仅限单个 DeepSeek 4-GPU 测试,其余 GB300 测试(test_numa_utils、test_flashinfer_a2a、test_disaggregation_aarch64)均通过。
- EADDRINUSE 失败归因讨论 (correctness): 确认失败非本 PR 引入,不阻塞恢复 GB300 任务。
- 二次 rerun 验证 (testing): 恢复的 GB300 CI 任务在真实 runner 上稳定通过,Fridge003 approve。
风险与影响
- 风险:
nightly-test-nvidia.yml 的 job 使用 runs-on: 4-gpu-gb300-nightly,body 明确当前没有任何 runner 携带该标签,恢复的 nightly perf suite 会一直排队,直到运维添加标签——这是最直接的配置与资源不匹配风险。
pr-test.yml 将 base-c-test-4-gpu-gb300 重新纳入 pr-test-finish 门禁,若 GB300 runner 再次离线(尽管有 restartPolicy: Always,仍可能因其他原因下线),PR 合并会被 pending 阻塞。
- GB300 上曾出现的
EADDRINUSE 失败被定位为 main 上已存在的端口竞态(get_free_port() 与 ephemeral 端口范围冲突),本 PR 不包含修复,依赖 #31731/#33044 等后续 PR;合入时 main 已含修复,残余风险低。
- 三个 workflow 文件都是纯注释解除与矩阵恢复,没有本地可执行验证手段,只能依赖 Actions 实际运行;一旦 YAML 缩进或 key 错误会静默失效,但已通过 rerun 实测。
- 影响:对用户无运行时影响,整个 PR 仅涉及 CI/CD 配置。对开发者:GB300/Blackwell 相关改动会重新触发 4-gpu-gb300 的 PR 测试;nightly 恢复 4 个模型的 GB300 性能基准(glm5-nvfp4、qwen35-fp8、deepseek-v4-pro-fp4、kimi-k25-nvfp4)。对发布流程:sm100-aarch64 DeepGEMM wheel 重新进入构建矩阵。对团队:恢复 Grace-Blackwell 平台的回归防线,同时需要运维补充 4-gpu-gb300-nightly runner 标签避免夜间任务积压。
- 风险标记:runner 标签不匹配, 夜间任务可能排队, CI 配置无本地验证
关联脉络
- PR #33044 [CI] Pin NCCL ports for GB300 PR tests: 同是 GB300 CI 恢复线上的后续修复合入;本 PR 恢复到 GB300 PR 测试后暴露了 EADDRINUSE 端口冲突,该 PR 通过固定 NCCL 端口消除同类竞争失败,属于同一 CI 功能线的收尾。
参与讨论