Prhub

#6582 [model] feat: add Qwen3.5-122B Ascend support

原始 PR 作者 zjchenn 合并时间 2026-06-03 16:17 文件变更 1 提交数 1 评论 9 代码增减 +89 / -20

执行摘要

支持 Qwen3.5-122B-A10B 在 Ascend NPU 上运行

PR body 说明:"This PR makes the Qwen3.5-122B-A10B Megatron GRPO script compatible with both GPU and Ascend NPU. It keeps the original GPU defaults and flow, adds DEVICE=gpu|npu auto-detection, and configures the NPU path for 4 nodes with Megatron settings aligned with the existing Qwen3.5-35B compatible script."

该 PR 展示了多硬件场景下使用 shell 脚本进行配置分离的模式,结构清晰,但仍存在未解决的 review 问题。建议阅读以了解硬件适配方法,但在实际使用 NPU 任务前,应检查并补全缺失的 Ref 配置项和全局化公共步骤。

讨论亮点
  • Critical 配置缺失:gemini-code-assist[bot] 指出 actor_rollout_ref.ref.megatron.use_remove_padding=Falseactor_rollout_ref.ref.megatron.vanilla_mbridge=False 未设置,可能导致 GDN 线性注意力运行时失败或 NPU 初始化崩溃。最终代码未修正。
  • 全局化建议:gemini-code-assist[bot] 建议 http_proxy / https_proxy 的 unset 以及 geo3k 数据集下载应移至全局范围,而非仅在 GPU 分支执行;否则 NPU 运行可能因代理或缺少数据出错。
  • 公共参数位置:wucong25 指出公共参数(如 TP、PP)不应在 case 内重复定义,应统一在脚本外部设置。最终代码中部分参数仍在 case 内。
  • 容器镜像链接:beirong8kmiles 要求添加 NPU 容器镜像链接以方便环境搭建,合并版本是否已添加未确认。

实现拆解

  1. 设备自动检测:在脚本开头通过 python3 -c 'import torch_npu' 探测是否存在 torch_npu,自动设置 DEVICE=npugpu;用户也可通过环境变量覆盖。
  2. 环境变量分离:针对 GPU 和 NPU 分别配置环境变量(如 CUDA_VISIBLE_DEVICES 和 NPU 特有的 OMP_NUM_THREADS、HCCL_* 等),封装在 case 语句内。
  3. 并行与超参数差异化:TP/PP/EP/GEN_TP 等根据设备赋予不同的默认值(GPU:PP=2 EP=8;NPU:PP=4 EP=16);训练微批次大小、log_prob 批次大小、参考模型批次大小等也分别设置。
  4. Actor 模型配置:GPU 时设置 MoE 负载均衡和 rope_fusion;NPU 时设置 vanilla_mbridge=False 禁用标准 Megatron-Bridge 以适配 MindSpeed。Ref 模型对应配置(use_remove_padding=Falsevanilla_mbridge=False)在合并版本中缺失,构成主要 review 争议。
文件 模块 状态 重要度
examples/grpo_trainer/run_qwen3_5_122b_a10b_megatron.sh 启动脚本 modified 5.62

关键源码片段

examples/grpo_trainer/run_qwen3_5_122b_a10b_megatron.sh core-logic

唯一变更文件,增加 NPU 支持的核心脚本,包含设备检测、环境配置、并行参数分离和模型配置调整。

# DEVICE auto-detect via torch_npu; override via environment variable
DEVICE=${DEVICE:-$(python3 -c 'import torch_npu' 2>/dev/null && echo npu || echo gpu)}case "${DEVICE}" in
  gpu)
    # GPU: set CUDA_VISIBLE_DEVICES, unset proxy (should be global per review)
    export CUDA_VISIBLE_DEVICES=${CUDA_VISIBLE_DEVICES:-0,1,2,3,4,5,6,7}
    unset http_proxy
    unset https_proxy
    # Dataset download only in gpu branch; review suggested global scope
    hf download tyzhu/geo3k --repo-type dataset --local-dir $HOME/data/geo3k
    ;;
  npu)
    # NPU: configure environment for Ascend/MindSpeed
    export CPU_AFFINITY_CONF=${CPU_AFFINITY_CONF:-1}
    export OMP_NUM_THREADS=${OMP_NUM_THREADS:-1}
    export PYTORCH_NPU_ALLOC_CONF=${PYTORCH_NPU_ALLOC_CONF:-garbage_collection_threshold:0.8}
    export HCCL_CONNECT_TIMEOUT=${HCCL_CONNECT_TIMEOUT:-5400}
    export HCCL_BUFFSIZE=${HCCL_BUFFSIZE:-300}
    export TASK_QUEUE_ENABLE=${TASK_QUEUE_ENABLE:-1}
    export COMBINED_ENABLE=${COMBINED_ENABLE:-1}
    export TOKENIZERS_PARALLELISM=${TOKENIZERS_PARALLELISM:-false}
    export RAY_DEDUP_LOGS=${RAY_DEDUP_LOGS:-0}
    export VLLM_ASCEND_ENABLE_NZ=${VLLM_ASCEND_ENABLE_NZ:-0}
    ;;
  *)
    echo "Unsupported DEVICE=${DEVICE}. Expected 'gpu' or 'npu'." >&2
    exit 1
    ;;
esac

(代码展示了设备自动检测和基础环境配置,但注意 review 意见中建议 proxy unset 和数据集下载应全局化,当前版本仅在 gpu 分支执行。)

评论区精华

Ref 模型 use_remove_padding 缺失 正确性

gemini-code-assist[bot] 指出 actor_rollout_ref.ref.megatron.use_remove_padding=False 未设置,GDN 线性注意力不支持 packed 序列,可能导致运行时失败。

结论:未在最终代码中修复;PR 仍被合并。 · unresolved

Ref 模型 vanilla_mbridge 缺失 正确性

gemini-code-assist[bot] 指出 ref.megatron.vanilla_mbridge=False 未设置,NPU 上会使用标准 Megatron-Bridge 导致初始化失败。

结论:未在最终代码中修复;PR 仍被合并。 · unresolved

公共参数位置 设计

wucong25 指出公共参数(如 TP、PP)不应在 case 内重复定义,应统一在外设置。

结论:最终代码中部分参数仍在 case 内定义,未完全采纳。 · unresolved

风险与影响

  • 脚本中 Ref 模型缺少 use_remove_padding=False,在 Qwen3.5 GDN 架构下可能导致序列打包模式下的运行时错误。
  • 缺少 vanilla_mbridge=False 使 Ref 模型在 NPU 上可能加载错误的 Megatron-Bridge,导致初始化崩溃。
  • 环境变量 http_proxyhttps_proxy 仅在 GPU 分支 unset,当 NPU 环境存在代理时,多节点通信可能被代理拦截;数据集下载仅限 GPU 分支,NPU 执行前需手动准备数据。
  • 但这些风险仅影响 NPU 运行路径,GPU 路径保持不变。
  • 用户:需要运行 Qwen3.5-122B 在 NPU 上的 RL 训练的用户可以基于此脚本快速配置;但应注意 review 中暴露的未解决问题,可能需额外调试。
  • 团队:新增一条硬件适配路径,但维护需跟进;review 中的问题可作为后续 PR 改善方向。
  • 系统:无核心库改动,仅示例脚本变更,风险可控。
Ref 模型配置遗漏 环境变量未全局化 数据集下载仅限 GPU

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论