Prhub

#34818 [CI] Install sgl-eval in xeon (CPU) Docker image

原始 PR 作者 MingxuZh 合并时间 2026-08-17 14:00 文件变更 1 提交数 1 评论 0 代码增减 +3 / -1

执行摘要

Xeon 镜像补装 sgl-eval,修复 CPU CI 测试失败

PR body 明确指出:"PR #34477 routed mmlu eval through the external sgl-eval CLI and added the install step to the cuda / amd / npu CI dependency scripts, but the CPU path builds its image from docker/xeon.Dockerfile, which was not updated. As a result test_mmlu_torch_compile_cpu (test/registered/cpu/test_cpu_graph.py) fails on the xeon-gnr runner with FileNotFoundError: 'sgl-eval'." 即 CPU 镜像缺少 sgl-eval 导致相关测试失败,需要对齐其他平台的安装方式。

值得快速了解。该 PR 体现了跨 CI 平台共享依赖版本固定脚本的实践,避免同一依赖在多个 Dockerfile 中各自维护版本。后续维护 CPU 或其他镜像的 CI 依赖时,可参照此模式。

讨论亮点

本 PR 无实质 Review 讨论。copilot-pull-request-reviewer[bot] 给出概述性 comment,复述了变更内容;维护者 mingfeima 直接批准(APPROVED)。

实现拆解

  1. 定位问题:PR #34477 引入 sgl-eval 依赖,并更新了 CUDA/AMD/NPU 的 CI 依赖脚本,但 docker/xeon.Dockerfile 未同步,导致 CPU 镜像中缺少 sgl-eval 命令。
  2. 修改镜像构建脚本:在 docker/xeon.Dockerfile 的 RUN 链中,追加 && source /sgl-workspace/sglang/scripts/ci/utils/sgl_eval_ref.sh && uv pip install "$SGL_EVAL_SPEC",在镜像构建阶段完成 sgl-eval 安装。
  3. 复用共享版本锁定:通过 scripts/ci/utils/sgl_eval_ref.sh 获取统一的 $SGL_EVAL_SPEC 版本号,使 CPU 与 CUDA/AMD/NPU 镜像的 sgl-eval 版本保持一致,后续升级只需修改该脚本一处。
  4. 验证:PR 描述中的 CI 状态显示 PR 测试已通过(Run #31776932514、Run #31999955409),说明镜像构建与依赖它的 CPU 测试均正常。
文件 模块 状态 重要度
docker/xeon.Dockerfile 镜像构建 modified 3.36

关键源码片段

docker/xeon.Dockerfile infrastructure

这是本 PR 唯一修改的文件,通过在该镜像构建脚本中追加 sgl-eval 安装步骤,修复 CPU CI 测试失败,并复用共享版本锁定脚本保持跨平台一致性。

# docker/xeon.Dockerfile 构建镜像时的关键安装步骤(节选)
RUN source /opt/.venv/bin/activate && \
    uv pip install . && \
    cd sglang/kernels/aot && \
    cp pyproject_cpu.toml pyproject.toml && \
    # 加载共享的 sgl-eval 版本固定脚本,确保与 CUDA/AMD/NPU 镜像使用同一版本
    source /sgl-workspace/sglang/scripts/ci/utils/sgl_eval_ref.sh && \
    # 通过 uv 安装固定版本的 sgl-eval CLI,供 CPU 机型的 mmlu eval 使用
    uv pip install "$SGL_EVAL_SPEC"

评论区精华

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

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

风险与影响

  • CI 构建失败风险:Dockerfile 的 RUN 链中新增 sourceuv pip install,若 sgl_eval_ref.sh 不可用或 $SGL_EVAL_SPEC 指向不存在/不兼容的版本,镜像构建会失败,进而影响依赖该镜像的全部 CPU CI。不过 PR 描述中 CI 已通过,实际风险低。
  • 路径硬编码风险docker/xeon.Dockerfile 中硬编码了脚本路径 /sgl-workspace/sglang/scripts/ci/utils/sgl_eval_ref.sh,若脚本路径调整而 Dockerfile 未同步,会出现构建失败。
  • 平台兼容性:sgl-eval 可能引入 CPU 平台不支持的依赖,但鉴于 CUDA/AMD/NPU 均使用同一版本规范,此风险较小。
  • 镜像体积与构建时间:额外安装 Python 包会略微增加镜像体积和构建时长,但影响有限。

本 PR 影响范围仅限于 Xeon CPU Docker 镜像构建及相关 CI 测试。修复后,test_mmlu_torch_compile_cpu 等依赖 sgl-eval 的 CPU 测试不再因缺少命令而失败,CPU CI 稳定性提升。对最终用户无直接影响,团队需重新构建 Xeon 镜像后才能生效,影响面小。

CI 构建失败风险 跨平台依赖同步

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论