Prhub

#35654 [AMD] Retry transient network failures in ROCm Dockerfile curl fetches

原始 PR 作者 bingxche 合并时间 2026-08-21 12:54 文件变更 1 提交数 1 评论 0 代码增减 +8 / -8

执行摘要

为 ROCm Dockerfile 的 curl 添加网络重试,提升构建稳定性

在 docker/rocm.Dockerfile 的 TileLang 构建层,存在未配置重试机制的 curl 命令,近期两次 ROCm nightly 构建在同一命令上因瞬时网络问题失败(DNS 解析失败、TCP 连接失败)。这些失败并非代码回归——同一提交在其他矩阵分支构建成功,且此前 20 次运行中有 19 次通过。PR 作者明确说明动机是消除构建基础设施中的偶发网络故障,避免误导性失败。

该 PR 值得快速浏览,作为部署脚本稳定性改进的参考。虽不涉及核心逻辑,但 --retry-all-errors 与固定重试次数的组合值得借鉴,可在其他依赖外部网络下载的 CI 脚本中推广。

讨论亮点

本次 PR 无 review 评论,仅由维护者 HaiShaw 直接批准。可能因为该改动简单直接,无争议点,且风险极低。

实现拆解

  1. 定位变更入口:仅修改 docker/rocm.Dockerfile 一个文件,未涉及源码或测试。
  2. 统一添加 curl 重试参数:为文件中所有 8 处 curl 命令追加 --retry 5 --retry-delay 3 --retry-all-errors。这些命令分布于多个构建阶段,包括:
    • ROCm repo key 下载(https://repo.radeon.com/rocm/rocm.gpg.key
    • Rust 工具链安装(https://sh.rustup.rs
    • LLVM 快照 key 下载(https://apt.llvm.org/llvm-snapshot.gpg.key
    • AMD AINIC repo key 下载(同样来自 rocm.gpg.key
  3. 参数语义--retry 5 设置最多重试 5 次,--retry-delay 3 设置重试间隔 3 秒,--retry-all-errors 使 curl 对所有可重试错误(包括 DNS 解析失败、连接失败等)进行重试,而非仅网络层错误。
  4. 无其他配套改动:没有测试、文档、schema 或部署相关的配套变更,因为该改动仅影响 Docker 构建过程。
文件 模块 状态 重要度
docker/rocm.Dockerfile Docker modified 3.64

关键源码片段

docker/rocm.Dockerfile infrastructure

唯一变更文件,为所有 curl 命令添加网络重试参数,直接解决 ROCm nightly 构建的瞬时网络故障。

# docker/rocm.Dockerfile (TileLang 层 )
# 为 LLVM 快照 key 下载添加重试参数,避免 DNS/ 连接瞬时故障导致构建失败
curl -fsSL --retry 5 --retry-delay 3 --retry-all-errors \
  https://apt.llvm.org/llvm-snapshot.gpg.key | gpg --dearmor \
  -o /etc/apt/keyrings/llvm.gpg; \echo "deb [signed-by=/etc/apt/keyrings/llvm.gpg] http://apt.llvm.org/jammy/ llvm-toolchain-jammy-18 main" \
  > /etc/apt/sources.list.d/llvm.list; \
apt-get update; \
apt-get install -y --no-install-recommends llvm-18; \
# docker/rocm.Dockerfile (Rust 工具链层 )
# 保留原有安全传输参数,并追加重试参数,确保 rustup 安装更稳定
RUN curl --proto '=https' --tlsv1.2 --retry 5 --retry-delay 3 --retry-all-errors \
  -sSf https://sh.rustup.rs | sh -s -- -y \
&& rustc --version && cargo --version
ENV CARGO_BUILD_JOBS=4

评论区精华

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

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

风险与影响

本 PR 仅增加 curl 重试参数,风险极低。潜在风险包括:重试可能掩盖真实网络配置问题(如代理、防火墙),但 --retry-all-errors 仅针对可重试的瞬时错误,且重试次数有限;最坏情况下 CI 构建时间可能因重试而略有延长,但实际发生概率低、影响可忽略。

  • 用户侧:无任何功能影响,模型输出与推理速度不变。
  • 系统侧:提升 ROCm 镜像构建的稳定性和可重入性,减少因瞬时网络导致的不必要失败,降低维护成本。
  • 团队侧:CI 更可靠,减少人工重跑请求。
基础设施变更 无功能性影响 重试参数可能掩盖持久网络问题

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论