执行摘要
- 一句话:增强 Intel Xeon CPU CI 稳定性和测试覆盖
- 推荐动作:该 PR 显著提升了 Xeon CI 的可靠性和覆盖范围,设计合理,讨论中的问题均已澄清或解决。建议合并,并考虑后续将
HF_TOKEN 迁移至 GitHub Secrets 以增强安全性。
功能与动机
之前的 Xeon 工作流存在几个实际问题:固定 HF 缓存路径不匹配当前环境、缺少 HF_TOKEN 注入导致门控模型测试失败、测试覆盖不足、单分片执行易超时。本 PR 旨在解决这些问题,使 Xeon CI 能运行更广泛且有代表性的 CPU 测试集。
实现拆解
- 更新 CI 工作流 (
.github/workflows/pr-test-xeon.yml):加入 workspace 清理步骤;将固定 HF 缓存路径改为使用 $HOME/.cache/huggingface;注入 HF_TOKEN 以访问门控模型;引入矩阵构建策略,将 base-b-test-cpu 套件分为 2 个自动分区并行执行。
- 更新 Docker 镜像 (
docker/xeon.Dockerfile):安装 pytest,确保所有扩展测试的运行时依赖满足。
- 扩展测试注册:在多个测试文件中增加
register_cpu_ci(est_time=..., suite="base-b-test-cpu") 调用,涉及 LoRA、模型加载、路由调度、性能分析、调试工具、可观测性等模块,仅添加注册,不修改测试逻辑。
- 调整测试参数 (
test/srt/cpu/test_cpu_graph.py):将 --mem-fraction-static 从 0.05 提高到 0.5,以支持 torch-compile CPU graph 场景。
关键文件:
.github/workflows/pr-test-xeon.yml(模块 CI流程;类别 infra;类型 infrastructure): 核心 CI 工作流文件,实现了缓存路径修正、令牌注入、矩阵分区等关键改动,是本次 PR 的主干。
docker/xeon.Dockerfile(模块 Docker;类别 infra;类型 infrastructure): Xeon Docker 镜像文件,安装 pytest 以支持新注册的测试集。
test/registered/lora/test_lora_openai_api.py(模块 测试注册;类别 test;类型 test-coverage): 代表性地展示了测试注册扩展模式:新增 register_cpu_ci 调用,将测试纳入 CPU CI 套件。
test/registered/model_loading/test_external_models.py(模块 测试注册;类别 test;类型 test-coverage): 模型加载测试,加入后显著增加 CPU 测试覆盖率,且估计时间较长(203s),是覆盖范围扩大的典型。
test/srt/cpu/test_cpu_graph.py(模块 CPU 测试;类别 test;类型 test-coverage): 调整内存分片参数以适配 Xeon 平台,直接涉及 CPU 推理测试的稳定性。
关键符号:未识别
关键源码片段
test/registered/lora/test_lora_openai_api.py
代表性地展示了测试注册扩展模式:新增 register_cpu_ci 调用,将测试纳入 CPU CI 套件。
"""
Unit tests for OpenAI-compatible LoRA API support.
"""
import unittest
from unittest.mock import MagicMock
from sglang.srt.entrypoints.openai.serving_base import OpenAIServingBase
from sglang.srt.server_args import ServerArgs
# 新增 register_cpu_ci 导入
from sglang.test.ci.ci_register import (
register_amd_ci,
register_cpu_ci,
register_cuda_ci,
)
register_cuda_ci(est_time=30, suite="nightly-1-gpu", nightly=True)
register_amd_ci(est_time=30, suite="nightly-amd-1-gpu", nightly=True)
# 将本测试注册到 CPU CI 的 base-b-test-cpu 套件
register_cpu_ci(est_time=8, suite="base-b-test-cpu")
class MockTokenizerManager:
"""Mock TokenizerManager for testing."""
def __init__(self, enable_lora=False):
self.server_args = MagicMock(spec=ServerArgs)
self.server_args.enable_lora = enable_lora
self.server_args.tokenizer_metrics_allowed_custom_labels = None
class ConcreteServingBase(OpenAIServingBase):
"""Concrete implementation for testing abstract base class."""
def _request_id_prefix(self) -> str:
return "test-"
def _convert_to_internal_request(self, request, raw_request=None):
pass
def _validate_request(self, request):
pass
class TestParseModelParameter(unittest.TestCase):
"""Test _parse_model_parameter method."""
def setUp(self):
self.tokenizer_manager = MockTokenizerManager(enable_lora=True)
self.serving = ConcreteServingBase(self.tokenizer_manager)
评论区精华
风险与影响
- 风险:
- CI 稳定性风险:自托管 runner 的 workspace 清理可能与其他 job 冲突,虽然加了
|| true 但仍存在偶发失败可能。
- 令牌安全风险:通过文件读取
HF_TOKEN 并注入环境变量,若文件权限控制不当可能导致泄露,推荐迁移到 GitHub Secrets。
- ARM CI 回归:
test_cpu_graph.py 的 mem-fraction-static 调整仅针对 Xeon,但 ARM 测试套件若共享同一文件可能受影响,但评论确认不触发。
- 测试覆盖膨胀:大量测试注册到
base-b-test-cpu 可能导致总执行时间增加,虽已分区,但仍需监控超时情况。
- 影响:
- 用户/系统:仅影响 Xeon CPU CI 运行,对用户无直接感知。
- 团队:开发者将获得更可靠的 Xeon CI 反馈,减少因环境配置导致的失败;测试覆盖提升有助于提前发现 CPU 相关回归。
- 影响程度:中等,因为仅限于 CI 基础设施层,不涉及核心逻辑变更。
- 风险标记:CI分区可能资源竞争, HF_TOKEN明文传递风险, ARM CI可能受影响
关联脉络
- PR #25061 Fix MiniMax-M2.7 on CPU: 同属 CPU 平台测试与修复,本 PR 扩展了 CPU CI 覆盖,与之形成互补。
参与讨论