Prhub

#25405 [XPU] Add registry mechanism for XPU CI tests

原始 PR 作者 vshekhawat-hlab 合并时间 2026-05-27 08:56 文件变更 9 提交数 17 评论 23 代码增减 +156 / -22

执行摘要

XPU CI 测试迁移至注册架构,实现分阶段流水线

PR说明指出:XPU CI使用传统的硬编码测试列表(suite_xpu字典),此PR旨在与AMD和Nvidia的注册架构对齐,提高可维护性和可扩展性。

值得相关维护者精读,了解如何将CI测试对接注册体系。对于后续XPU测试的添加,应参照此模式。设计上烟雾测试与主测试分离的思路值得借鉴。

讨论亮点

讨论中主要关注点包括:

  • gemini-code-assist[bot]建议将部分测试移至stage-a以实现烟雾门控,作者解释已有专门的轻量级测试,且stage-b测试较重,设计合理。
  • mingfeima指出finish job仅依赖stage-b可能导致stage-a失败时流水线仍然通过,作者修复了finish job的依赖,加入stage-a检查。
  • Xia-Weiwen怀疑triton安装变动导致CI失败,作者确认未涉及triton包,故障另有原因;随后Xia-Weiwen指出triton索引URL已在其他PR中更新。
  • Xia-Weiwen质疑禁用GDN测试的决定,作者重新检查并启用,测试通过。

实现拆解

  1. 注册后端支持:在python/sglang/test/ci/ci_register.py中添加HWBackend.XPU枚举值和register_xpu_ci()函数,并在REGISTER_MAPPING中注册。
  2. 创建烟雾测试:新增test/registered/xpu/test_xpu_basic.py,注册到stage-a测试集,作为轻量级门控。
  3. 迁移现有测试:将test/srt/xpu/下的三个测试文件移至test/registered/xpu/,并在文件头添加register_xpu_ci()调用,分配至stage-b测试集。
  4. 更新测试套件配置:在test/srt/run_suite.py中清空suite_xpu字典;在test/run_suite.py中添加XPU的硬件映射和per-commit套件定义。
  5. 重构CI工作流:在.github/workflows/pr-test-xpu.yml中将单job拆分为stage-a、wait-for-stage-a、stage-b三个阶段,并修正finish job的依赖关系,确保stage-a失败时正确报告。此外,还将test/registered/attention/test_chunk_gated_delta_rule.py的XPU注册从暂禁状态改为启用。
文件 模块 状态 重要度
test/registered/xpu/test_xpu_basic.py 基础测试 added 6.67
.github/workflows/pr-test-xpu.yml CI 工作流 modified 5.16
python/sglang/test/ci/ci_register.py 注册中心 modified 4.19
test/srt/run_suite.py 测试套件 modified 4.63
test/registered/xpu/test_intel_xpu_backend.py XPU 后端 renamed 4.54

关键符号

register_xpu_ci test_basic_generation

关键源码片段

test/registered/xpu/test_xpu_basic.py test-coverage

新增的 stage-a 烟雾测试,是 XPU CI 门控的关键组成部分,验证基本解码功能。

# Basic XPU test: verifies the server starts and produces a non-empty
# response on Intel XPU with the default attention backend.
# Assigned to stage-a so it gates stage-b before the heavier tests run.
import unittest
from sglang.test.ci.ci_register import register_xpu_ci
from sglang.test.test_utils import (
    DEFAULT_SMALL_MODEL_NAME_FOR_TEST_QWEN,
    CustomTestCase,
    is_in_ci,
    run_bench_one_batch,
)
register_xpu_ci(est_time=300, suite="stage-a-test-1-gpu-xpu")class TestXPUBasic(CustomTestCase):
    def test_basic_generation(self):
        args = ["--device", "xpu", "--disable-radix-cache",
                "--mem-fraction-static", "0.6", "--batch-size", "1"]
        if is_in_ci():
            args += ["--input", "64", "--output", "4"]
        _, decode_throughput, _ = run_bench_one_batch(
            DEFAULT_SMALL_MODEL_NAME_FOR_TEST_QWEN, args
        )
        self.assertGreater(decode_throughput, 0, "XPU decode throughput must be > 0")

评论区精华

烟雾测试空置建议 设计

gemini-code-assist[bot] 建议将 test_intel_xpu_backend.py 移至 stage-a 以形成门控。作者回应已有专用烟雾测试 test_xpu_basic.py,stage-b 测试较重,设计合理。

结论:接受现有设计,无需调整。 · 已解决

finish job 依赖缺陷 正确性

mingfeima 指出 finish job 仅依赖 stage-b,若 stage-a 失败但 stage-b 被跳过则流水线仍可能标记为通过。作者回应并修复了依赖。

结论:修复 finish job,同时依赖 stage-a 和 stage-b。 · 已解决

triton 安装导致 CI 失败 性能

Xia-Weiwen 怀疑安装依赖的变动导致 triton 重装并引起故障。作者确认变更未涉及 triton,故障另有原因。Xia-Weiwen 指出 triton 索引 URL 已在其他 PR 更新。

结论:确认非本 PR 导致,无关。 · 已解决

GDN 测试禁用决策 测试

Xia-Weiwen 质疑禁用 test_chunk_gated_delta_rule.py 的 XPU 注册,要求查明原因。作者重新检查后启用,测试通过。

结论:重新启用测试,确认 Pass。 · 已解决

风险与影响

主要风险包括:新CI流水线的stage-a/stage-b依赖关系可能导致门控失效(已修复);测试文件迁移可能遗漏旧的import或依赖;新增的tabulate等依赖可能引入版本冲突;GDN测试的启用需确保在XPU上稳定。但整体风险可控,因为与AMD方案一致,且经过CI验证。

对XPU开发流程影响较大:测试编写者需遵循注册模式,不再手动修改run_suite.py;CI流水线从单job变为多阶段,总执行时间可能略有增加但门控更精细。对其他硬件后端无影响。团队需知晓新的测试注册规范。

门控依赖风险 测试迁移风险

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论