Files
note_sync/大模型/deepseek/01-基础模型/02-DeepSeekMoE-2401.06066_abstract.md
T

121 lines
15 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# DeepSeekMoE:迈向混合专家语言模型的极致专家专精
> **原文标题**:DeepSeekMoE: Towards Ultimate Expert Specialization in Mixture-of-Experts Language Models
> **arXiv**:[2401.06066](https://arxiv.org/abs/2401.06066) | **发布**:11 Jan 2024
> **作者/机构**:Damai Dai、Chengqi Deng、Chenggang Zhao 等 + DeepSeek-AI(深度求索),联合北京大学、清华大学、南京大学
> **原文 PDF**:[02-DeepSeekMoE-2401.06066.pdf](./02-DeepSeekMoE-2401.06066.pdf)
## 一、摘要(全文翻译)
在大语言模型时代,混合专家(Mixture-of-Experts, MoE)是在扩大模型参数规模时管理计算成本的一种颇具前景的架构。然而,像 GShard 这类从 $N$ 个专家中激活 top-$K$ 个专家的传统 MoE 架构,在确保专家专精(expert specialization,即每个专家获取互不重叠且聚焦的知识)方面面临挑战。为此,我们提出了面向极致专家专精的 DeepSeekMoE 架构。它包含两项主要策略:(1)将专家细粒度地切分为 $mN$ 个专家,并从中激活 $mK$ 个,从而实现更灵活的激活专家组合;(2)隔离出 $K_{s}$ 个专家作为共享专家,旨在捕捉通用知识并缓解路由专家中的冗余。从 2B 参数的适度规模出发,我们证明 DeepSeekMoE 2B 达到了与 GShard 2.9B 相当的性能,而后者拥有 1.5 倍的专家参数与计算量。此外,DeepSeekMoE 2B 还几乎逼近了与其总参数量相同的稠密对照模型的性能,而后者构成了 MoE 模型的性能上界。随后,我们将 DeepSeekMoE 扩展到 16B 参数,并表明它仅用约 40% 的计算量就达到了与 LLaMA2 7B 相当的性能。进一步,我们将 DeepSeekMoE 扩展到 145B 参数的初步尝试持续验证了该架构相较 GShard 架构的显著优势,并显示它仅用 28.5%(甚至可能 18.2%)的计算量就取得了与 DeepSeek 67B 相当的性能。
## 二、核心贡献
1. **架构创新**:提出 DeepSeekMoE —— 一个以「极致专家专精」为目标的 MoE 架构,通过细粒度专家切分(fine-grained expert segmentation)与共享专家隔离(shared expert isolation)两项策略,在不增加专家总参数量与计算量的前提下提升专家的专业化程度。
2. **实证验证**:在 12 个 zero-shot / few-shot 基准上做验证实验,DeepSeekMoE 2B 大幅超越同规模 GShard 2B,并追平拥有 1.5 倍专家参数与计算量的 GShard 2.9B;同时几乎逼近同总参数量稠密模型的性能,即 MoE 模型的理论上界。
3. **可扩展性**:将模型扩展到 16B 总参数并在 2T tokens 上训练,DeepSeekMoE 16B 仅用约 40% 计算量即达到 DeepSeek 7B 与 LLaMA2 7B 的相当水平;进一步将 145B 版本的初步尝试显示其持续优于 GShard 架构,并以 28.5%(甚至 18.2%)的计算量对标 DeepSeek 67B。
4. **MoE 对齐**:对 DeepSeekMoE 16B 做监督微调(SFT)构建聊天模型,DeepSeekMoE Chat 16B 在聊天场景下与 DeepSeek Chat 7B、LLaMA2 SFT 7B 相当,说明 MoE 模型同样能从指令微调中获益,且保持了良好的通用性与适应性。
5. **公开发布**:开源 DeepSeekMoE 16B 的模型 checkpoint;该模型无需量化即可部署在单张 40GB 显存的 GPU 上。
## 三、方法与技术要点
### 3.1 通用 MoE 架构(预备知识)
论文先给出 Transformer 语言模型中通用的 MoE 范式作为基线。标准 Transformer 语言模型由 $L$ 层 Transformer 块堆叠而成,第 $l$ 层的自注意力与 FFN 计算为:
$$\mathbf{u}_{1:T}^{l} = \operatorname{Self-Att}\left(\mathbf{h}_{1:T}^{l-1}\right) + \mathbf{h}_{1:T}^{l-1}, \qquad \mathbf{h}_{t}^{l} = \operatorname{FFN}\left(\mathbf{u}_{t}^{l}\right) + \mathbf{u}_{t}^{l}$$
构造 MoE 语言模型的典型做法,是按一定间隔把 Transformer 中的 FFN 替换为 MoE 层:每个 MoE 层包含多个结构上与标准 FFN 完全相同的专家,每个 token 被分配给 1 个(Switch Transformer)或 2 个(GShard)专家。第 $l$ 个 FFN 被替换为 MoE 层后,输出隐藏状态为:
$$\mathbf{h}_{t}^{l} = \sum_{i=1}^{N}\left(g_{i,t}\operatorname{FFN}_{i}\left(\mathbf{u}_{t}^{l}\right)\right) + \mathbf{u}_{t}^{l}$$
$$g_{i,t} = \begin{cases} s_{i,t}, & s_{i,t}\in\operatorname{Topk}\left(\{s_{j,t}\mid 1\leqslant j\leqslant N\},K\right),\\ 0, & \text{otherwise},\end{cases} \qquad s_{i,t} = \operatorname{Softmax}_{i}\left({\mathbf{u}_{t}^{l}}^{T}\mathbf{e}_{i}^{l}\right)$$
其中 $N$ 为专家总数,$\mathbf{e}_{i}^{l}$ 是第 $l$ 层第 $i$ 个专家的质心(centroid),$s_{i,t}$ 为 token 与专家的亲和度,$g_{i,t}$ 为门控值。$g_{i,t}$ 的稀疏性($N$ 个门控值中只有 $K$ 个非零)保证了 MoE 层的计算效率——每个 token 只在 $K$ 个专家中被计算。
**为什么需要新架构**:论文指出这类传统架构存在两个痛点,共同限制了专家专精。(1)**知识混杂(knowledge hybridity)**:常用 MoE 只用 8 或 16 个专家,单个专家被分配到的 token 覆盖面过广,导致它不得不在同一份参数里塞进彼此差异极大的知识,难以同时用好;(2)**知识冗余(knowledge redundancy)**:不同专家接收到的 token 都需要某些通用知识,于是多个专家会各自重复学习这些共享知识,造成专家参数浪费。二者叠加使现有 MoE 无法逼近其理论性能上界。
### 3.2 细粒度专家切分
针对知识混杂,论文的做法是:在保持专家参数量与计算成本不变的前提下,把每个专家 FFN 的中间隐藏维度压缩到原来的 $1/m$,从而把一个专家切成 $m$ 个更小的专家;由于每个专家变小了,相应地把激活专家数也提高到 $m$ 倍,以维持相同的计算量。公式上只需把 top-$K$ 的求和范围从 $N$ 扩到 $mN$、把激活数从 $K$ 扩到 $mK$:
$$\mathbf{h}_{t}^{l} = \sum_{i=1}^{mN}\left(g_{i,t}\operatorname{FFN}_{i}\left(\mathbf{u}_{t}^{l}\right)\right) + \mathbf{u}_{t}^{l}, \qquad g_{i,t} = \begin{cases} s_{i,t}, & s_{i,t}\in\operatorname{Topk}\left(\{s_{j,t}\mid 1\leqslant j\leqslant mN\},mK\right),\\ 0, & \text{otherwise},\end{cases}$$
其收益可以从组合数上直观理解:当 $N=16$ 时,典型 top-2 路由只有 $\binom{16}{2}=120$ 种激活组合;若把每个专家切成 4 个小专家,细粒度路由的可能组合数变成 $\binom{64}{8}=4{,}426{,}165{,}368$。组合灵活性的暴涨意味着模型能更精确、更有针对性地组装所需知识,而落在每个小专家上的知识类型更单一,专家因此能保持更高的专业化程度。
### 3.3 共享专家隔离
针对知识冗余,论文隔离出 $K_{s}$ 个专家作为**共享专家**:不管路由器怎么算,每个 token 都会被确定性地分配给这些共享专家,由它们专门捕捉并沉淀跨上下文通用的知识。为了保证计算量不变,路由专家中被激活的专家数相应减少 $K_{s}$ 个。完整的 DeepSeekMoE 层可写为:
$$\mathbf{h}_{t}^{l} = \sum_{i=1}^{K_{s}}\operatorname{FFN}_{i}\left(\mathbf{u}_{t}^{l}\right) + \sum_{i=K_{s}+1}^{mN}\left(g_{i,t}\operatorname{FFN}_{i}\left(\mathbf{u}_{t}^{l}\right)\right) + \mathbf{u}_{t}^{l}$$
$$g_{i,t} = \begin{cases} s_{i,t}, & s_{i,t}\in\operatorname{Topk}\left(\{s_{j,t}\mid K_{s}+1\leqslant j\leqslant mN\},mK-K_{s}\right),\\ 0, & \text{otherwise},\end{cases} \qquad s_{i,t} = \operatorname{Softmax}_{i}\left({\mathbf{u}_{t}^{l}}^{T}\mathbf{e}_{i}^{l}\right)$$
于是在 DeepSeekMoE 中:共享专家数为 $K_{s}$,路由专家总数为 $mN-K_{s}$,非零门控数为 $mK-K_{s}$。作者说明,共享专家隔离的原型可追溯到 Rajbhandari et al. (2022),关键区别在于后者是从工程视角出发,而本文是从算法视角出发,把它作为提升专家专精的手段。
### 3.4 负载均衡设计
自动学习的路由策略会出现负载不均衡,带来两个缺陷:一是**路由崩塌(routing collapse)**,模型总只选少数几个专家,其余专家得不到充分训练;二是在专家分布到多设备时,负载不均会加重计算瓶颈。
**专家级均衡损失**用于缓解路由崩塌,定义如下($N'=mN-K_{s}$,$K'=mK-K_{s}$,$\mathbb{1}(\cdot)$ 为指示函数,$\alpha_{1}$ 为专家级均衡因子):
$$\mathcal{L}_{\mathrm{ExpBal}} = \alpha_{1}\sum_{i=1}^{N'} f_{i}P_{i}, \quad f_{i} = \frac{N'}{K'T}\sum_{t=1}^{T}\mathbb{1}(\text{Token } t \text{ selects Expert } i), \quad P_{i} = \frac{1}{T}\sum_{t=1}^{T}s_{i,t}$$
**设备级均衡损失**则针对跨设备计算均衡。作者强调:过度强制专家级均衡会损害模型性能,因此不必在专家层面做严格约束,真正要保证的是设备之间计算量均衡。把全部路由专家划分为 $D$ 组 $\{\mathcal{E}_{1},\dots,\mathcal{E}_{D}\}$ 并每组部署在一个设备上后:
$$\mathcal{L}_{\mathrm{DevBal}} = \alpha_{2}\sum_{i=1}^{D} f_{i}'P_{i}', \quad f_{i}' = \frac{1}{|\mathcal{E}_{i}|}\sum_{j\in\mathcal{E}_{i}} f_{j}, \quad P_{i}' = \sum_{j\in\mathcal{E}_{i}} P_{j}$$
实践中的取舍是:专家级均衡因子设得较小(防止路由崩塌即可),设备级均衡因子设得较大(促进设备间计算均衡)。
## 四、主要实验结果
| 基准 / 任务 | 本模型 | 对比对象 | 说明 |
|---|---|---|---|
| Pile(Loss,验证实验) | DeepSeekMoE 2B **1.808** | GShard 2B 1.867;GShard ×1.5 1.808;Dense ×16 1.806 | 100B tokens;DeepSeekMoE 逼近稠密上界 |
| HellaSwag(0-shot Acc.) | 54.8 | GShard 2B 50.5;GShard ×1.5 54.4 | 同总参数、同激活参数下领先 |
| HumanEval(Pass@1) | 4.9 | GShard 2B 3.7;GShard ×1.5 3.0;Dense ×16 4.3 | 验证实验中代码生成最强 |
| TriviaQA(5-shot EM) | 16.6 | GShard 2B 10.2;GShard ×1.5 15.7 | 知识密集型任务优势明显 |
| Pile(BPB,16B) | DeepSeekMoE 16B **0.74** | DeepSeek 7B 0.75;LLaMA2 7B 0.76 | 2T tokens;算力为 DeepSeek 7B 的 40.5%、LLaMA2 7B 的 39.6% |
| HellaSwag(0-shot) | 77.1 | DeepSeek 7B 75.4;LLaMA2 7B 75.6 | 超过两个 7B 稠密模型 |
| GSM8K(8-shot EM) | 18.8 | DeepSeek 7B 17.4;LLaMA2 7B 15.5 | 数学推理领先 |
| MATH(4-shot EM) | 4.3 | DeepSeek 7B 3.3;LLaMA2 7B 2.6 | 数学推理领先 |
| HumanEval(Pass@1) | 26.8 | DeepSeek 7B 26.2;LLaMA2 7B 14.6 | 代码生成大幅超 LLaMA2 7B |
| MBPP(3-shot Pass@1) | 39.2 | DeepSeek 7B 39.0;LLaMA2 7B 21.8 | 同上 |
| MMLU(5-shot Acc.) | 45.0 | DeepSeek 7B 48.2;LLaMA2 7B 45.8 | **落后**:注意力参数仅约 0.5B(DeepSeek 7B 为 2.5B) |
| CMMLU(5-shot Acc.) | 42.5 | LLaMA2 7B 32.6;DeepSeek 7B 47.2 | 中文能力远超 LLaMA2,但低于 DeepSeek 7B |
| CHID(0-shot Acc.) | 89.4 | LLaMA2 7B 37.9;DeepSeek 7B 89.3 | 中文成语理解近乎碾压 LLaMA2 |
| MBPP(Chat,3-shot Pass@1) | DeepSeekMoE Chat 16B 46.2 | LLaMA2 SFT 7B 27.8;DeepSeek Chat 7B 39.0 | 同一份 SFT 数据,聊天模型仍保持代码优势 |
| DROP(Chat,1-shot EM) | 33.8 | LLaMA2 SFT 7B 40.0;DeepSeek Chat 7B 41.7 | **落后**:长文阅读理解是短板 |
| Pile(Loss,145B) | DeepSeekMoE 145B **1.876** | DeepSeek 67B 1.905;GShard 137B 1.961 | 245B tokens 初步训练;算力为 DeepSeek 67B 的 28.5% |
| GSM8K(8-shot EM,Half Activated) | DeepSeekMoE 142B 13.8 | DeepSeek 67B 11.8;GShard 137B 6.4 | 仅激活一半专家参数、18.2% 算力仍超 DeepSeek 67B |
总体看,DeepSeekMoE 在**语言建模与知识密集型任务**(Pile、HellaSwag、TriviaQA、NaturalQuestions)上优势最突出——作者归因于 MoE 模型中 FFN 参数远多于注意力参数,而 Transformer 的 FFN 承担知识记忆功能。在**代码生成与数学推理**上,16B 模型全面超越 LLaMA2 7B(HumanEval 26.8 vs 14.6,MBPP 39.2 vs 21.8),部分归功于预训练语料中数学与代码文本更丰富。**多选题任务**(MMLU、CEval、CMMLU)是持续短板:16B 与 145B 版本均落后 DeepSeek 同代稠密模型(16B 对 DeepSeek 7B:MMLU 45.0 vs 48.2、CEval 40.6 vs 45.0;145B 对 DeepSeek 67B:MMLU 39.4 vs 45.1),论文明确将其归因于注意力参数容量不足。此外,SFT 之后 DeepSeekMoE 与 DeepSeek 7B 在多选题上的差距有所收窄。
## 五、结论、局限与影响
- **结论**:DeepSeekMoE 通过细粒度专家切分与共享专家隔离,显著提升了专家专精程度。2B 规模的验证实验证明该架构能逼近 MoE 模型的理论性能上界;消融实验显示两种策略各自都带来提升,且专家切分越细性能越好;利用率分析显示禁用 top 路由专家时 DeepSeekMoE 比 GShard ×1.5 更敏感(说明专家冗余更低、更不可替代),直接禁用共享专家会让 Pile loss 从 1.808 恶化到 2.414(说明共享专家捕捉的是路由专家无法覆盖的基础知识)。16B 版本在 2T tokens 上训练后以约 40% 计算量对标 7B 稠密模型,经 SFT 对齐后仍保持该优势;145B 的初步结果持续优于 GShard,并以 28.5%(半激活版本 18.2%)计算量对标 DeepSeek 67B。
- **局限性**:论文自述的局限包括:(1)在多选题任务(MMLU、CEval、CMMLU 类)上表现不足,根源是 DeepSeekMoE 16B 的注意力参数仅约 0.5B(DeepSeek 7B 为 2.5B),作者此前在 DeepSeek 7B 上的研究发现注意力容量与多选题表现正相关;(2)DeepSeekMoE 145B 只是「初步探索」,仅训练 245B tokens,尚未完成最终版本与完整训练,因此其结论属阶段性验证;(3)在 16B 规模未采用更细的切分粒度(专家为 0.25 倍标准 FFN),原因是专家过小会降低计算效率,论文称在 16B 以上的更大规模仍可采用更细粒度。此外论文正文未对 145B 的最终目标训练量给出明确数字。
- **影响**:该工作给出了 MoE 走向「极致专家专精」的两条正交设计原则,并以极小代价(同参数、同计算量)获得显著收益,其中「细粒度 + 共享专家」的组合后来成为 DeepSeek-V2/V3 系列 MoE 的基础架构;它同时验证了 MoE 模型可从 SFT 对齐中获益(与早期「MoE 难从微调获益」的观察相反),并开源了可单卡 40GB 部署、推理速度约为 7B 稠密模型 2.5 倍的 16B checkpoint,对工业界的低成本大模型部署有直接参考价值。
## 六、关键术语对照表
| English | 中文 |
|---|---|
| Mixture-of-Experts (MoE) | 混合专家 |
| Expert Specialization | 专家专精 / 专家专业化 |
| Fine-Grained Expert Segmentation | 细粒度专家切分 |
| Shared Expert Isolation | 共享专家隔离 |
| Shared Expert | 共享专家 |
| Routed Expert | 路由专家 |
| Knowledge Hybridity | 知识混杂 |
| Knowledge Redundancy | 知识冗余 |
| Routing Collapse | 路由崩塌 |
| Expert-Level Balance Loss | 专家级均衡损失 |
| Device-Level Balance Loss | 设备级均衡损失 |
| Expert Parallelism | 专家并行 |
| Activated Parameters | 激活参数 |
| Bits per Byte (BPB) | 每字节比特数 |
| Top-K Routing | Top-K 路由 |
| Feed-Forward Network (FFN) | 前馈网络 |
| Dense Counterpart | 稠密对照模型 |