Prhub

#44481 [XPU][CI] Refine docker image build and pull/create lock mechanism in Intel GPU CI

原始 PR 作者 zxd1997066 合并时间 2026-06-09 20:20 文件变更 2 提交数 6 评论 2 代码增减 +86 / -87

执行摘要

优化 XPU Docker 镜像大小与锁机制

PR 描述明确指出目的:'Reduce XPU Docker image size and layer bloat' 和 'Unify Intel Docker pull+create under one lock'。镜像体积过大导致拉取慢、存储占用高,原有的 pull 和 create 使用独立的锁可能导致竞态条件。

推荐给关注 CI 基础设施和 Docker 优化的团队阅读,特别是多阶段构建和锁机制的实践。

讨论亮点

审阅者 yma11 询问优化前后构建时间和镜像大小对比,提交者 zxd1997066 回复镜像从 38G 降至 33G,并附上 Docker 镜像列表截图。无其他争议。

实现拆解

  1. 重构 Dockerfile.xpu,引入多阶段构建:将需要编译器的组件(UCX、NIXL)放在独立构建阶段,产物复制到最终运行阶段,使运行时镜像不包含编译工具链,显著减小体积。
  2. 合并多个 RUN 命令以减少镜像层数:例如将 curl 安装 uv 和创建 venv 合并为一条 RUN,将 oneCCL 配置和符号链接合并等。
  3. 统一 CI 脚本中的锁机制:移除 .buildkite/scripts/hardware_ci/run-intel-test.sh 中单独的 flock /tmp/docker-pull.lock 逻辑,将 pull 和 create 整合到同一个 flock 下,防止重复拉取冲突。
文件 模块 状态 重要度
docker/Dockerfile.xpu 容器构建 modified 5.68
.buildkite/scripts/hardware_ci/run-intel-test.sh CI 脚本 modified 4.09

关键源码片段

docker/Dockerfile.xpu infrastructure

最核心变更文件,通过多阶段构建和命令合并将镜像从 38G 缩小至 33G,减小层膨胀。

# vllm-project/vllm/docker/Dockerfile.xpu ( 简化片段 )
# 通过合并 RUN 命令减少镜像层数
# 安装 uv 并创建虚拟环境(单层)
RUN curl -LsSf https://astral.sh/uv/install.sh | sh \
 && uv venv --python ${PYTHON_VERSION} --seed ${VIRTUAL_ENV}# 安装 oneCCL 后清理中间文件,减少层数
RUN wget "https://github.com/uxlfoundation/oneCCL/releases/download/2021.15.9/...pkg" \
 && bash installer -a --silent --eula accept \
 && rm installer \
 && echo "source /opt/intel/oneapi/setvars.sh --force" >> /root/.bashrc \
 && echo "source /opt/intel/oneapi/ccl/2021.15/env/vars.sh --force" >> /root/.bashrc \
 && rm -f /opt/intel/oneapi/ccl/latest \
 && ln -s /opt/intel/oneapi/ccl/2021.15 /opt/intel/oneapi/ccl/latest

评论区精华

镜像大小优化效果 question

审阅者 yma11 询问优化前后构建时间和镜像大小对比,提交者 zxd1997066 回复镜像从 38G 降至 33G。

结论:确认镜像减少约 5G,构建时间未具体对比但可接受。 · 已解决

风险与影响

多阶段构建重组了 Dockerfile,可能因遗漏依赖导致构建失败,但本 PR 已通过 CI 测试并被批准。锁机制统一简化了并发控制,但未处理超时等异常情况(如 pull 超时仍吃住锁)。整体风险较低。

对 Intel GPU CI 有直接影响:镜像拉取更快(体积减小 5G),存储消耗降低;锁机制避免 runner 间冲突,提升 CI 稳定性。对其他平台无影响。

构建流程变更 并发控制变更 镜像瘦身

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论