执行摘要
- 一句话:XPU CI测试迁移至注册架构,实现分阶段流水线
- 推荐动作:值得相关维护者精读,了解如何将CI测试对接注册体系。对于后续XPU测试的添加,应参照此模式。设计上烟雾测试与主测试分离的思路值得借鉴。
功能与动机
PR说明指出:XPU CI使用传统的硬编码测试列表(suite_xpu字典),此PR旨在与AMD和Nvidia的注册架构对齐,提高可维护性和可扩展性。
实现拆解
- 注册后端支持:在
python/sglang/test/ci/ci_register.py中添加HWBackend.XPU枚举值和register_xpu_ci()函数,并在REGISTER_MAPPING中注册。
- 创建烟雾测试:新增
test/registered/xpu/test_xpu_basic.py,注册到stage-a测试集,作为轻量级门控。
- 迁移现有测试:将
test/srt/xpu/下的三个测试文件移至test/registered/xpu/,并在文件头添加register_xpu_ci()调用,分配至stage-b测试集。
- 更新测试套件配置:在
test/srt/run_suite.py中清空suite_xpu字典;在test/run_suite.py中添加XPU的硬件映射和per-commit套件定义。
- 重构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(模块 基础测试;类别 test;类型 test-coverage;符号 TestXPUBasic, test_basic_generation): 新增的stage-a烟雾测试,是XPU CI门控的关键组成部分,验证基本解码功能。
.github/workflows/pr-test-xpu.yml(模块 CI工作流;类别 infra;类型 infrastructure): 核心CI工作流变更,实现多阶段流水线,是此次重构的部署体现。
python/sglang/test/ci/ci_register.py(模块 注册中心;类别 test;类型 test-coverage;符号 HWBackend.XPU, register_xpu_ci): 注册中心新增XPU后端支持,是注册架构的核心入口。
test/srt/run_suite.py(模块 测试套件;类别 test;类型 test-coverage): 清理旧的硬编码XPU测试列表,确保不再使用旧方式。
test/registered/xpu/test_intel_xpu_backend.py(模块 XPU后端;类别 test;类型 rename-or-move): 重命名并迁移的测试文件,代表现有测试迁移到注册架构。
关键符号:register_xpu_ci, test_basic_generation
关键源码片段
test/registered/xpu/test_xpu_basic.py
新增的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")
评论区精华
讨论中主要关注点包括:
风险与影响
- 风险:主要风险包括:新CI流水线的stage-a/stage-b依赖关系可能导致门控失效(已修复);测试文件迁移可能遗漏旧的import或依赖;新增的tabulate等依赖可能引入版本冲突;GDN测试的启用需确保在XPU上稳定。但整体风险可控,因为与AMD方案一致,且经过CI验证。
- 影响:对XPU开发流程影响较大:测试编写者需遵循注册模式,不再手动修改run_suite.py;CI流水线从单job变为多阶段,总执行时间可能略有增加但门控更精细。对其他硬件后端无影响。团队需知晓新的测试注册规范。
- 风险标记:门控依赖风险, 测试迁移风险
关联脉络
参与讨论