Pull Request已成功合入, 合并人@ascend-robot
(感谢 且奏长歌 的贡献)变更摘要
本 PR 主要为在 MindSpeed MM 上适配 Qwen3.8-2.4T-A98B 模型,核心改动集中在 Qwen3_5MoeForCausalLM 上:新增 qwen3_8_moe 模型注册、加入 MultiTokenPredictionBlock(MTP)支持,并通过新增的 overwrite_transformer_config 方法统一覆写 GDN、causal conv1d、flash attention 重计算、MTP、chunk loss、EP balance 等配置;同时在 forward 中补充了 chunk loss 计算分支和 CP 组上的 loss 聚合。此外新增了 qwen3_8 的训练启动脚本与对应配置 YAML,配置了 FSDP/EP 并行、数据加载、模型参数及优化特性等。
主要改动
- 新增微调启动脚本
finetune_qwen3_8_2_4T.sh:设置 NPU 相关环境变量、torchrun分布式参数并调用mindspeed_mm/fsdp/train/trainer.py启动训练,同时在日志中统计每步耗时与吞吐。 - 新增训练配置
qwen3_8_2_4T_config.yaml:定义 FSDP/EP 并行策略、数据预处理与加载、qwen3_8_moe模型参数、重计算/chunk loss/activation offload/chunk mbs/EP balance 等特性配置。 - 注册
qwen3_8_moe模型并支持 MTP:在Qwen3_5MoeForCausalLM上添加@model_register.register("qwen3_8_moe"),并根据config.mtp_num_layers实例化MultiTokenPredictionBlock。 - 新增
overwrite_transformer_config配置覆写方法:将gdn_implementation、causal_conv1d_implementation、skip_flash_attn_recompute、skip_gdn_recompute、use_grouped_expert_matmul、router_aux_loss_coef、mtp_num_layers、enable_chunk_loss、enable_ep_balance等写入 transformer 配置,并对非法组合进行校验。 - 调整
forward的 loss 计算逻辑:在开启enable_chunk_loss/enable_dynamic_chunk_loss时将logits置空并直接调用self.lm_head计算 loss,同时在启用 CP 时对 loss 执行gather_forward_split_backward聚合后求和。


代码审查
已完成对全部 3 个变更文件的逐项审查。结论汇总如下。
审查结论
发现数(按优先级)
- P0:0
- P1:0
- P2:2
- P3:4
- 合计:6
整体风险判断:中等偏低。核心 Python 变更整体是参照既有 Qwen3_5MoeForConditionalGeneration 的移植,结构一致、无 P0/P1 级别的确定性崩溃;最实质的问题是文本模型创建了 MTP 模块却从不计算 MTP loss(P2,功能静默失效),以及示例 shell 中未加引号的 rm -rf 破坏性操作(P2)。其余为潜在触发(CP 下 aux loss 缩放不一致)或示例脚本/配置的健壮性与一致性小问题(P3)。
逐文件确认
mindspeed_mm/fsdp/models/qwen3_5_moe/modeling_qwen3_5_moe.py:已审查。发现 2 项(MTP 模块未接入 forward;主 loss 做 CP 聚合而 aux loss 未聚合)。examples/qwen3_8/finetune_qwen3_8_2_4T.sh:已审查。发现 3 项(rm -rf $TRITON_CACHE_DIR/*未加引号且路径硬编码;缺少set -euo pipefail导致训练失败被tee掩盖;统计段 awk 空值/除零)。examples/qwen3_8/qwen3_8_2_4T_config.yaml:已审查。发现 1 项(文本模型却沿用model_name: qwen3vl及多模态数据配置,低置信度,疑似模板复制残留)。
| 类型 | 数量 |
|---|---|
| 🔴 阻塞 | 0 |
| 🟡 建议 | 1 |
💬 仅评论


/approve


Pull Request 已合并或已关闭。
If you want to solve this problem, you can click here to do it in the FAQs.


Pull Request 已合并或已关闭。
If you want to solve this problem, you can click here to do it in the FAQs.


What this PR does / why we need it?
feat: Adapt Qwen3.8 on MindSpeed MM.https://gitcode.com/Ascend/MindSpeed-MM/issues/565
Does this PR introduce any user-facing change?
新增qwen3.8系列模型SFT微调脚本和README.md
How was this patch tested?
长跑loss下降,与GPU精度对齐,开箱MFU达到要求