Prhub

#36814 xpu: move prefill-only model tests to the nightly-xpu-1-gpu grid

原始 PR 作者 arathi-hlab 合并时间 2026-08-31 14:03 文件变更 4 提交数 3 评论 2 代码增减 +4 / -24

执行摘要

将四个 XPU prefill-only 测试迁至夜间网格并去掉显存门槛

PR body 明确说明:四个测试原先挂在 stage-b-test-1-gpu-xpu PR 套件上,而 TestXPUCrossEncoderRerank 的 >=20GiB 门槛只是为了防止 fp32 + triton 配置在约 12GiB 的 B580 PR 运行器上 OOM 或长时间挂起;nightly-xpu-1-gpu 运行器为 22GiB 的 B60,因此门槛在夜间网格没有存在意义。测试计划要求夜间网格在 B60 上接住四个测试并保持通过。

不推荐精读,这是一次标准的 CI 网格分层调整,但有两个值得留意的实践:一是把"显存门槛"与"运行器规格"绑定而不是绑定到测试本身,迁移套件时门槛随之失效;二是用 nightly=True 显式区分触发频率,避免后续维护者误以为用例仍在 PR gate 上。对负责 XPU/Intel CI 的工程师可快速浏览。

讨论亮点

两条 issue 评论均来自合入者 mingfeima:

  1. lint 修复要求:评论指出"need to fix lint, other than that LGTM.",作者随后以独立提交删除 test_xpu_rerank.py 导入区多余空行,满足 isort 检查后合入。
  2. CI 标签精简:评论"no need to add label run-ci-extra",说明对这类纯测试路由调整不需要额外触发 run-ci-extra 流水线,最终合入时未携带该标签。

实现拆解

这是一个纯测试配置调整,按以下步骤完成:

  1. 套件注册切换(4 个文件)test/registered/xpu/test_xpu_classification.pytest_xpu_embedding.pytest_xpu_rerank.pytest_xpu_reward.py 各自将 sglang.test.ci.ci_registerregister_xpu_ci(...) 调用从 suite="stage-b-test-1-gpu-xpu" 改为 suite="nightly-xpu-1-gpu", nightly=True。这是 CI 注册入口的关键路由参数,nightly=True 确保用例仅进入夜间网格、不再参与 PR gate 决策。三个文件各自只有这一行改动,rerank 文件除注册行外还有额外清理。

  2. 显存门槛删除(仅 test_xpu_rerank.py):移除模块级符号 _xpu_total_gib()_LARGE_XPU_VRAM_GIB = 20.0_HAS_LARGE_XPU = _xpu_total_gib() >= _LARGE_XPU_VRAM_GIB,以及 TestXPUCrossEncoderRerank 上的 @unittest.skipUnless(_HAS_LARGE_XPU, ...) 装饰器和相关解释性注释。_xpu_total_gib() 原先在导入时通过 torch.xpu.get_device_properties(0).total_memory 探测显存,迁移到固定 22GiB 的 B60 夜间运行器后这段探测逻辑成为死代码。

  3. lint 修正(提交 89f1469):响应维护者评论,删除 test_xpu_rerank.py 导入区在 isort 规则下多余的空行,属于纯格式提交。

  4. CI 触发与验证:第二个提交 ci: retrigger 强制重跑 CI;合入前 PR 状态显示 PR Test 与 Extra 两个 CI run 均为失败状态,最终由维护者合入。

整个变更不涉及 schema、部署或运行时配置,属于测试网格资源的重新分配。

文件 模块 状态 重要度
test/registered/xpu/test_xpu_rerank.py XPU 测试 modified 4.92
test/registered/xpu/test_xpu_classification.py XPU 测试 modified 3.25
test/registered/xpu/test_xpu_embedding.py XPU 测试 modified 3.25
test/registered/xpu/test_xpu_reward.py XPU 测试 modified 3.25

关键符号

_xpu_total_gib

关键源码片段

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

唯一发生实质逻辑变更的文件:删除显存探测辅助函数、20GiB 门槛常量及 skipUnless 装饰器,并将套件切换为 nightly-xpu-1-gpu。

# test_xpu_rerank.py —— 套件注册与 cross-encoder 测试的变更部分from sglang.test.ci.ci_register import register_xpu_ci# 从 stage-b-test-1-gpu-xpu(B580 PR 运行器,约 12GiB)迁到 nightly-xpu-1-gpu
# (B60 夜间运行器,22GiB),并显式标记 nightly=True 只进夜间网格。
register_xpu_ci(est_time=180, suite="nightly-xpu-1-gpu", nightly=True)# cross-encoder 测试仍搭配 fp32 + triton,因为 bf16 + intel_xpu 后端在该模型上
# 与 HF 分数不完全对齐(已知偏差,单独跟踪)。
CROSS_ENCODER_MODEL_PATH = "BAAI/bge-reranker-v2-m3"
CROSS_ENCODER_TP_SIZE = 1
CROSS_ENCODER_SCORE_TOLERANCE = 1e-2
CROSS_ENCODER_TORCH_DTYPE = torch.float32
CROSS_ENCODER_ATTENTION_BACKEND = "triton"
CROSS_ENCODER_MEM_FRACTION_STATIC = 0.65# 原 @unittest.skipUnless(_HAS_LARGE_XPU, ...) 已删除:夜间运行器为 22GiB B60,
# 不再需要 >=20GiB 门槛;类在夜间网格中无条件执行。
class TestXPUCrossEncoderRerank(CustomTestCase):
    @classmethod
    def setUpClass(cls):
        mp.set_start_method("spawn", force=True)

评论区精华

没有提炼出高价值讨论线程

当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。

风险与影响

  • 回归发现延迟:四个用例从每次 PR 必跑的冒烟套件移到每日夜间网格,相关模型(Qwen3-Reranker、bge-reranker-v2-m3、apeach 分类、gte-Qwen2 embedding、Skywork-Reward)的回归只有夜间才能被发现,PR 合入门不再兜底。
  • 硬件显存假设:test_xpu_rerank.py 的 cross-encoder 测试现在无条件在夜间网格执行,依赖夜间运行器始终保持 22GiB B60;若日后夜间网格被换到小显存设备,fp32 + triton 配置会直接 OOM 或超时(est_time 为 180 秒)。
  • 网格配置不一致风险:四个文件只改了字符串与标志位,若 nightly-xpu-1-gpu 网格上的用例收集逻辑或 suite 命名存在偏差,测试会静默丢失;该风险依赖 PR body 提到的 B60 实测通过来缓解。
    • 无源码路径、无性能与安全影响。
  • 对 CI 运行者:stage-b-test-1-gpu-xpu 冒烟套件减少 4 个用例(合计约 540 秒估算时间),XPU PR 的反馈时间缩短;nightly-xpu-1-gpu 网格新增 4 个 prefill-only 覆盖,且 cross-encoder rerank 从跳过变为真正执行。
  • 对 Intel XPU 团队:测试分层逻辑更清晰——常规 PR 门禁覆盖轻量场景,重显存场景固定由夜间 B60 承接。
  • 对最终用户:无任何运行时功能影响,属于内部 CI 资源调配。
PR 门禁覆盖移除 硬件显存假设 夜间回归延迟

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论