Prhub

#6066 [recipe, cfg] fix: update NPU script parameters for Qwen3 GSPO and DAPO math recipes

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

执行摘要

修复 NPU 训练脚本参数,移除冗余环境变量并修正专家并行配置。

根据PR描述,在验证过程中发现了NPU配方脚本中的参数设置不正确或不一致,需要修复以确保脚本在NPU训练运行时的正确性和稳定性。具体来说,需要更新run_qwen3_32b_gspo_npu.shdapo_30b_a3b_math_fsdp_npu.sh两个脚本的参数设置。

该PR值得快速浏览以了解NPU训练脚本的配置细节,但不需要深入研读。重点关注review中关于enable_expert_parallel参数无效的讨论,这揭示了vLLM引擎配置参数的实际生效机制。对于需要在NPU上启用专家并行的用户,应该参考review建议设置expert_parallel_size参数。

讨论亮点

gemini-code-assist[bot]在review中指出了关键问题:在DAPO脚本中添加的enable_expert_parallel=True参数是无效的,因为该标志在verl/workers/rollout/vllm_rollout/vllm_async_server.py第311行会被显式覆盖。正确的启用方式应该是设置actor_rollout_ref.rollout.expert_parallel_size大于1(例如在8-GPU节点上为Qwen3-32B设置8)。这个讨论揭示了配置参数的实际生效逻辑,但PR作者没有根据这个反馈进行进一步修改。

实现拆解

  1. 移除GSPO脚本冗余环境变量:在examples/gspo_trainer/run_qwen3_32b_gspo_npu.sh中删除了export VLLM_ATTENTION_BACKEND=XFORMERS这一行,该变量在NPU环境中可能已过时或不需要。
  2. 尝试启用DAPO脚本专家并行:在verl/experimental/fully_async_policy/shell/dapo_30b_a3b_math_fsdp_npu.sh中添加了actor_rollout_ref.rollout.engine_kwargs.vllm.enable_expert_parallel=True参数,意图启用vLLM引擎的专家并行功能。
  3. review发现配置问题:gemini-code-assist[bot]在review中指出,直接设置enable_expert_parallel是无效的,因为该标志在vLLMHttpServer.launch_server中会被显式覆盖。正确的做法是设置actor_rollout_ref.rollout.expert_parallel_size > 1来启用专家并行。
文件 模块 状态 重要度
examples/gspo_trainer/run_qwen3_32b_gspo_npu.sh 示例脚本 modified 2.0
verl/experimental/fully_async_policy/shell/dapo_30b_a3b_math_fsdp_npu.sh 实验模块 modified 2.4

关键源码片段

examples/gspo_trainer/run_qwen3_32b_gspo_npu.sh configuration

GSPO 训练脚本,移除了可能过时的环境变量配置

# 环境变量配置部分
# 移除了 VLLM_ATTENTION_BACKEND=XFORMERS,该变量在 NPU 环境中可能不再需要
# 其他 NPU 相关配置保持不变
export HCCL_CONNECT_TIMEOUT=3600
export HCCL_ASYNC_ERROR_HANDLING=0
export CPU_AFFINITY_CONF=1
export VLLM_USE_V1=1
# export VLLM_ATTENTION_BACKEND=XFORMERS # 已移除
export VLLM_ASCEND_ENABLE_FLASHCOMM=1
export VLLM_ASCEND_ENABLE_PREFETCH_MLP=1
export VLLM_ASCEND_ENABLE_DENSE_OPTIMIZE=1
verl/experimental/fully_async_policy/shell/dapo_30b_a3b_math_fsdp_npu.sh configuration

DAPO 训练脚本,尝试启用专家并行但配置方式被 review 指出无效

# 训练启动命令参数部分
# 添加了 enable_expert_parallel 参数,但 review 指出该参数会被内部逻辑覆盖
# 正确的启用方式应该是设置 expert_parallel_size > 1
python3 -m verl.experimental.fully_async_policy.fully_async_main \
  actor_rollout_ref.rollout.val_kwargs.top_k=${top_k} \
  actor_rollout_ref.rollout.val_kwargs.do_sample=True \
  actor_rollout_ref.rollout.val_kwargs.n=1 \
  actor_rollout_ref.rollout.engine_kwargs.vllm.enable_expert_parallel=True \  # 新增但无效
  actor_rollout_ref.ref.fsdp_config.param_offload=${ref_offload} \
  actor_rollout_ref.actor.fsdp_config.fsdp_size=${fsdp_size} \
  # 应该改为:actor_rollout_ref.rollout.expert_parallel_size=8 # 例如在 8-GPU 节点上

评论区精华

enable_expert_parallel 参数无效性问题 设计

gemini-code-assist[bot] 指出直接设置 enable_expert_parallel=True 是无效的,因为该标志在 vLLMHttpServer.launch_server 中会被显式覆盖,正确的启用方式应该是设置 expert_parallel_size > 1。

结论:PR 中采用的配置方式不会生效,但作者没有根据反馈修改代码。 · unresolved

风险与影响

  1. 配置无效风险:DAPO脚本中添加的enable_expert_parallel=True参数实际上不会生效,可能导致用户误以为专家并行已启用,但实际运行时仍使用默认配置。
  2. 兼容性风险:移除VLLM_ATTENTION_BACKEND环境变量可能在某些特定硬件或软件版本下影响注意力后端的选择,但考虑到这是NPU专用脚本,风险较低。
  3. 回归风险:两个脚本的修改都很小,且不涉及核心训练逻辑,回归风险较低。
  1. 对用户的影响:使用这两个脚本进行NPU训练的用户会获得更简洁的环境配置(GSPO脚本),但DAPO脚本的专家并行配置实际上并未正确生效,用户需要手动调整expert_parallel_size参数。
  2. 对系统的影响:仅影响脚本级别的配置,不改变训练框架的核心逻辑或数据流。
  3. 对团队的影响:这是一个小的配置修复,维护成本低,但揭示了配置参数传递机制的知识点。
配置参数无效 缺少验证

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论