Prhub

#6031 [ci] chore: qwen3.5 add docker file add x86 CANN8.5.2

verl-project/verl · 作者 ruanhao566 · 合并时间 2026-04-16 22:49

分析状态 已生成
文件变更 1提交数 1 · 评论 2
代码增减 +26 / -10
ci npu docker fsdp

执行摘要

为 Qwen3.5 模型新增 x86_64 架构的 Ascend NPU Docker 镜像支持。

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

该 PR 变更直接,主要涉及基础设施配置,适合快速浏览以了解新增的 x86_64 架构支持。值得关注的是 reviewer 指出的代码重复和安全问题,这为后续优化提供了明确方向。

讨论亮点

reviewer gemini-code-assist[bot] 指出了两个主要问题:

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

实现拆解

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

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

# 检测系统架构并据此选择下载对应架构的 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/*

评论区精华

Dockerfile 代码重复与安全风险 设计

reviewer gemini-code-assist[bot] 指出安装逻辑在 aarch64 和 x86_64 分支间高度重复,增加了维护成本;同时使用 `--no-check-certificate` 绕过 SSL 验证存在安全风险。

结论:未在 PR 中解决,建议后续重构为使用循环和变量,并移除不安全的下载选项。 · unresolved

风险与影响

  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 版本时需要同时修改两个分支的代码。
代码重复 安全风险

关联 Issue

未识别关联 Issue

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

完整报告

执行摘要

  • 一句话:为 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 条件语句分别处理 aarch64x86_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 架构支持。

# 检测系统架构并据此选择下载对应架构的 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 可视为其架构支持的扩展。

参与讨论