# PR #6031 完整报告

- 仓库：`verl-project/verl`
- 标题：[ci] chore: qwen3.5 add docker file add x86 CANN8.5.2
- 合并时间：2026-04-16 22:49
- 原文链接：http://prhub.com.cn/verl-project/verl/pull/6031

---

# 执行摘要

- 一句话：为 Qwen3.5 模型新增 x86_64 架构的 Ascend NPU Docker 镜像支持。
- 推荐动作：该 PR 变更直接，主要涉及基础设施配置，适合快速浏览以了解新增的 x86_64 架构支持。值得关注的是 reviewer 指出的代码重复和安全问题，这为后续优化提供了明确方向。

# 功能与动机

根据 PR 标题和 body 描述，当前 PR 旨在为 Qwen3.5 模型提供一个基于 x86 架构和 CANN 8.5.2 的 Docker 镜像，以支持在 x86 硬件上进行分组训练。这扩展了现有仅支持 aarch64 架构的 Docker 镜像的适用范围。

# 实现拆解

1. **架构检测与条件分支**：在 `docker/ascend/Dockerfile.ascend_8.5.2_a3_qwen3-5` 中，通过 `ARCH=$(uname -m)` 获取系统架构，并使用 `if-elif-fi` 条件语句分别处理 `aarch64` 和 `x86_64` 两种情况。
2. **动态下载与安装**：针对每种架构，分别下载对应架构的 CANN 组件包（toolkit、A3-ops、nnal），安装后清理临时文件。核心逻辑是将原先仅针对 aarch64 的下载安装命令复制并修改为 x86_64 版本，形成两个并列的分支。
3. **无测试或配置配套改动**：本次变更仅涉及 Docker 基础设施文件，未发现相关的测试、配置或部署脚本的配套改动。

关键文件：
- `docker/ascend/Dockerfile.ascend_8.5.2_a3_qwen3-5`（模块 Docker 镜像；类别 infra；类型 infrastructure）: 这是本 PR 唯一修改的文件，负责构建 Qwen3.5 模型的 Ascend NPU Docker 镜像，新增了 x86_64 架构支持。

关键符号：未识别


## 关键源码片段

### `docker/ascend/Dockerfile.ascend_8.5.2_a3_qwen3-5`

这是本 PR 唯一修改的文件，负责构建 Qwen3.5 模型的 Ascend NPU Docker 镜像，新增了 x86_64 架构支持。

```dockerfile
# 检测系统架构并据此选择下载对应架构的 CANN 组件包
ARG SOC_VERSION="ascend910_9392"
RUN set -e && \
    cd /tmp && \
    ARCH=$(uname -m) && \
    if [ "$ARCH" = "aarch64" ]; then \
        # aarch64 架构的安装逻辑
        wget -v --no-check-certificate https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/CANN/CANN%208.5.2/Ascend-cann-toolkit_8.5.2_linux-aarch64.run && \
        bash Ascend-cann-toolkit_8.5.2_linux-aarch64.run --quiet --install && \
        rm -f Ascend-cann-toolkit_8.5.2_linux-aarch64.run && \
        wget -v --no-check-certificate https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/CANN/CANN%208.5.2/Ascend-cann-A3-ops_8.5.2_linux-aarch64.run && \
        bash Ascend-cann-A3-ops_8.5.2_linux-aarch64.run --quiet --install && \
        rm -f Ascend-cann-A3-ops_8.5.2_linux-aarch64.run && \
        . /usr/local/Ascend/ascend-toolkit/set_env.sh && \
        wget -v --no-check-certificate https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/CANN/CANN%208.5.2/Ascend-cann-nnal_8.5.2_linux-aarch64.run && \
        bash Ascend-cann-nnal_8.5.2_linux-aarch64.run --quiet --install && \
        rm -f Ascend-cann-nnal_8.5.2_linux-aarch64.run ; \
    elif [ "$ARCH" = "x86_64" ]; then \
        # x86_64 架构的安装逻辑（新增部分）
        wget -v --no-check-certificate https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/CANN/CANN%208.5.2/Ascend-cann-toolkit_8.5.2_linux-x86_64.run && \
        bash Ascend-cann-toolkit_8.5.2_linux-x86_64.run --quiet --install && \
        rm -f Ascend-cann-toolkit_8.5.2_linux-x86_64.run && \
        wget -v --no-check-certificate https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/CANN/CANN%208.5.2/Ascend-cann-A3-ops_8.5.2_linux-x86_64.run && \
        bash Ascend-cann-A3-ops_8.5.2_linux-x86_64.run --quiet --install && \
        rm -f Ascend-cann-A3-ops_8.5.2_linux-x86_64.run && \
        . /usr/local/Ascend/ascend-toolkit/set_env.sh && \
        wget -v --no-check-certificate https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/CANN/CANN%208.5.2/Ascend-cann-nnal_8.5.2_linux-x86_64.run && \
        bash Ascend-cann-nnal_8.5.2_linux-x86_64.run --quiet --install && \
        rm -f Ascend-cann-nnal_8.5.2_linux-x86_64.run ; \
    fi && \
    . /usr/local/Ascend/cann/set_env.sh && \
    rm -rf /tmp/*
```

# 评论区精华

reviewer `gemini-code-assist[bot]` 指出了两个主要问题：
1. **代码重复与可维护性**：当前实现为两种架构复制了几乎相同的安装逻辑，增加了维护成本和出错风险。建议使用循环和变量来重构。
2. **安全风险**：使用 `wget --no-check-certificate` 绕过了 SSL 验证，存在安全风险。
此外，还建议使用更便携的 `.` 命令替代 `source`。这些评论在 PR 合并前未被采纳或回应，属于未解决的疑虑。

- Dockerfile 代码重复与安全风险 (design): 未在 PR 中解决，建议后续重构为使用循环和变量，并移除不安全的下载选项。

# 风险与影响

- 风险：1. **安全风险**：Dockerfile 中使用了 `--no-check-certificate` 选项下载 CANN 组件，这绕过了 SSL 证书验证，可能使镜像构建过程面临中间人攻击风险。
2. **维护风险**：代码重复（aarch64 和 x86_64 分支逻辑几乎相同）增加了未来更新 CANN 版本或 URL 时出错的可能性，容易导致两个分支不一致。
3. **兼容性风险**：虽然新增了 x86_64 支持，但未提供相应的 CI 工作流或文档说明，用户可能不清楚如何构建和使用该镜像。
- 影响：1. **对用户的影响**：允许用户在 x86_64 架构的服务器上构建和运行 Qwen3.5 模型的 Ascend NPU 训练镜像，扩展了硬件支持范围。影响范围限于需要使用该特定 Docker 镜像的用户。
2. **对系统的影响**：仅修改了一个 Dockerfile，不涉及核心训练逻辑或运行时行为，对系统其他模块无直接影响。
3. **对团队的影响**：增加了 Docker 镜像的维护复杂度，未来更新 CANN 版本时需要同时修改两个分支的代码。
- 风险标记：代码重复 , 安全风险

# 关联脉络

- PR #6017 [fsdp] feat: qwen3.5 modify npu docker file based on CANN 8.5.2: 同样修改了 Qwen3.5 的 Dockerfile，但升级了 CANN 版本至 8.5.2，而本 PR 是在此基础上新增 x86_64 架构支持。
- PR #5991 [fsdp] feat: qwen3.5 add npu docker file: 早期为 Qwen3.5 新增 Ascend NPU Docker 镜像的 PR，本 PR 可视为其架构支持的扩展。