MindSpeed LLM MoE大模型训练指南:Qwen3-235B/DeepSeek-V3专家并行实战
【免费下载链接】MindSpeed-LLM昇腾LLM分布式训练框架项目地址: https://gitcode.com/Ascend/MindSpeed-LLM
MoE(Mixture of Experts,混合专家)是当前大模型的主流架构:Qwen3-235B、DeepSeek-V3 这类模型拥有上百到数百个"专家"FFN,参数动辄数百 B,单靠张量并行根本无法训动。MindSpeed LLM是昇腾生态的大语言模型分布式训练框架,内置完整的MoE 专家并行(Expert Parallelism, EP)能力,配套 Qwen3-235B-A22B、DeepSeek-V3 671B 的官方预训练脚本,从参数配置到通算重叠全部帮你调好,本文带你快速上手。
一、为什么 MoE 大模型必须用专家并行?
传统稠密模型靠TP(张量并行)+ PP(流水线并行)就能切分,但 MoE 的 FFN 部分是"128/256 个专家,每 token 只激活 8 个"的结构:
- 专家参数是稀疏激活的,沿张量切分无法降低单卡激活内存;
- Token 需要经过路由(Router)被分发到持有对应专家的卡上,天然适合"每卡持有部分专家"的专家并行切分。
MindSpeed LLM 基于 Megatron 后端的 MoE 实现(核心代码见 moe_layer.py、router.py),在 Qwen3-235B 和 DeepSeek-V3 上给出了两类典型调参范式,是理解 EP 配置的绝佳样本。
二、Qwen3-235B-A22B:16 节点专家并行配置
官方脚本 pretrain_qwen3_235b_a22b_4k_A3_ptd.sh 采用16 节点 × 16 NPU = 256 卡规模,并行策略为TP=1, PP=4, EP=32, VPP=8。MoE 相关参数节选:
TP=1 PP=4 EP=32 # 专家并行规模 VPP=8 # 虚拟流水线 MBS=1 GBS=1024 MOE_ARGS=" --num-experts 128 \ --moe-router-topk 8 \ --moe-ffn-hidden-size 1536 \ --moe-router-load-balancing-type aux_loss \ --norm-topk-prob \ --moe-grouped-gemm \ --moe-token-dispatcher-type alltoall_seq \ --moe-aux-loss-coeff 0.001 \ --moe-permutation-async-comm \ --moe-alltoall-overlap-comm \ --moe-layer-freq -1 \ --first-k-dense-replace -1 \ "Qwen3-235B 关键 MoE 参数解读
| 参数 | 值 | 作用 |
|---|---|---|
--num-experts | 128 | 每层专家总数 |
--moe-router-topk | 8 | 每个 token 激活的专家数(激活参数约 22B 的来源) |
--expert-model-parallel-size | 32 | 128 个专家按 32 卡切分,每卡持 4 个专家 |
--moe-token-dispatcher-type | alltoall_seq | 基于 AllToAll 的 Token 分发,天然兼容 TP 组合扩展 EP |
--moe-grouped-gemm | 开 | 分组 GEMM,把多个专家的小矩阵乘合并成大 GEMM,大幅提升 NPU 利用率 |
--moe-aux-loss-coeff | 0.001 | 负载均衡辅助损失系数,防止 token 全部涌向少数专家 |
--moe-permutation-async-comm/--moe-alltoall-overlap-comm | 开 | 重排与 AllToAll 通信异步化、与计算重叠,隐藏通信耗时 |
--first-k-dense-replace | -1 | 不做前几层稠密替换(Qwen3 全层都是 MoE) |
💡 注意 Qwen3 脚本中
TP=1配EP=32:MindSpeed LLM 提供了TP 扩展 EP特性(tp_extend_ep.py),alltoall_seq分发器下可将 TP 切分的专家权重重组为 EP 布局,在不引入张量并行通信开销的前提下放大专家并行规模——这是 MoE 训练区别于稠密模型的重要技巧。
三、DeepSeek-V3 671B:512 卡 EP + DualPipe 实战
pretrain_deepseek3_671b_4k_A3_ptd.sh 是仓库中最重量级的脚本:32 节点 × 16 NPU = 512 卡,TP=2, PP=8, EP=32,并叠加了 MTP、MLA 等 DeepSeek 特色能力。其 MoE 配置与 Qwen3 有明显差异:
MOE_ARGS=" --moe-grouped-gemm \ --moe-permutation-async-comm \ --moe-token-dispatcher-type alltoall \ --first-k-dense-replace 3 \ # 前 3 层为稠密 FFN --moe-layer-freq 1 \ --moe-shared-expert-intermediate-size 2048 \ # 共享专家 --num-experts 256 \ --moe-router-topk 8 \ --moe-ffn-hidden-size 2048 \ --moe-router-num-groups 8 \ --moe-router-group-topk 4 \ --moe-router-score-function sigmoid \ --moe-router-enable-expert-bias \ # 路由专家偏置,辅助负载均衡 --seq-aux \ " DUALPIPE_ARGS=" --moe-fb-overlap \ --schedules-method dualpipev \ # DualPipe 流水线调度 "两个模型的并行策略对比
| 配置项 | Qwen3-235B-A22B | DeepSeek-V3 671B |
|---|---|---|
| 卡数 | 256(16 节点) | 512(32 节点) |
| TP / PP / EP | 1 / 4 / 32 | 2 / 8 / 32 |
| 专家数 / topk | 128 / 8 | 256 / 8(+共享专家) |
| Token 分发器 | alltoall_seq | alltoall |
| 负载均衡 | aux_loss(系数 0.001) | sigmoid 路由 + expert bias + seq-aux |
| 流水线 | VPP=8 | DualPipe(dualpipev+ MoE forward-backward overlap) |
| 特色 | TP 扩展 EP | MLA + MTP + YARN 长上下文 |
从对比可以总结出两条调参经验:
- EP 规模 = 每层专家数能整除的卡数。两模型都取 EP=32:Qwen3 每卡 4 个专家,DeepSeek 每卡 8 个专家 + 共享专家,单卡显存压力可控;
- 路由负载均衡方案要跟着模型走。Qwen3 用经典的 aux_loss,DeepSeek-V3 则用 sigmoid 打分 + 专家偏置(expert bias)的无 aux 方案,直接复现原模型的 Router 行为,保证训练一致性。
四、底层实现:Token 分发与专家计算是怎么做的?
MindSpeed LLM 的 MoE 执行链路大致为:路由打分 → TopK 选择 → Token 重排(Permutation)→ AllToAll 跨卡分发 → 各卡专家 Grouped GEMM 计算 → 反向分发 → 还原顺序。相关实现分布在:
- moe_layer.py:MoE 层主逻辑,分发与聚合;
- router.py:路由器,支持 softmax/sigmoid 打分与 aux-loss;
- moe_router.py、shared_expert.py:MoE 路由与共享专家的特性增强;
- tp_extend_ep.py:TP 权重重组为 EP 布局的补丁注册。
通信开销是 MoE 训练的性能瓶颈,脚本中--moe-permutation-async-comm(重排异步通信)与--moe-alltoall-overlap-comm(AllToAll 通算重叠)两个开关就是为此设计;DeepSeek 脚本进一步用--moe-fb-overlap让 MoE 层的前反向通信与流水线 bubble 重叠。
五、训练日志与工程化建议
训练拉起后,日志每步输出 loss 与学习率,格式参考快速入门文档 quick_start.md。
新手实操清单 ✅:
- 先改四件事:脚本顶部的
CKPT_LOAD_DIR(HF 权重)、DATA_PATH、TOKENIZER_PATH、CKPT_SAVE_DIR; - 并行度按卡数反推:
TP × PP × EP × DP = 总卡数,MoE 模型优先保 EP,再配 PP/VPP; - 权重可直接用 HF 格式加载:
--enable-hf2mg-convert --model-type-hf qwen3-moe会自动转换,省去手动转换步骤; - 显存不足先加重计算:两脚本均使用
--recompute-granularity full --recompute-method block --recompute-num-layers 8,可按需调大--recompute-num-layers。
更多 MoE 优化特性(GMM 分组 GEMM、重排通信优化等)可在特性总览 features/README.md 中查阅;Qwen3-30B-A3B 的小规模脚本 pretrain_qwen3_30b_a3b_4K_ptd.sh 适合先用少量卡跑通全流程,再升级到 235B 的大规模配置。
总结
- MindSpeed LLM 把 MoE 专家并行做成了"改脚本变量即可用"的完整方案,Qwen3-235B 与 DeepSeek-V3 两条脚本覆盖了 MoE 训练的两大主流范式;
- 核心抓手是EP 规模选择 + Token 分发器 + 通算重叠开关,配合 Grouped GEMM 释放 NPU 算力;
- 借助 TP 扩展 EP、DualPipe 等特性,数百卡规模下的 MoE 预训练也能获得稳定的线性加速。
掌握这两份脚本的配置逻辑,你就能举一反三地适配更多 MoE 架构的模型训练。
【免费下载链接】MindSpeed-LLM昇腾LLM分布式训练框架项目地址: https://gitcode.com/Ascend/MindSpeed-LLM
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考