执行摘要
- 一句话:为 ROCm Dockerfile 的 curl 添加网络重试,提升构建稳定性
- 推荐动作:该 PR 值得快速浏览,作为部署脚本稳定性改进的参考。虽不涉及核心逻辑,但
--retry-all-errors 与固定重试次数的组合值得借鉴,可在其他依赖外部网络下载的 CI 脚本中推广。
功能与动机
在 docker/rocm.Dockerfile 的 TileLang 构建层,存在未配置重试机制的 curl 命令,近期两次 ROCm nightly 构建在同一命令上因瞬时网络问题失败(DNS 解析失败、TCP 连接失败)。这些失败并非代码回归——同一提交在其他矩阵分支构建成功,且此前 20 次运行中有 19 次通过。PR 作者明确说明动机是消除构建基础设施中的偶发网络故障,避免误导性失败。
实现拆解
- 定位变更入口:仅修改
docker/rocm.Dockerfile 一个文件,未涉及源码或测试。
- 统一添加 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)
- 参数语义:
--retry 5 设置最多重试 5 次,--retry-delay 3 设置重试间隔 3 秒,--retry-all-errors 使 curl 对所有可重试错误(包括 DNS 解析失败、连接失败等)进行重试,而非仅网络层错误。
- 无其他配套改动:没有测试、文档、schema 或部署相关的配套变更,因为该改动仅影响 Docker 构建过程。
关键文件:
docker/rocm.Dockerfile(模块 Docker;类别 infra;类型 infrastructure): 唯一变更文件,为所有 curl 命令添加网络重试参数,直接解决 ROCm nightly 构建的瞬时网络故障。
关键符号:未识别
关键源码片段
docker/rocm.Dockerfile
唯一变更文件,为所有 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 无 review 评论,仅由维护者 HaiShaw 直接批准。可能因为该改动简单直接,无争议点,且风险极低。
风险与影响
- 风险:本 PR 仅增加 curl 重试参数,风险极低。潜在风险包括:重试可能掩盖真实网络配置问题(如代理、防火墙),但
--retry-all-errors 仅针对可重试的瞬时错误,且重试次数有限;最坏情况下 CI 构建时间可能因重试而略有延长,但实际发生概率低、影响可忽略。
- 影响:
- 用户侧:无任何功能影响,模型输出与推理速度不变。
- 系统侧:提升 ROCm 镜像构建的稳定性和可重入性,减少因瞬时网络导致的不必要失败,降低维护成本。
- 团队侧:CI 更可靠,减少人工重跑请求。
- 风险标记:基础设施变更, 无功能性影响, 重试参数可能掩盖持久网络问题
关联脉络
- PR #35756 [Docker] Defer CUDA 13 NCCL override until after dependency resolution: 同属 Docker 构建稳定性优化,均为提升 ROCm/CUDA 镜像构建的可靠性。
- PR #35750 [CI] Gate
/rerun-test on commenter trust and remove /rerun-stage: 涉及 CI 重跑机制优化,与本 PR 的构建稳定性改进目标一致,反映团队对 CI 运维体验的持续关注。
- PR #35600 Add CI permissions for four contributors: 同为 CI 基础设施调整,共同构成近期 CI 与构建稳定性改进的系列工作。
参与讨论