# PR #35654 完整报告

- 仓库：`sgl-project/sglang`
- 标题：[AMD] Retry transient network failures in ROCm Dockerfile curl fetches
- 合并时间：2026-08-21 12:54
- 原文链接：http://prhub.com.cn/sgl-project/sglang/pull/35654

---

# 执行摘要

- 一句话：为 ROCm Dockerfile 的 curl 添加网络重试，提升构建稳定性
- 推荐动作：该 PR 值得快速浏览，作为部署脚本稳定性改进的参考。虽不涉及核心逻辑，但 `--retry-all-errors` 与固定重试次数的组合值得借鉴，可在其他依赖外部网络下载的 CI 脚本中推广。

# 功能与动机

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

# 实现拆解

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；类别 infra；类型 infrastructure）: 唯一变更文件，为所有 curl 命令添加网络重试参数，直接解决 ROCm nightly 构建的瞬时网络故障。

关键符号：未识别

## 关键源码片段

### `docker/rocm.Dockerfile`

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

```bash
# 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; \

```

```bash
# 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 与构建稳定性改进的系列工作。