Prhub

#52659 [CI] Standardize test job labels by device

原始 PR 作者 khluu 合并时间 2026-08-19 03:50 文件变更 35 提交数 2 评论 2 代码增减 +268 / -210

执行摘要

统一 Buildkite 测试作业标签为设备优先格式

PR body 明确提出标准化目标:Standardize Buildkite test-area labels on a device-first format: :<vendor>: (<Device>) <Purpose> [Shard %N]。此前标签以用途开头、设备信息隐含或缺失,且 AMD 镜像标签恒为派生的 AMD: <label> (<device>);源标签改为 :nvidia: 前缀后,AMD 作业会错误渲染为 AMD: :nvidia: H200 … (mi300_1)。因此配套 ci-infra#478 引入 mirror.amd.label 可选字段、vllm-dashboard#67 保证仪表盘分组不出现冷缓存缺口,本 PR 为执行主体。

值得精读 PR body 及其关联的 vllm-dashboard#67 与 ci-infra#478 两个跨仓库 issue,完整案例展示了「命名迁移」如何通过跨仓库契约(label 格式、verbatim 覆盖、dashboard 兼容)平滑落地;对 CI 标签有深度定制需求的读者可借鉴其唯一性校验与发布顺序设计。后续在 .buildkite/test_areas 新增或修改作业时,应遵循 :<vendor>: (<Device>) <Purpose> [Shard %N] 约定并注意标签唯一性。

讨论亮点

该 PR 没有实质性的代码评审讨论:review_comments_count 为 0,评论区仅有 claude[bot] 的模板提示和 /ci run 触发记录(Buildkite #84290)。真正的设计决策记录在 PR body 与两个关联跨仓库 issue 中:

  • AMD 镜像标签机制(ci-infra#478):从派生式 AMD: <label> (<device>) 改为可选的 mirror.amd.label verbatim 覆盖,避免源标签的 :nvidia: 前缀泄漏到 AMD 作业。
  • dashboard 分组兼容(vllm-dashboard#67):识别新旧两种 AMD 格式、保留历史 seed 别名、等待最新映射再响应分组接口,消除冷缓存缺口。
  • 重复标签唯一性:四对标签通过限定词区分,属于命名层面的手动约定,无自动化护栏。

实现拆解

  1. 确定命名约定:将全部主标签从「用途优先」改为「设备优先」格式 :<vendor>: (<Device>) <Purpose>。例如 models_multimodal.yaml"Multi-Modal Models (Standard) 1: qwen2" 改为 ":nvidia: (H200) Multimodal Models (Standard) 1: qwen2"lm_eval.yaml"LM Eval Small Models" 改为 ":nvidia: (H200) LM Eval Small Models";CPU 作业统一使用 :computer: (CPU) 前缀,如 "Multi-Modal Processor (CPU) %N" 改为 ":computer: (CPU) Multimodal Processor Shard %N"。设备名由 step 的 device 字段推导:h200_18gb(H200)mi300_1(MI300)b200-k8s(B200),40 个无显式 device 字段的作业按 ci-infra 队列映射标注为 (L4)
  2. 为 AMD 镜像作业新增显式标签:所有带 mirror.amd 的 step 在 mirror.amd 下新增 label 字段,格式为 ":amd: (MI3xx) <同源 purpose>"。该字段依赖已合入的 ci-infra#478 语义——存在时 verbatim 作为镜像 job 的显示标签,缺省时行为与旧版 AMD: <label> (<device>) 派生逻辑逐字节一致,且 NVIDIA 侧标签永不受影响。58 个 AMD 覆盖 models_multimodal.yamllm_eval.yamldisaggregated.yamlkernels.yamlspec_decode.yamlengine.yaml 等文件。
  3. 处理并行与唯一性:所有带 parallelism 的作业将 label 中的 %N 改写为 Shard %N(如 kernels.yaml"Kernels Attention Test %N"":nvidia: (L4) Attention Kernels Shard %N"),使 Buildkite 展开后的 job 名与渲染结果完全对应。去掉设备后缀后出现四对重复标签,通过简明 purpose 限定词区分:Basic/Extended(distributed.yaml 的 DP 测试)、DP + EP/Distributed FeaturesFP8 MoE Kernels/DeepEP FP8 MoE Kernels(kernels.yaml)、Medium/Large,保证 268 个逻辑标签全局唯一。
  4. 校验与发布顺序:PR body 记录了完整验证手段——对所有变更 YAML 做结构对比(剔除 label 字段后与 origin/main 完全一致)、校验 vendor/device/shard 格式与逻辑级/展开级双重唯一性、block-key 字符约束([A-Za-z0-9_-]+)、渲染 Buildkite build#84295 全量 pipeline 并逐一比对等。发布顺序为 vllm-dashboard#67 → ci-infra#478 → 本 PR,三者构成同一命名迁移的跨仓库契约。
文件 模块 状态 重要度
.buildkite/test_areas/models_multimodal.yaml 测试编排 modified 4.86
.buildkite/test_areas/lm_eval.yaml 测试编排 modified 4.8
.buildkite/test_areas/disaggregated.yaml 测试编排 modified 4.77
.buildkite/test_areas/kernels.yaml 测试编排 modified 4.7
.buildkite/test_areas/models_language.yaml 测试编排 modified 4.6
.buildkite/test_areas/spec_decode.yaml 测试编排 modified 4.59

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

评论区精华

AMD 镜像作业的显式标签机制 设计

ci-infra#478 提出:设备优先命名下,AMD 镜像作业不能继续派生 `AMD: <label> (<device>)`,否则会渲染为 `AMD: :nvidia: H200 … (mi300_1)`。

结论:采用可选的 `mirror.amd.label` 字段:存在时 verbatim 使用,缺省时行为与旧版逐字节一致,NVIDIA 侧 label 永不受影响。 · 已解决

dashboard 冷缓存分组缺口 设计

vllm-dashboard#67:dashboard 后台刷新的是精确 label,仅识别 `AMD: ` 前缀的旧镜像名;新 `:amd: ` 前缀会从分组视图中消失。

结论:dashboard 等待加载最新 test-area 映射后再响应分组接口、保留历史 seed 别名、同时识别 `AMD: ` 与 `:amd: ` 两种格式。 · 已解决

并行作业标签唯一性约束 设计

去掉设备后缀后出现四对重复标签,需保证 268 个逻辑标签唯一且 Buildkite 展开后全部 job 名唯一。

结论:用限定词区分:Basic/Extended、DP + EP/Distributed Features、FP8 MoE Kernels/DeepEP FP8 MoE Kernels、Medium/Large;并行模板统一为 Shard %N。 · 已解决

缺少实质 review 评论 other

该 PR 仅有 claude[bot] 的模板提示与 `/ci run` 触发评论,无人工设计争议;合规性由作者自验证与跨仓库 issue 背书。

结论:无未解决疑虑;建议合入后观察 dashboard 分组与 AMD 标签实际渲染效果。 · 已解决

风险与影响

  1. 隐式设备映射强耦合:40 个无显式 device 字段的作业统一标注为 :nvidia: (L4),依赖 ci-infra 队列到设备的映射保持稳定;若队列映射调整,标签会与实际硬件失配。
  2. 跨仓库前置依赖:新标签对 AMD 作业的渲染依赖 ci-infra#478 的 mirror.amd.label 语义。若该基础设施版本未同步部署,回退逻辑仍可工作(无 label 时沿用旧派生行为),但可能短暂出现 AMD 作业带 :nvidia: 前缀的渲染错误。
  3. 唯一性依赖人工约定:268 个标签唯一性靠限定词和命名规范维持,新增测试作业时若沿用相同 purpose 可能产生冲突,当前无自动检测(仅本次一次性校验)。
  4. 外部工具匹配失效风险:按旧 label 精确匹配的脚本、Slack 通知或 dashboard 过滤器可能受影响;PR 仅确认了 host-side fast-CI reporter 按 job UUID 去重不受影响,其余外部消费者未逐一排查。

影响范围集中在 CI 可视化与工具链:Buildkite 作业显示名、dashboard 分组与过滤器、历史 job 检索的 label 语义全部变化;对 vLLM 运行时行为、性能、模型推理或用户 API 零影响。收益层面,设备优先命名让跨 NVIDIA/AMD/CPU 的 CI 状态一眼可读,为后续按硬件筛选、资源归因和 dashboard 分组提供统一基础。受影响的直接人群是维护 CI 的团队与依赖 job 标签做统计的外部脚本作者,需要同步更新匹配规则。

CI 显示标签与设备映射强耦合 跨仓库前置依赖 标签唯一性靠人工约定维护 外部按 label 匹配的工具可能失效

关联 Issue

#478 Allow AMD mirrors to declare their own display label
#67 Preserve dashboard grouping across CI label renames

完整报告

参与讨论