Prhub

#27156 [XPU CI] Expand stage-a and consolidate stage-b tests into stage-a

原始 PR 作者 arathi-hlab 合并时间 2026-06-04 12:00 文件变更 9 提交数 2 评论 12 代码增减 +68 / -69

执行摘要

整合 XPU CI 测试至单个 stage 以消除重复构建

PR body指出每个stage从零构建Docker镜像,导致CI壁钟时间严重膨胀。通过合并到一个stage-a,消除了重复构建。一旦Docker拉取/推送从注册表到位,stage-b将恢复。

对于 CI 维护者,此整合策略值得关注,但需注意后续启用 stage-b 时务必实现 Docker 镜像缓存(如 registry push/pull),以避免重复构建。本次更改不涉及核心逻辑,可安全合并。

讨论亮点

Gemini-code-assist 机器人在多个测试文件上建议使用结构化的 stagerunner_config 参数替代旧的 suite 参数,但维护者 arathi-hlab 回复指出“stage-name-test-number of gpu-gpu-xpu”是目前遵循的命名模式,未采纳该建议。另外,mingfeima 询问 stage-a 的超时是否需要更新(因为预期 37 分钟),arathi-hlab 回应实际 CI 运行仅 14 分钟,本地估算不准确。

实现拆解

  1. 修改 .github/workflows/pr-test-xpu.yml:注释掉 stage-b 作业,将 finish 作业改为仅依赖 stage-a。
  2. 在 6 个现有测试文件中,将 register_xpu_cisuite 参数从 stage-b-test-1-gpu-xpu 改为 stage-a-test-1-gpu-xpu。涉及文件:test_chunk_gated_delta_rule.pytest_deepseek_ocr.pytest_deepseek_ocr_triton.pytest_intel_xpu_backend.pytest_topk.py
  3. 在 3 个新测试文件中添加 register_xpu_ci 调用,注册到 stage-a:test_sampling_params.py(66 测试)、test_lora_eviction_policy.py(12 测试)、test_adaptive_spec_params.py(11 测试)。
文件 模块 状态 重要度
.github/workflows/pr-test-xpu.yml CI 流水线 modified 5.4
test/registered/unit/sampling/test_sampling_params.py 采样参数 modified 3.88
test/registered/lora/test_lora_eviction_policy.py LoRA 驱逐策略 modified 3.61
test/registered/unit/spec/test_adaptive_spec_params.py 适应推测参数 modified 3.88
test/registered/attention/test_chunk_gated_delta_rule.py 注意层 Delta 规则 modified 3.45
test/registered/xpu/test_deepseek_ocr.py DeepSeek OCR modified 3.41
test/registered/xpu/test_deepseek_ocr_triton.py DeepSeek OCR Triton modified 3.58
test/registered/xpu/test_intel_xpu_backend.py XPU 后端 modified 3.41
test/registered/xpu/test_topk.py TopK modified 3.41

关键源码片段

.github/workflows/pr-test-xpu.yml infrastructure

CI 流水线核心配置,注释掉 stage-b 并调整作业依赖,实现 stage 合并。

# 将 finish 作业改为仅依赖 stage-a
finish:
  needs: [check-changes, pr-gate, stage-a-test-1-gpu-xpu]
  ...# Stage B 被整体注释掉,等待 Docker 缓存机制就绪再恢复
# stage-b-test-1-gpu-xpu:
# needs: [check-changes, pr-gate, wait-for-stage-a]
# if: needs.check-changes.outputs.main_package == 'true'
# runs-on: intel-bmg
# steps:
# ...(原 Docker 构建 + 测试步骤全部注释)
test/registered/lora/test_lora_eviction_policy.py test-coverage

新增 XPU CI 注册,覆盖 12 个 LoRA 驱逐策略测试,是 LoRA 模块首次加入 XPU CI。

# 导入列表中增加 register_xpu_ci
from sglang.test.ci.ci_register import (
    register_amd_ci,
    register_cpu_ci,
    register_cuda_ci,
    register_xpu_ci, # 新增
)
...
register_cpu_ci(est_time=6, suite="base-b-test-cpu")
register_xpu_ci(est_time=10, suite="stage-a-test-1-gpu-xpu") # 将 LoRA 测试加入 XPU stage-a

评论区精华

使用结构化 stage/runner_config 参数替代 suite 参数 style

Gemini-code-assist 机器人在所有修改的测试文件中建议改用 `stage` 和 `runner_config` 参数,并给出了代码建议。

结论:维护者 arathi-hlab 回复解释当前命名模式是 'stage-name-test-number of gpu-gpu-xpu',未采纳建议。mingfeima 也指出机器人评论正确,但最终决定保持现有风格。 · 已解决

stage-a 超时是否需要更新 question

mingfeima 在 pr-test-xpu.yml 中询问是否需要更新 timeout,因为 PR 描述中 stage-a 估计 37 分钟。

结论:arathi-hlab 回应实际 CI 运行仅 14 分钟,本地估时不准确,无需更新超时。 · 已解决

风险与影响

主要风险是将所有测试集中到 stage-a,一旦该 stage 失败则无备用 stage-b 兜底。当前注释掉 stage-b 但未删除,后续需 Docker 缓存机制才能安全恢复两阶段流程。此外,如果 stage-a 运行时间过长,可能影响 CI 整体效率,但实际运行 14 分钟在可接受范围内。

对 XPU CI 开发者而言:测试现在都在 stage-a 运行,消除了重复 Docker 构建,总体壁钟时间缩短。新增的 3 个测试文件(采样参数、自适应推测参数、LoRA 驱逐策略)纳入 XPU CI 覆盖,提高了对 Intel XPU 平台的质量保障。stage-b 被注释但保留,为未来恢复两阶段流水线提供基础。

单点故障:若 stage-a 失败则无备份 注释的 stage-b 代码需要后续清理或恢复

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论