MOE大模型对比篇
📝通俗解释:MOE(Mixture of Experts,混合专家)是一种"让专业人做专业事"的技术。把一个大模型分成多个"专家"(小的神经网络),不同的问题交给不同的专家处理,这样既能让模型变大,又不会让计算量爆炸。
1. DeepSpeed-MoE
DeepSpeed-MoE 提出了两种创新的 MoE 架构优化方法:Pyramid-MoE 和 Residual-MoE,并在此基础上发展出 PR-MoE。
1.1 Pyramid-MoE(金字塔MoE)
- 核心思想:浅层放少量 Experts,深层放更多 Experts,形成金字塔形状
- 优势:减少参数量(例如减少浅层 Experts 数量),降低计算开销
📝通俗解释:就像一个公司一样,基层员工(浅层)不需要太多专业分工,但高管(深层)需要更多专业细分。Pyramid-MoE 就是按照这个逻辑,让模型浅层用较少的"专家",深层用更多的"专家"。
1.2 Residual-MoE(残差MoE)
- 核心思想:固定选择第一个 expert,只让第二个 expert 参与 gating 选择
- 优势:达到与 Top2 gating 相当的效果,但 gating 参数量减少一半,latency 更低
📝通俗解释:类似于"老带新"模式。第一个 expert 是经验丰富的老手(固定选中),第二个 expert 是新人(通过选择机制挑选)。这样既保证了质量,又减少了选择成本。
1.3 PR-MoE(结合方案)
结合 Pyramid-MoE 和 Residual-MoE 产生了 PR-MoE:
- 更少的参数量
- 更高的吞吐
- 不失精度的模型效果
架构对比图示:
| Standard MoE(左图) | PR-MoE(右图) |
|---|---|
| 每层 Expert 数量相同($E_1$ 到 $E_N$) | 浅层:Expert 数量减少($E_1$ 到 $E_{N/2}$)+ 橙色 MLP 残差连接 |
| Token 依次经过各层 | 深层:Expert 数量恢复($E_1$ 到 $E_N$)+ MLP 残差连接 |
2. PAI-Megatron-Patch MoE
PAI-Megatron-Patch 专注于 MoE 训练中的稳定性问题,引入了两个关键的 Loss:
2.1 Load Balancing Loss(负载均衡损失)
📝通俗解释:就像老师分配作业,不能让某几个同学总是做很多作业,而其他同学没事做。Load Balancing Loss 就是让模型"雨露均沾"地分配任务给各个 Expert,避免某些 Expert 累死、其他 Expert 闲死。
问题背景:MoE 训练中大多数 token 被 route 到少数几个 expert,导致少数 expert 高度特化而其他 expert 学不到东西
公式:
$$\text{loss} = \alpha \cdot N \cdot \sum_{i=1}^{N} f_i \cdot P_i$$
其中:
- $f_i$ = 被分配到 expert $i$ 的 token 比例
$$f_i = \frac{1}{T} \sum_{x \in \mathcal{B}} \mathbb{1}{\text{argmax } p(x) = i}$$
- $P_i$ = router 分配给 expert $i$ 的概率比例
$$P_i = \frac{1}{T} \sum_{x \in \mathcal{B}} p_i(x)$$
📝通俗解释:这个公式的核心是:如果 $f_i$(实际分配的token比例)和 $P_i$(期望分配的概率)都很高,说明分配不均匀,loss 就会变大。模型会通过反向传播自动调整,让 token 分配更均匀。
2.2 z-Loss(数值稳定性损失)
📝通俗解释:想象算账时,如果数字太大(比如几十亿),算起来容易出错。z-Loss 就是让模型的"账目"保持在合理范围内,避免因为数值太大导致计算误差。
问题背景:router 在 softmax 操作前的 logits magnitude 过大,导致大量 round-off error(舍入误差)产生
公式:
$$L_z(x) = \frac{1}{B} \sum_{i=1}^{B} \left( \log \sum_{j=1}^{N} e^{x_j^{(i)}} \right)^2$$
- 作用:
- 约束 logits 的绝对值大小
- 产生较好的模型 stability 与 quality 的 trade-off
- 避免 clipping logits 带来的更大 round-off error
📝通俗解释:z-Loss 就像给模型加上"数值保险丝",防止数值爆炸。虽然这可能会稍微影响模型精度,但能大幅提升训练稳定性,是值得的权衡。
3. DeepSeek MoE
DeepSeek MoE 针对现有 MoE 架构的两个核心问题提出解决方案:
📝通俗解释:DeepSeek MoE 解决的问题是——现有的 MoE 就像让一个医生同时看所有科室,结果是什么都会但什么都不精。DeepSeek 的方案是:让"医生"更专业(细粒度划分),并且把通用知识单独处理(共享专家)。
3.1 问题背景
- 知识混杂(Knowledge Hybridity):不同领域的知识混在同一个 expert 中
- 知识冗余(Knowledge Redundancy):多个 expert 学到了相同的通用知识
3.2 解决方案一:细粒度专家划分
传统 MoE:
- 从 $N$ 个与标准 FFN 大小相同的专家中,选择激活 $K$ 个
- 例如:Mistral 7B*8(8个专家选2个)
DeepSeek MoE:
- 把专家粒度划分更细,从 $mN$ 个专家中选择激活 $mK$ 个
- 例如:DeepSeekMoE 16B(64个专家选8个)
| 对比项 | 传统 MoE | DeepSeek MoE |
|---|---|---|
| 专家总数 | $N$ | $mN$ |
| 激活数量 | $K$ | $mK$ |
| 激活参数量 | 不变 | 不变 |
📝通俗解释:就像把一个大部门拆成多个小部门。原来 8 个人选 2 个人干活,现在 64 个人选 8 个人干活。虽然干活的还是那两个人能干的活,但选择更多了,可以找到更"对口"的人来解决问题。
3.3 解决方案二:共享专家分离
把激活专家区分为两类:
- Shared Expert(共享专家):所有输入都会经过,负责存储通用知识
- Routed Expert(独立路由专家):通过 Router 动态选择,负责处理特定任务
架构演进图示:
(a) Conventional Top-2 Routing (b) Fine-grained Segmentation
┌─────────────────┐ ┌─────────────────┐
│ Input Hidden │ │ Input Hidden │
└────────┬────────┘ └────────┬────────┘
│ │
┌────▼────┐ ┌────▼────┐
│ Router │ │ Router │
│ K: 2 │ │ K: 4 │
└────┬────┘ └────┬────┘
┌────┼────┐ ┌────┼────┐
│ │ │ │ │ │
┌──▼┐┌──▼┐┌──▼┐ ┌──▼┐┌──▼┐┌──▼┐┌──▼┐
│E1 ││E2 ││...│ │E1 ││E2 ││...││E2N│
│ ││ ││ EN│ │ ││ ││ ││ │
└──┘└──┘└──┘ └──┘└──┘└──┘└──┘
│ │ │ │ │ │
└────┴────┘ └────┴────┘
│ │
┌────▼────┐ ┌────▼────┐
│Output H │ │Output H │
└─────────┘ └─────────┘
(c) DeepSeekMoE (Shared Expert Isolation)
┌─────────────────┐
│ Input Hidden │
└────────┬────────┘
│
┌────▼────┐
│ Router │
│ K=3 │
└────┬────┘
│
┌──────┼──────┐
│ │ │
┌─▼─┐ ┌──▼──┐ ┌──▼──┐
│E1 │ │E2 │ │E3 │ ...
│(共享)│ │(路由)│ │(路由)│
└───┘ └─────┘ └─────┘
│ │ │
└──────┼──────┘
│
┌────▼────┐
│Output H │
└─────────┘📝通俗解释:共享专家就像公司里的"前台"和"行政",所有客户(输入)都要先经过他们处理通用事务。然后根据具体需求(Router 决策),再分配给专业的业务部门(路由专家)处理。这样通用知识不用重复学习,效率更高。
总结对比
| 方案 | 核心创新 | 解决的问题 |
|---|---|---|
| DeepSpeed-MoE | PR-MoE(结合 Pyramid + Residual) | 减少参数量、降低延迟 |
| PAI-Megatron-Patch | Load Balancing Loss + z-Loss | 训练稳定性、负载均衡 |
| DeepSeek MoE | 细粒度专家划分 + 共享专家分离 | 知识混杂、知识冗余 |
来源:AiGC面试宝典 | https://articles.zsxq.com/id_j51bnu3xfgm9.html