Prhub

#6017 [fsdp] feat: qwen3.5 modify npu docker file based on CANN 8.5.2

原始 PR 作者 ruanhao566 合并时间 2026-04-16 20:39 文件变更 2 提交数 1 评论 7 代码增减 +22 / -4

执行摘要

为 Qwen3.5 模型升级 Ascend NPU Docker 镜像至 CANN 8.5.2 版本。

根据 PR 标题和 body 描述,此变更旨在为 Qwen3.5 模型提供基于 CANN 8.5.2 的 Docker 镜像,以支持 FSDP 后端训练。虽然没有直接关联的 Issue,但从上下文推断,升级 CANN 版本可能为了获得性能改进、新特性支持或 bug 修复,确保训练环境与最新硬件驱动和软件栈保持同步。

此 PR 主要涉及基础设施更新,变更相对直接,适合快速浏览以了解 CANN 版本升级的配置细节。建议关注 Dockerfile 中 CANN 安装和路径设置的实现方式,以及 review 中讨论的架构兼容性修复,这些对构建可靠的多架构镜像有参考价值。

讨论亮点

review 中 gemini-code-assist[bot] 指出了多个关键构建问题:

  • 架构兼容性问题:Dockerfile 中硬编码下载 aarch64 架构的 CANN 安装包,但文件逻辑支持 x86_64,导致跨架构构建失败。建议使用 ARCH 变量动态选择安装包。
  • vLLM 版本错误:引用了不存在的 vLLM 分支 v0.18.0(实际版本约为 v0.7.x),会导致 git clone 失败。
  • 版本不一致LD_LIBRARY_PATH 仍指向 CANN 8.5.1,与安装的 8.5.2 版本不匹配,可能引发运行时链接错误。
  • Python 包版本不匹配:指定的 torch、accelerate 等版本(如 torch==2.9.0)与官方版本不符,可能导致安装失败。
    作者 ruanhao566 回复“已修复”,表明这些问题在提交前已解决,但未在讨论中详细说明修复细节。

实现拆解

  1. 升级 Dockerfile 中的 CANN 版本:修改 docker/ascend/Dockerfile.ascend_8.5.2_a3_qwen3-5,从 CANN 8.5.1 升级到 8.5.2。关键变更包括:下载并安装 CANN 8.5.2 的 toolkit、A3-ops 和 nnal 组件,并更新 LD_LIBRARY_PATH 环境变量指向新版本路径。
  2. 同步 CI 工作流配置:更新 .github/workflows/docker-build-ascend-a3-qwen3_5.yml,将 Dockerfile 引用从 Dockerfile.ascend_8.5.1_a3_qwen3-5 改为 Dockerfile.ascend_8.5.2_a3_qwen3-5,并相应调整生成的镜像标签版本号。
  3. 修复 review 中发现的构建问题:根据 gemini-code-assist[bot] 的评论,修复了硬编码架构路径、vLLM 版本标签错误和 Python 包版本不匹配等问题,确保 Docker 镜像能在多架构(aarch64/x86_64)上正确构建。
文件 模块 状态 重要度
docker/ascend/Dockerfile.ascend_8.5.2_a3_qwen3-5 Docker 镜像 renamed 4.7
.github/workflows/docker-build-ascend-a3-qwen3_5.yml CI 流水线 modified 3.13

关键源码片段

docker/ascend/Dockerfile.ascend_8.5.2_a3_qwen3-5 rename-or-move

核心变更文件,定义了基于 CANN 8.5.2 的 Qwen3.5 Docker 镜像构建步骤,包括 CANN 升级、环境变量设置和依赖安装。

# 升级 CANN 到 8.5.2 并设置环境变量
RUN set -e && \
    cd /tmp && \
    # 下载并安装 CANN 8.5.2 toolkit(应根据 ARCH 变量选择 aarch64  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-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 && \
    # 类似地安装 A3-ops  nnal 组件
    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 && \
    source /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 && \
    source /usr/local/Ascend/cann/set_env.sh && \
    rm -rf /tmp/*
​
# 根据架构设置 LD_LIBRARY_PATH,指向 CANN 8.5.2 库路径
RUN ARCH=$(uname -m) && \
    if [ "$ARCH" = "aarch64" ]; then \
        export LD_LIBRARY_PATH=/usr/local/Ascend/cann-8.5.2/aarch64-linux/devlib/linux/aarch64:$LD_LIBRARY_PATH; \
    elif [ "$ARCH" = "x86_64" ]; then \
        export LD_LIBRARY_PATH=/usr/local/Ascend/cann-8.5.2/x86_64-linux/devlib/linux/x86_64/:$LD_LIBRARY_PATH; \
    fi && \
    source /usr/local/Ascend/ascend-toolkit/set_env.sh && \
    source /usr/local/Ascend/nnal/atb/set_env.sh

评论区精华

Dockerfile 构建问题修复 正确性

gemini-code-assist[bot] 指出多个构建问题:硬编码架构路径导致 x86_64 支持失败、vLLM 版本标签不存在、LD_LIBRARY_PATH 版本不匹配、Python 包版本错误。yyyy2000 提醒确认路径修改。

结论:作者 ruanhao566 回复“已修复”,但未提供细节;问题应在提交前解决。 · 已解决

风险与影响

  1. 构建失败风险:如果 review 中指出的问题(如架构路径、版本标签)未完全修复,Docker 镜像构建可能在 CI 或本地环境中失败。
  2. 运行时兼容性风险:升级 CANN 版本可能引入不兼容的 API 变化,影响基于该镜像的 FSDP 训练任务,需验证新镜像与现有训练脚本的兼容性。
  3. 多架构支持风险:Dockerfile 中涉及架构判断的逻辑(如 LD_LIBRARY_PATH 设置)若处理不当,可能导致在 x86_64 主机上运行时库路径错误。
  4. 依赖版本冲突风险:Python 包版本(如 torch)若指定不当,可能与其他依赖产生冲突,影响训练稳定性。
  1. 对用户的影响:使用 Qwen3.5 模型进行 Ascend NPU FSDP 训练的用户将获得基于 CANN 8.5.2 的更新 Docker 环境,可能带来性能提升或 bug 修复,但需重新拉取镜像并验证兼容性。
  2. 对系统的影响:CI 工作流将构建并推送新标签的镜像,旧镜像(基于 CANN 8.5.1)可能逐渐被替代,影响依赖旧版本的流水线。
  3. 对团队的影响:基础设施团队需维护多版本 Dockerfile,增加了版本管理复杂度;训练团队需测试新镜像以确保训练任务不受影响。
构建失败风险 版本兼容性风险 多架构支持风险

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论