Prhub

#6098 [fsdp] feat: Qwen3.5 Adds Docker Files Based on CANN8.5.2 A2

原始 PR 作者 ruanhao566 合并时间 2026-04-21 21:36 文件变更 2 提交数 1 评论 4 代码增减 +228 / -0

执行摘要

新增基于 CANN 8.5.2 A2 的 Qwen3.5 Docker 镜像构建文件,支持多架构 CI/CD 流水线。

PR标题和提交信息表明,需要为Qwen3.5模型在Ascend NPU平台上提供基于CANN 8.5.2 A2的Docker镜像构建能力。结合近期历史PR(如#6066、#5967)中对NPU平台支持、脚本参数和补丁的持续优化,此PR旨在扩展基础设施支持,为特定硬件(Ascend 910b1)和模型(Qwen3.5)提供标准化的部署环境。

该PR主要涉及基础设施,对核心算法或训练逻辑无直接影响,适合负责部署或NPU平台的工程师精读。重点关注Dockerfile中的安全警告(证书验证)和环境变量持久化问题,这些是镜像可靠性的关键。设计上展示了多架构镜像构建的CI/CD模式,值得借鉴。

讨论亮点

review中gemini-code-assist[bot]提出了三个关键问题:

  1. 安全风险:Dockerfile中使用wget --no-check-certificate绕过SSL/TLS验证,存在中间人攻击风险,建议更新ca-certificates并移除该标志。
  2. 性能影响:全局设置MAX_JOBS=1等环境变量会显著降低所有后续构建步骤的速度,建议仅针对特定命令(如vllm-ascend安装)设置。
  3. 环境变量持久性:在RUN指令中使用sourceexport设置的环境变量不会持久化到后续步骤或容器运行时,可能导致Ascend环境设置缺失,建议使用ENV指令或写入/etc/bash.bashrc
    这些评论均未在PR中直接回复或解决,但PR已被wucong25批准合并,表明团队可能接受这些风险或计划后续处理。

实现拆解

  1. 新增Dockerfile定义镜像构建步骤:在docker/ascend/Dockerfile.ascend_8.5.2_a2_qwen3-5中,基于官方CANN 8.5.1基础镜像,升级到CANN 8.5.2,安装系统依赖,并克隆vllm、vllm-ascend等仓库,最后安装verl项目。
  2. 新增CI/CD工作流实现自动化构建:在.github/workflows/docker-build-ascend-a2-qwen3_5.yml中,定义GitHub Actions工作流,支持手动触发,使用矩阵策略并行构建amd64和arm64架构镜像,通过Buildx推送镜像层,并合并为多架构镜像后打上标签verl-8.5.2-910b-ubuntu22.04-py3.11-qwen3-5
  3. 配置构建参数与安全措施:工作流中配置了Quay.io仓库推送、缓存优化和磁盘清理步骤,但Dockerfile中使用了--no-check-certificate等存在安全风险的命令(已在review中提出)。
文件 模块 状态 重要度
docker/ascend/Dockerfile.ascend_8.5.2_a2_qwen3-5 Docker 配置 added 5.8
.github/workflows/docker-build-ascend-a2-qwen3_5.yml CI 流水线 added 5.46

关键源码片段

docker/ascend/Dockerfile.ascend_8.5.2_a2_qwen3-5 infrastructure

定义了基于 CANN 8.5.2 A2 的 Qwen3.5 Docker 镜像构建步骤,是核心基础设施文件。

# 基于官方 CANN 8.5.1 基础镜像
FROM swr.cn-south-1.myhuaweicloud.com/ascendhub/cann:8.5.1-910b-ubuntu22.04-py3.11ARG SOC_VERSION="ascend910b1"# 安装系统依赖,包括 gcc、cmake、wget 等
RUN apt-get update -y && \
    apt-get install -y --no-install-recommends gcc g++ cmake libnuma-dev wget git curl jq vim build-essential && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* && \
    pip install --upgrade pip packaging setuptools==80.10.2 && \
    pip cache purge
​
# 升级 CANN 到 8.5.2 版本,根据架构下载并安装
RUN set -e && \
    cd /tmp && \
    ARCH=$(uname -m) && \
    if [ "$ARCH" = "aarch64" ]; then \
        # 注意:使用--no-check-certificate存在安全风险,应移除
        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 && \
        # 类似步骤安装其他组件...
    elif [ "$ARCH" = "x86_64" ]; then \
        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 && \
        # 类似步骤安装其他组件...
    fi && \
    source /usr/local/Ascend/cann/set_env.sh && \  # 环境变量未持久化,可能导致后续步骤缺失
    rm -rf /tmp/*
​
# 克隆 vllm 和 vllm-ascend 仓库,为后续安装准备
RUN ARCH=$(uname -m) && \
    echo "[LOG INFO] Detected architecture: $ARCH" && \
    if [ "$ARCH" = "x86_64" ]; then \
        pip config set global.extra-index-url "https://download.pytorch.org/whl/cpu/"; \
    fi && \
    git clone --depth 1 --branch v0.18.0 https://github.com/vllm-project/vllm.git && \
    git clone https://github.com/vllm-project/vllm-ascend.git && \
    cd vllm-ascend && git checkout 0.1.0 && cd ..
​
# 设置全局构建并行度限制,可能影响性能
ENV MAX_JOBS=1 \
    MAKEFLAGS="-j1" \
    CMAKE_BUILD_PARALLEL_LEVEL=1# 安装 verl 项目
RUN pip install -e .

评论区精华

Dockerfile 安全风险:使用 --no-check-certificate 安全

gemini-code-assist[bot] 指出 wget 命令使用 --no-check-certificate 绕过 SSL/TLS 验证,存在中间人攻击风险。

结论:建议更新 ca-certificates 并移除该标志,但 PR 中未直接回应。 · unresolved

构建性能:全局并行度限制 性能

gemini-code-assist[bot] 指出全局设置 MAX_JOBS=1 等环境变量会显著降低构建速度。

结论:建议仅针对特定命令设置,但 PR 中未修改。 · unresolved

环境变量持久性:source 命令不持久 正确性

gemini-code-assist[bot] 指出在 RUN 指令中使用 source 设置的环境变量不会持久化,可能导致后续步骤缺失 Ascend 环境。

结论:建议使用 ENV 指令或写入 bashrc,但 PR 中未调整。 · unresolved

风险与影响

  1. 安全风险:Dockerfile中wget --no-check-certificate绕过证书验证,可能引入恶意软件或中间人攻击,影响镜像完整性。
  2. 性能风险:全局构建并行度限制(MAX_JOBS=1)会显著延长镜像构建时间,尤其在CI/CD流水线中可能成为瓶颈。
  3. 环境配置风险:Ascend环境变量(如LD_LIBRARY_PATH)未持久化,可能导致容器运行时依赖库缺失,引发运行时错误。
  4. 兼容性风险:镜像基于特定CANN版本(8.5.2)和硬件(Ascend 910b1),可能不适用于其他NPU型号或CANN版本。
  1. 对用户的影响:为在Ascend NPU上运行Qwen3.5模型的用户提供了标准化的Docker镜像,简化了环境部署,但需注意安全警告。
  2. 对系统的影响:新增了CI/CD流水线,增加了仓库的自动化构建能力,但未修改核心训练或推理逻辑,不影响现有功能。
  3. 对团队的影响:扩展了基础设施支持范围,与近期NPU相关PR(如#6066、#5967)形成协同,但引入的安全和性能问题需后续关注。
安全风险:证书验证绕过 性能风险:全局构建并行度限制 环境配置风险:变量未持久化

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论