文章

MoE混合专家模型原理

MoE混合专家模型原理

MoE混合专家模型原理

MoE(Mixture of Experts,混合专家)是当前大模型扩展参数量的一条重要路线:总参数量可以很大,但每个 token 前向时只激活其中一小部分「专家」子网络,从而在可控算力下逼近更大稠密模型的效果。本文从 MoE 与稠密模型的差异、专家机制、训练与推理特点、命名规则等维度做技术综述,面向选型与部署前的概念厘清,非训练实操手册。

参考与延伸阅读


目录


1. MoE 与稠密模型的核心差异

维度稠密模型(Dense)MoE 模型(Mixture of Experts)
参数激活方式每个 token 前向时,几乎全部参数参与计算每个 token 只激活 少数几个专家子网络
典型改动位置每层 FFN 为 一组 MLP每层 FFN 拆为 多组并行 Expert + Router(门控)
参数量 vs 算力总参数 ≈ 单次计算量,基本 1:1总参数量大,单次推理 活跃参数(Active Params)少
设计目标结构成熟、部署路径清晰用更少算力,换取接近更大稠密模型的能力

一句话概括:稠密模型是「全员上场」;MoE 是「按需点名几个专家上场」。

常见代表:

类型示例
稠密Qwen3-32BLlama-3-8B
MoEMixtral-8×7BQwen3-30B-A3BDeepSeek-V3

2. MoE 工作机制

MoE 主要改造 Transformer 中的 FFN(前馈层);Attention 层在多数架构中仍为稠密。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
输入 token 的隐状态(hidden state)
    │
    ▼
Attention(稠密,全参数参与)
    │
    ▼
Router(门控网络)──→ 为每个 Expert 打分
    │
    ▼
Top-K 选择(如 K=8)──→ 只激活得分最高的 K 个 Expert
    │
    ▼
各 Expert 分别计算 FFN,按 Router 权重加权求和
    │
    ▼
输出到下一层
组件作用
Expert一组独立的 FFN 权重,结构相同、参数各自独立
Router / Gate根据当前 token 隐状态,决定调用哪些专家、权重多少
Top-K稀疏激活的关键:从 N 个专家中只选 K 个参与本次计算

Qwen3-30B-A3B 为例:128 个路由专家,每个 token 激活 Top-8,约 11% 的 FFN 专家参与单次前向。


3. 专家的定义与分工方式

3.1 专家在结构上是什么

专家不是人工划分的知识库分区,而是同一 MoE 层里多套结构相同的 FFN。

问题结论
专家由谁定义?架构设计时确定 专家总数 N;具体权重由 训练学习
是否人工标注「专家 1 学数学」?,训练数据没有「领域 → 专家」标签
路由粒度通常为 每个 token,不是整句或整道题
知识存在哪?主要在 全模型参数(Embedding、Attention、各层)中;专家更像 计算通路分工,而非独立百科

稠密层与 MoE 层对比:

1
2
3
4
5
6
稠密 FFN 层:
  Attention → [ 一个 FFN ] → 下一层

MoE FFN 层:
  Attention → Router → [ Expert 0 | Expert 1 | … | Expert 127 ]
                         ↑ 本次只激活其中 8 个

3.2 分工如何形成:涌现而非预设

专家分工属于 涌现式专业化(Emergent Specialization)

  1. 初始化时 N 个专家结构相同、权重随机不同;
  2. 训练中 Router 与专家权重同步更新;
  3. Router 逐渐学会把 某类 token 特征 更常分发给某几个专家;
  4. 事后分析可能观察到某些专家更常处理代码、语法或情感等模式——但这是 统计规律,不是训练前写死的「语数英分科」。

3.3 与「每专家负责一科」的直觉对比

常见误解实际情况
专家 1 = 语文,专家 2 = 数学❌ 无硬编码领域标签
一道数学题只走「数学专家」❌ 按 token 路由,同一句内不同 token 可走不同专家
知识锁在某个专家里❌ 分工 软、重叠、不稳定

更贴切的比喻:不是 8 位专科医生各管一科,而是 128 条并行工位,每个字按特征被分到 8 个工位加工,工位偏好是练出来的,不是人事表事先规定的。

1
2
3
4
5
6
7
8
9
10
11
用户问:「牛顿第二定律是什么?」
        │
        ▼  拆成 token 逐个处理
   [牛] [顿] [第] [二] [定] [律] …
     │    │    │    │    │    │
     ▼    ▼    ▼    ▼    ▼    ▼
  各 token 在 128 个专家中的 Top-8 组合可以不同
     │    │    │    │    │    │
     └────┴────┴────┴────┴────┘
                    ▼
            合并成完整回答

4. Top-K 与专家数量的设计取舍

4.1 两个数字不要混淆

Qwen3-30B-A3B 为例:

数字含义
128专家池总量(Total Experts)——决定 总参数量与显存
8每 token 激活数(Top-K)——决定 单次推理算力
1
2
128 = 池子里一共有多少套 FFN
  8 = 每个 token 实际调用几套

4.2 为何常见 Top-8 而非 Top-7

没有「必须是 8」的数学定理,属于超参数与工程权衡:

因素说明
算力预算K 越大,每 token 计算越多;K 越小,表达力可能不足
负载均衡K 过大时专家利用率更难均衡
硬件友好2 的幂(2 / 4 / 8 / 16)在 GPU / NPU 并行与张量切分上更常见,故 8 比 7 更普遍
行业配方同类 MoE(Qwen3、DeepSeek-V3 等)多采用 Top-8,便于复现与对标

不同模型的 K 并不统一:

模型总专家数每 token 激活(Top-K)
Mixtral 8×7B82
Qwen3-30B-A3B1288
部分早期 MoE16 / 64 等1 或 2

5. MoE 的主要优缺点

5.1 优点

优点说明
算力效率更高相同 FLOPs 下,MoE 往往强于同算力规模的稠密模型
扩展总参数量相对「便宜」增加专家主要增加存储与训练成本,单次推理算力增长较温和
适合做大容量模型固定推理算力预算下,有机会逼近更大稠密模型
Serving 可优化专家可分布式部署、分片加载,利于大规模在线推理

5.2 缺点

缺点说明
显存占用大通常需加载 全部专家权重,按 总参数量 估显存
训练更复杂Router、负载均衡、专家利用率、多卡通信均是难点
负载不均衡少数「热门专家」过载、多数专家闲置(Expert Collapse)
通信开销多卡场景下专家分布带来 All-to-All 等通信成本
微调与对齐更讲究SFT、LoRA、RLHF / DPO 需考虑是否冻结 Router、是否只训部分专家
工程门槛高相对稠密模型,实现、调试与内核优化难度更大

6. 训练与推理侧的不同特点

这是选型时最容易混淆的一点:训练复杂、推理显存看总量、推理速度看激活量——但「更快」要和谁比。

6.1 训练侧

MoE 训练除常规预训练 / SFT 外,还需处理:

  • Router 如何把 token 分给各专家;
  • 负载均衡损失(避免专家坍塌);
  • 多卡上专家的切分与 All-to-All 通信;
  • 微调时是否冻结 Router、是否只更新部分专家。

整体工程和调参难度 通常高于 同规模稠密模型。

6.2 推理显存:按总参数,不按激活参数

指标看哪个数以 Qwen3-30B-A3B 为例
显存占用总参数量(Total)30.5B 权重需加载(除非量化、专家卸载、多卡分片)
算力 / FLOPs激活参数量(Active)3.3B 参与单次前向计算

常见误区:把 A3B 当成显存估算依据——除非做了专门优化,否则应按 ~30B 规划显存。

6.3 推理速度:对比对象决定结论

对比对象速度结论说明
MoE(30B 总 / 3B 激活)vs 30B 稠密MoE 快很多算力差约一个数量级
MoE(30B 总 / 3B 激活)vs 3B 稠密接近,MoE 可能略慢算力相近,但 MoE 有路由开销与更大权重访存
MoE vs 同能力档稠密(如 14B~32B)往往 更快或相当这也是线上选型的常见比较维度
1
2
3
4
选型口诀:
  显存  → 看 Total(如 30B)
  速度  → 看 Active(如 A3B)
  能力  → 往往介于两者之间

6.4 场景选型简表

场景更合适的选择
单机消费级 GPU、追求部署简单稠密小模型(7B / 8B / 14B)
显存充足、要「大容量 + 可控算力」MoE
边缘设备、极低延迟小稠密模型 通常更现实
超大规模在线服务、专家可分布式MoE 更有优势

7. MoE 模型命名规则

业界没有唯一官方标准,但常见两类记法。

7.1 N×M 记法(Mixtral 等)

N = 专家数量,M = 每个专家的规模量级(通常指 FFN 侧等效参数,单位 B = Billion)

名称常见读法
Mixtral 8×7B8 个专家,每个约 7B 量级;总参数约 47B,每次激活约 13B
Mixtral 8×22B8 个专家,每个约 22B 量级;总参数约 141B,每次激活约 39B

注意:8×7B 不等于 总参数 56B——还有 Attention、Embedding、Router 等共享部分。

7.2 Total-AActive 记法(Qwen3 起)

Qwen3 对 MoE 采用 总参数-A激活参数 格式,激活部分用 A 前缀

名称含义
Qwen3-30B-A3B总约 30B,每 token 激活约 3B
Qwen3-235B-A22B总约 235B,每 token 激活约 22B

稠密模型则只写一个数,如 Qwen3-32B 表示约 32B 参数 全部参与计算

7.3 常见附加标注

标注含义
Total Params所有专家 + 共享层 + Router 等全部参数
Active Params单个 token 前向时实际参与计算的参数量
Top-K每 token 选几个专家
Shared Expert部分架构有「共享专家」,每 token 必过,其余再路由(DeepSeek-V2 / V3 等)

8. 案例:Qwen3-30B-A3B 命名解读

1
2
3
4
5
Qwen3  -  30B  -  A3B
  │        │       │
  │        │       └── 激活参数量:每 token 约 3.3B 参与计算
  │        └────────── 总参数量:约 30.5B(需加载进显存)
  └─────────────────── 第三代 Qwen 系列
项目数值(官方模型卡)
总参数量30.5B(非 Embedding 约 29.9B)
激活参数量3.3B
层数48
专家总数128
每 token 激活专家8(Top-8)
原生上下文32,768 tokens(YaRN 可扩展至 131,072)

部署时的正确理解:

维度应如何理解
显存~30B 规划,不是 3B
推理速度更接近 ~3B 稠密 的算力档位
能力因可调用 128 路专家,效果常强于同算力小稠密模型

9. 小结

要点结论
与稠密模型差异稠密全参数激活;MoE 用 Router 每 token 只激活少数 Expert
专家是什么多套结构相同的 FFN;分工靠训练涌现,非人工按领域划分
Top-K 为何常是 8超参权衡 + 算力 / 均衡 / 硬件习惯;非唯一正确答案
训练侧更复杂:路由、负载均衡、多卡通信、微调策略均需额外考虑
推理显存总参数量 估算,MoE 通常高于同激活参数的稠密模型
推理速度比同 总参数 稠密快很多;与同 激活参数 稠密接近或略慢
Mixtral 命名N×M:N 个专家,每个约 M 量级
Qwen3 MoE 命名Total-AActive,如 30B-A3B = 总 30B、激活约 3B

10. 参考与来源

本文由作者按照 CC BY 4.0 进行授权