Prhub

#38415 [ROCm][CI] Fix UV install in Dockerfile.rocm to detect curl failures and retry

vllm-project/vllm · 作者 AndreasKaratzas · 合并时间 2026-03-29 00:47

分析状态 已生成
文件变更 1提交数 1 · 评论 6
代码增减 +5 / -2
rocm ci bugfix

执行摘要

修复 ROCm Dockerfile 中 UV 安装的静默失败,添加重试机制提高 CI 可靠性。

PR body 明确指出:'Fix silent UV installation failure in Dockerfile.rocm that causes uv: not found in the build_rixl stage. The curl ... | sh pipe masks curl failures. When curl times out, sh reads empty stdin and exits 0, so Docker reports the step as successful.' 因此,需要修复此静默失败问题,以确保 UV 在构建过程中正确安装。

建议负责 CI 基础设施的工程师快速浏览此 PR,以了解 Dockerfile 中处理网络下载的最佳实践。对于普通开发者,可作为简单 bugfix 示例参考,但无需深入解析。

讨论亮点

在 Issue 评论中,主要讨论了超时问题是否普遍:tjtanaa 询问 'is this timeout a common problem, or it is only happening recently? Because for CPU, XPU, Cuda, their docker image is also executing the same steps.' AndreasKaratzas 回应说 'I know. I saw that this is the case for others too. My guess is slow network.' 这揭示了类似问题可能存在于其他 Dockerfile 中,但本 PR 仅聚焦于 ROCm 修复,未扩展讨论统一解决方案。Review 中自动 bot 评论无实质内容,khluu 和 tjtanaa 简单批准,无争议。

实现拆解

修改了 docker/Dockerfile.rocm 文件中的 UV 安装命令:

  • 将原单行命令 'curl -LsSf https://astral.sh/uv/install.sh | env UV_INSTALL_DIR="/usr/local/bin" sh' 拆分为多步:先下载脚本到临时文件 /tmp/uv-install.sh。
  • 添加 '--retry 3 --retry-delay 5' 参数到 curl,以处理瞬态网络失败如 SSL 超时。
  • 运行下载的脚本并设置环境变量 UV_INSTALL_DIR。
  • 清理临时文件并用 'uv --version' 验证安装成功,确保步骤失败时能被 Docker 捕获。
文件 模块 状态 重要度
docker/Dockerfile.rocm ci/docker modified 3.0

分析完成后,这里会展示 LLM 生成的相对完整源码片段和详细注释。

评论区精华

超时问题是否普遍以及是否应统一修复 question

tjtanaa 询问超时是否是常见问题,并提到 CPU、XPU、Cuda 的 Dockerfile 也有相同步骤,暗示可能需要跨所有构建修复。AndreasKaratzas 回应说可能是网络慢,并知道其他文件有类似问题,但 PR 仅针对 ROCm。

结论:讨论确认了问题可能普遍存在,但 PR 仅修复 ROCm,未决定是否扩展到其他 Dockerfile。 · partially_resolved

风险与影响

风险较低,主要包括:

  • 脚本更改可能引入语法错误,但通过验证步骤 'uv --version' 可降低风险。
  • 临时文件清理失败(如权限问题),但使用 'rm -f' 在同一 RUN 命令中执行可确保清理。
  • 重试机制可能掩盖非网络失败(如脚本内容错误),但这是已知权衡,针对网络超时问题。
  • 依赖外部网络下载,可能受服务器可用性影响,添加重试可缓解。

直接影响 ROCm CI 构建的可靠性,减少因网络问题导致的 uv 安装失败和静默成功问题。对于系统,提高了构建成功率和可调试性,缩短 CI 故障排查时间。对团队而言,变更简单易懂,易于维护;但对其他 Dockerfile(如 CPU、XPU、Cuda)的潜在类似问题未处理,可能需后续关注。

网络依赖问题 脚本执行风险

关联 Issue

未识别关联 Issue

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

完整报告

执行摘要

本 PR 修复了 vllm 仓库中 ROCm Dockerfile 的 UV 安装静默失败问题,通过分离下载步骤和添加重试机制提高 CI 构建可靠性。变更影响范围小但直接提升构建稳定性,建议 CI 工程师参考以优化 Dockerfile 实践。

功能与动机

此修复旨在解决 docker/Dockerfile.rocm 中 UV 安装脚本因 curl ... | sh 管道掩盖下载失败的问题。当网络超时时,sh 读取空输入并以成功退出,导致 Docker 报告步骤成功但实际未安装 UV,引发后续构建阶段错误如 uv: not found。PR body 引用具体表述:"The curl ... | sh pipe masks curl failures. When curl times out, sh reads empty stdin and exits 0, so Docker reports the step as successful." 因此,动机是增强 CI 的健壮性和可调试性。

实现拆解

变更集中在单个文件 docker/Dockerfile.rocm,关键改动如下:

  • 原命令RUN curl -LsSf https://astral.sh/uv/install.sh | env UV_INSTALL_DIR="/usr/local/bin" sh
  • 新命令:拆分为多步:
    dockerfile RUN curl -LsSf --retry 3 --retry-delay 5 https://astral.sh/uv/install.sh -o /tmp/uv-install.sh \ && env UV_INSTALL_DIR="/usr/local/bin" sh /tmp/uv-install.sh \ && rm -f /tmp/uv-install.sh \ && uv --version
    关键点:
    1. 下载到文件:避免管道掩盖 curl 失败。
    2. 添加重试--retry 3 --retry-delay 5 处理瞬态网络失败。
    3. 验证安装uv --version 确保步骤失败时能被捕获。
    4. 清理临时文件:使用 rm -f 减少残留。

评论区精华

Issue 评论中的核心讨论围绕问题普遍性展开:

  • tjtanaa 提问:"is this timeout a common problem, or it is only happening recently? Because for CPU, XPU, Cuda, their docker image is also executing the same steps." 这引发了对跨 Dockerfile 统一修复的考虑。
  • AndreasKaratzas 回应:"I know. I saw that this is the case for others too. My guess is slow network." 表明问题可能普遍,但本 PR 仅处理 ROCm 特定情况。
    讨论未解决是否扩展修复,但揭示了系统性 CI 网络依赖风险。Review 中自动 bot 和简单批准无深度交锋。

风险与影响

技术风险

  • 脚本错误风险:新命令复杂度增加,可能引入语法错误,但验证步骤降低此风险。
  • 文件清理风险:临时文件清理可能失败,但使用 rm -f 在同一 RUN 命令中执行可确保。
  • 网络依赖:添加重试可能掩盖其他失败类型,但针对已知超时问题权衡后接受。

影响分析

  • 用户/系统:直接提高 ROCm CI 构建成功率,减少因网络问题导致的静默失败和调试时间。
  • 团队:变更简单,易于维护;但其他 Dockerfile(CPU、XPU、Cuda)可能仍存在类似漏洞,需后续评估。

关联脉络

从近期历史 PR 看,本 PR 与以下关联紧密:

  1. PR 38252:也修改 docker/Dockerfile.rocm,升级 ROCm 版本和依赖,反映连续的基础设施维护。
  2. PR 38391:类似 CI 修复,涉及 Docker 构建中预下载头文件,共享网络可靠性改进主题。
  3. PR 38413:更新 ROCm 变体配置,同属 ROCm 和 CI 标签脉络。
    整体趋势显示团队持续优化 CI 基础设施,特别是针对网络依赖和构建稳定性。

参与讨论