DeepSeekMoE: Towards Ultimate Expert Specialization in Mixture-of-Experts Language Models

文章标题:DeepSeekMoE:迈向混合专家语言模型中的极致专家特化
作者/机构:Damai Dai∗1,2, Chengqi Deng1, Chenggang Zhao∗1,3, R.X. Xu1, Huazuo Gao1, Deli Chen1, Jiashi Li1, Wangding Zeng1, Xingkai Yu∗1,4, Y. Wu1, Zhenda Xie1, Y.K. Li1, Panpan Huang1, Fuli Luo1, Chong Ruan1, Zhifang Sui2, Wenfeng Liang1
1DeepSeek-AI 2北京大学多媒体信息处理全国重点实验室 3清华大学交叉信息研究院 4南京大学软件新技术全国重点实验室

A1 主要贡献

在大语言模型时代,混合专家(MoE)架构是扩展模型参数同时控制计算成本的有前途的方案。然而,传统的MoE架构(如GShard)在激活N个专家中的前k个时,面临确保专家特化(即每个专家获得不重叠且专注的知识)的挑战。为应对这些挑战,本文提出了DeepSeekMoE架构,旨在实现极致的专家特化。

核心问题
现有的MoE架构可能存在知识混合知识冗余的问题,这限制了专家特化。
1. 知识混合(Knowledge Hybridity):现有的MoE实践通常使用有限数量的专家(如8或16个),导致分配给特定专家的token可能涵盖多样的知识。因此,指定的专家会试图在其参数中汇集截然不同类型的知识,而这些知识很难被同时利用。
2. 知识冗余(Knowledge Redundancy):分配给不同专家的token可能需要共同的知识。结果,多个专家可能会在其各自的参数中学习共享的知识,从而导致专家参数的冗余。

研究目标与创新点
为了解决上述问题,本文引入了DeepSeekMoE,这是一种创新的MoE架构,旨在实现极致的专家特化。该架构包含两个主要策略:
1. 细粒度专家切分(Fine-Grained Expert Segmentation):在保持参数数量不变的情况下,通过缩小FFN中间隐藏维度,将专家切分成更细的粒度。相应地,在保持计算成本不变的情况下,激活更多细粒度的专家,以实现更灵活和自适应的激活专家组合。这使得多样化的知识能够被更精细地分解,并被更精确地学习到不同的专家中。
2. 共享专家隔离(Shared Expert Isolation):隔离一部分专家作为共享专家,这些专家总是被激活,旨在捕获和巩固跨不同上下文的通用知识。通过将通用知识压缩到这些共享专家中,可以减轻其他路由专家的冗余,从而提高参数效率,并确保每个路由专家专注于独特方面,保持特化。

主要贡献总结
* 架构创新:引入了DeepSeekMoE,一种旨在实现极致专家特化的创新MoE架构,采用了细粒度专家切分和共享专家隔离两大策略。
* 实证验证:通过广泛的实验,验证了DeepSeekMoE架构的有效性。实验结果证实了DeepSeekMoE 2B具有高度的专家特化水平,并表明其性能可以接近MoE模型的性能上限。
* 可扩展性:将DeepSeekMoE扩展到16B模型,并证明其仅用约40%的计算量就达到了与DeepSeek 7B和LLaMA2 7B相当的性能。同时,初步尝试将DeepSeekMoE扩展到145B,验证了其相较于GShard架构的持续优势,并表现出与DeepSeek 67B相当的性能。
* MoE对齐:成功对DeepSeekMoE 16B进行了监督微调,创建了一个对齐的聊天模型,展示了其适应性和多功能性。
* 公开发布:本着开放研究的精神,公开发布了DeepSeekMoE 16B的模型检查点。该模型无需量化即可部署在单张40GB显存的GPU上。

图1 | DeepSeekMoE 16B与开源模型在Open LLM Leaderboard上的比较。红色虚线是除DeepSeekMoE 16B外所有模型数据点的线性拟合。DeepSeekMoE 16B始终大幅优于具有相似激活参数数量的模型,并实现了与LLaMA2 7B(激活参数约为其2.5倍)相当的性能。
图1 | DeepSeekMoE 16B与开源模型在Open LLM Leaderboard上的比较。红色虚线是除DeepSeekMoE 16B外所有模型数据点的线性拟合。DeepSeekMoE 16B始终大幅优于具有相似激活参数数量的模型,并实现了与LLaMA2 7B(激活参数约为其2.5倍)相当的性能。

A3 背景知识:Transformer的混合专家模型

通用Transformer架构。一个标准的Transformer语言模型由堆叠的$L$个标准Transformer块构成,每个块的计算过程可以表示如下:
$\mathbf{u}_{1:T}^{l} = \text{Self-Att}\left(\mathbf{h}_{1:T}^{l-1}\right) + \mathbf{h}_{1:T}^{l-1},$

$$\mathbf{h}_{t}^{l}=\mathrm{FFN}\left(\mathbf{u}_{t}^{l}\right)+\mathbf{u}_{t}^{l},$$


其中,$T$表示序列长度,Self-Att(·)表示自注意力模块,FFN(·)表示前馈网络(FFN),$u_{1:T}^l \in \mathbb{R}^{T \times d}$是第$l$个注意力模块后所有token的隐藏状态,而$h_t^l \in \mathbb{R}^d$是第$t$个token经过第$l$个Transformer块后的输出隐藏状态。为简洁起见,上述公式中省略了层归一化。

MoE语言模型构建。构建MoE语言模型的典型做法通常是按指定间隔用MoE层替换Transformer中的FFN层【【14, Glam: Efficient scaling of language models with mixture-of-experts, 2022, ICML】; 【16, Switch transformers: Scaling to trillion parameter models with simple and efficient sparsity, 2021, CoRR】; 【33, Gshard: Scaling giant models with conditional computation and automatic sharding, 2021, ICLR】; 【70, Designing effective sparse expert models, 2022, IPDPS Workshops】】。一个MoE层由多个专家组成,每个专家的结构与标准FFN相同。然后,每个token将被分配给一个【16】或两个【33】专家。如果第$l$个FFN被替换为MoE层,其输出隐藏状态$h_t^l$的计算表示为:

$$ \mathbf{h}_{t}^{l}=\sum_{i=1}^{N}\left(g_{i, t} \mathrm{FFN}_{i}\left(\mathbf{u}_{t}^{l}\right)\right)+\mathbf{u}_{t}^{l}, $$

$$\begin{aligned} g_{i,t}=\begin{cases} s_{i,t}, & s_{i,t} \in \operatorname{Topk}(\{s_{j,t}|1 \leq j \leq N\}, K), \\ 0, & \text{otherwise}, \end{cases} \end{aligned}$$
$s_{i,t} = \text{Softmax}_i \left( \mathbf{u}_t^l{}^T \mathbf{e}_i^l \right),$
其中,$N$表示专家总数,$\text{FFN}_i(\cdot)$是第$i$个专家FFN,$g_{i,t}$表示第$i$个专家的门控值,$s_{i,t}$表示token到专家的亲和度,Topk(·, $K$)表示在第$t$个token与所有$N$个专家计算出的亲和度得分中最高的$K$个得分的集合,而$e_i^l$是第$l$层第$i$个专家的质心。请注意,$g_{i,t}$是稀疏的,意味着$N$个门控值中只有$K$个是非零的。这种稀疏性确保了MoE层内的计算效率,即每个token只会被分配给$K$个专家并由它们进行计算。同样,在上述公式中,为简洁起见省略了层归一化操作。

A2 方法细节

架构设计。在第2节概述的通用MoE架构基础上,本文引入了DeepSeekMoE,它专门设计用于发掘专家特化的潜力。如图2所示,该架构融合了两大核心策略:细粒度专家切分和共享专家隔离。这两种策略都旨在提升专家特化的水平。

图2 | DeepSeekMoE示意图。子图(a)展示了采用传统top-2路由策略的MoE层。子图(b)阐述了细粒度专家切分策略。随后,子图(c)展示了共享专家隔离策略的整合,构成了完整的DeepSeekMoE架构。值得注意的是,在这三种架构中,专家参数的数量和计算成本保持不变。
图2 | DeepSeekMoE示意图。子图(a)展示了采用传统top-2路由策略的MoE层。子图(b)阐述了细粒度专家切分策略。随后,子图(c)展示了共享专家隔离策略的整合,构成了完整的DeepSeekMoE架构。值得注意的是,在这三种架构中,专家参数的数量和计算成本保持不变。

3.1. 细粒度专家切分

动机与实现。在专家数量有限的情况下,分配给特定专家的token更有可能涵盖多样化的知识类型。结果,指定的专家会倾向于在其参数中学习差异巨大的知识,而这些知识很难被同时利用。然而,如果每个token可以被路由到更多的专家,多样化的知识就有可能被分解并分别在不同的专家中学习。在这种情况下,每个专家仍然可以保持高水平的专家特化,有助于在专家之间形成更专注的知识分布。

具体方法。为了实现这一目标,在保持专家参数数量和计算成本一致的情况下,本文将专家切分得更细粒度。更细的专家切分使得激活的专家组合更加灵活和自适应。具体来说,在图2(a)所示的典型MoE架构之上,通过将FFN中间隐藏维度减小到原始大小的$1/m$倍,将每个专家FFN切分为$m$个更小的专家。由于每个专家变小了,相应地,也将激活的专家数量增加到$m$倍,以保持相同的计算成本,如图2(b)所示。通过细粒度专家切分,MoE层的输出可以表示为:

$$\mathbf{h}_{t}^{l}=\sum_{i=1}^{m N}\left(g_{i, t} \mathrm{FFN}_{i}\left(\mathbf{u}_{t}^{l}\right)\right)+\mathbf{u}_{t}^{l},$$

$$\begin{aligned} g_{i, t}=\left\{\begin{array}{ll}s_{i, t}, & s_{i, t} \in \operatorname{Topk}\left(\left\{s_{j, t} \mid 1 \leq j \leq m N\right\}, m K\right), \\ 0, & \text { otherwise, }\end{array}\right. \end{aligned}$$
$s_{i,t} = \text{Softmax}_i \left( \mathbf{u}_t^L \mathbf{e}_i^l \right),$
其中,专家参数总数等于标准FFN参数数量的$N$倍,而$mN$表示细粒度专家的总数。采用细粒度专家切分策略后,非零门控值的数量也增加到$mK$。

组合灵活性。从组合学的角度来看,细粒度专家切分策略显著增强了激活专家的组合灵活性。举例来说,考虑$N=16$的情况。典型的top-2路由策略可以产生 $\binom{16}{2}=120$ 种可能的组合。相比之下,如果每个专家被分成4个更小的专家($m=4$),细粒度的路由策略可以产生 $\binom{64}{8}=4,426,165,368$ 种潜在组合。组合灵活性的激增,增强了实现更精确和更有针对性的知识获取的潜力。

3.2. 共享专家隔离

动机与实现。在使用传统路由策略时,分配给不同专家的token可能需要一些共同的知识或信息。结果,多个专家可能会在其各自的参数中学习共享的知识,从而导致专家参数的冗余。然而,如果有专门的共享专家来捕获和巩固跨不同上下文的通用知识,那么其他路由专家之间的参数冗余将会减轻。这种冗余的减轻将有助于构建一个参数效率更高、专家更特化的模型。

具体方法。为了实现这一目标,在细粒度专家切分策略的基础上,进一步隔离$K_s$个专家作为共享专家。无论路由模块如何决策,每个token都将被确定性地分配给这些共享专家。为了保持计算成本不变,其他路由专家中激活的专家数量将减少$K_s$,如图2(c)所示。整合了共享专家隔离策略后,完整的DeepSeekMoE架构中的一个MoE层公式如下:

$$\mathbf{h}_{t}^{l}=\sum_{i=1}^{K_{s}} \mathrm{FFN}_{i}\left(\mathbf{u}_{t}^{l}\right)+\sum_{i=K_{s}+1}^{m N}\left(g_{i, t} \mathrm{FFN}_{i}\left(\mathbf{u}_{t}^{l}\right)\right)+\mathbf{u}_{t}^{l},$$

$$\begin{aligned} g_{i,t} = \begin{cases} s_{i,t}, & s_{i,t} \in \mathrm{Topk}(\{s_{j,t}|K_s+1 \le j \le mN\}, mK-K_s), \\ 0, & \text{otherwise}, \end{cases} \end{aligned}$$
$s_{i,t} = \text{Softmax}_i \left( \mathbf{u}_t^l{}^T \mathbf{e}_i^l \right).$
最终,在DeepSeekMoE中,共享专家的数量为$K_s$,路由专家的总数为$mN-K_s$,非零门控值的数量为$mK-K_s$。

与前期工作的区别。值得注意的是,共享专家隔离的原型可以追溯到Rajbhandari等人(2022)【42, Deepspeed-moe: Advancing mixture-of-experts inference and training to power next-generation AI scale, 2022, ICML】。关键区别在于,他们是从工程角度得出这一策略,而本文是从算法角度来处理它。

3.3. 负载均衡考量

负载不均衡问题。自动学习的路由策略可能会遇到负载不均衡的问题,这表现出两个显著的缺陷。首先,存在路由崩溃(routing collapse)的风险【58, Outrageously large neural networks: The sparsely-gated mixture-of-experts layer, 2017, ICLR】,即模型总是只选择少数几个专家,导致其他专家得不到充分的训练。其次,如果专家分布在多个设备上,负载不均衡会加剧计算瓶颈。

专家级平衡损失(Expert-Level Balance Loss)。为了减轻路由崩溃的风险,本文也采用了一种专家级的平衡损失。该平衡损失的计算如下:

$$\mathcal{L}_{\text{ExpBal}} = \alpha_1 \sum_{i=1}^{N'} f_i P_i,$$

$$f_i = \frac{N'}{K'T} \sum_{t=1}^{T} 1(\text{Token } t \text{ selects Expert } i),$$
$$P_i = \frac{1}{T} \sum_{t=1}^{T} s_{i,t},$$
其中,$\alpha_1$是一个称为专家级平衡因子的超参数,为简洁起见,$N'$等于($mN - K_s$),$K'$等于($mK - K_s$)。$\mathbf{1}(\cdot)$表示指示函数。

设备级平衡损失(Device-Level Balance Loss)。除了专家级平衡损失,本文引入了设备级平衡损失。当目标是缓解计算瓶颈时,不必在专家级别强制执行严格的平衡约束,因为对负载平衡的过度约束会损害模型性能。相反,主要目标是确保跨设备的计算平衡。如果将所有路由专家划分为$D$个组$\{E_1, E_2, ..., E_D\}$,并将每组部署在单个设备上,设备级平衡损失计算如下:

$$ \mathcal{L}_{\text{DevBal}} = \alpha_2 \sum_{i=1}^{D} f'_i P'_i, $$

$$f'_i = \frac{1}{|\mathcal{E}_i|} \sum_{j \in \mathcal{E}_i} f_j,$$
$$P'_i = \sum_{j \in \mathcal{E}_i} P_j$$
其中,$\alpha_2$是一个称为设备级平衡因子的超参数。在实践中,设置一个较小的专家级平衡因子来减轻路由崩溃的风险,同时设置一个较大的设备级平衡因子来促进跨设备的计算平衡。

A4 实验环境

验证实验(2B规模)

  • 数据集:从DeepSeek-AI创建的大规模多语言语料库中采样100B token进行训练。该语料库主要覆盖英语和中文,来源多样。
  • 模型架构

    • 层数:9
    • 隐藏层维度:1280
    • 注意力头:10个,每个头维度128
    • MoE层:替换所有FFN层,专家参数总数是标准FFN的16倍,激活专家参数是标准FFN的2倍。
    • 总参数:约2B,激活参数约0.3B。
  • 硬件配置:NVIDIA A100或H800 GPU集群。节点内通过NVLink/NVSwitch连接,节点间通过InfiniBand连接。

  • 软件配置

    • 训练框架:HAI-LLM,集成了张量并行、ZeRO数据并行、流水线并行和专家并行。
    • 优化:使用CUDA和Triton开发了GPU核函数。
    • 分词器:使用HuggingFace Tokenizer工具训练的BPE分词器,词汇表大小为8K。
  • 训练配置

    • 优化器:AdamW ($\beta_1=0.9, \beta_2=0.95$, weight_decay=0.1)。
    • 学习率:warmup-and-step-decay策略,最大学习率为1.08e-3。
    • 批大小:2K,序列长度2K(每批4M token)。
    • 训练步数:25,000步(总计100B token)。
    • 负载均衡:由于模型较小,所有专家部署在单GPU上,未使用设备级平衡损失,专家级平衡因子设为0.01。

规模化实验(16B规模)

  • 数据集:从同一语料库中采样2T token进行训练,与LLaMA2 7B的训练量对齐。
  • 模型架构

    • 层数:28
    • 隐藏层维度:2048
    • 注意力头:16个,每个头维度128
    • MoE层:除第一层外的所有FFN层都被替换。每层包含2个共享专家和64个路由专家,每个专家大小为标准FFN的0.25倍。每个token路由到2个共享专家和6个路由专家。
    • 总参数:约16.4B,激活参数约2.8B。
  • 硬件配置:同验证实验。

  • 软件配置:同验证实验,但BPE分词器词汇表大小扩展到100K。
  • 训练配置
    • 优化器:AdamW(参数同上)。
    • 学习率:warmup-and-step-decay策略,最大学习率为4.2e-4。
    • 批大小:4.5K,序列长度4K(每批18M token)。
    • 训练步数:106,449步(总计2T token)。
    • 负载均衡:采用流水线并行,每层专家部署在同一设备上,未使用设备级平衡损失。专家级平衡因子设为0.001。

A4 实验结果

4.2. 验证实验评估

  • 实验内容:对比了五种模型:Dense(0.2B)、Hash Layer(2.0B)、Switch Transformer(2.0B)、GShard(2.0B)和DeepSeekMoE(2.0B)。所有模型在100B token上训练。
  • 实验结果:如表1所示,(1)稀疏模型Hash Layer和Switch Transformer显著优于同等激活参数的Dense模型。(2)GShard比top-1路由的Switch Transformer性能稍好。(3)在总参数和激活参数相同的情况下,DeepSeekMoE全面优于GShard。
  • 分析结论:结果展示了DeepSeekMoE架构在现有MoE架构中的优越性。
表1 | 验证实验的评估结果。粗体表示最佳。与其他MoE架构相比,DeepSeekMoE表现出显著的性能优势。
表1 | 验证实验的评估结果。粗体表示最佳。与其他MoE架构相比,DeepSeekMoE表现出显著的性能优势。

4.3. DeepSeekMoE与MoE模型上限的对齐

  • 实验内容:将DeepSeekMoE 2B与更大规模的GShard模型(GShard×1.5,专家参数和计算量为其1.5倍)以及Dense模型(Dense×16,参数量为MoE模型的理论上限)进行比较。
  • 实验结果:如表2所示,DeepSeekMoE 2B的性能与GShard×1.5相当,并且非常接近Dense×16的性能。
  • 分析结论:这表明DeepSeekMoE架构非常高效,其性能紧密对齐了MoE模型的理论上限,至少在2B参数和100B训练数据规模上是如此。
表2 | DeepSeekMoE、更大的GShard模型和更大的密集模型之间的比较。在“# Experts”行中,$n+k$表示$n$个共享专家和$k$个路由专家。在“# Activated Experts”行中,$n+k$表示$n$个激活的共享专家和$k$个激活的路由专家。DeepSeekMoE实现了与包含1.5倍专家参数和计算量的GShard模型相当的性能。此外,DeepSeekMoE几乎接近了具有16倍FFN参数的密集模型的性能,这为MoE模型在模型容量方面设定了上限。
表2 | DeepSeekMoE、更大的GShard模型和更大的密集模型之间的比较。在“# Experts”行中,$n+k$表示$n$个共享专家和$k$个路由专家。在“# Activated Experts”行中,$n+k$表示$n$个激活的共享专家和$k$个激活的路由专家。DeepSeekMoE实现了与包含1.5倍专家参数和计算量的GShard模型相当的性能。此外,DeepSeekMoE几乎接近了具有16倍FFN参数的密集模型的性能,这为MoE模型在模型容量方面设定了上限。

4.4. 消融研究

  • 实验内容:在参数和计算量不变的情况下,验证“共享专家隔离”和“细粒度专家切分”两个策略的有效性。
  • 实验结果:如图3所示,与GShard相比,仅增加共享专家隔离就能提升性能。在共享专家的基础上,进一步进行细粒度切分(从16个专家切分为32个,再到64个),性能持续提升。此外,研究发现共享专家与路由专家的不同比例(1:63, 2:62, 4:60)对性能影响不大,其中1个共享专家和3个激活路由专家(比例1:3)的配置在Pile loss上略优。
  • 分析结论:共享专家隔离和细粒度专家切分两个策略均对模型性能有积极贡献。
图3 | DeepSeekMoE的消融研究。为清晰呈现,性能已按最佳性能进行归一化。所有比较的模型都具有相同的参数数量和激活参数数量。可以发现,细粒度专家切分和共享专家隔离都对整体性能的提升做出了贡献。
图3 | DeepSeekMoE的消融研究。为清晰呈现,性能已按最佳性能进行归一化。所有比较的模型都具有相同的参数数量和激活参数数量。可以发现,细粒度专家切分和共享专家隔离都对整体性能的提升做出了贡献。

4.5. 专家特化分析

  • 实验内容:通过一系列实验分析DeepSeekMoE 2B的专家特化程度。
  • 实验结果

    1. 路由专家冗余度更低:如图4所示,在禁用部分最高概率的路由专家时,DeepSeekMoE的性能下降比GShard×1.5更敏感,表明其路由专家之间的冗余度更低,每个专家都更不可替代。
    2. 共享专家不可替代:禁用共享专家并增加一个路由专家(保持计算量不变),Pile loss从1.808显著上升到2.414,表明共享专家学习了无法被路由专家替代的基础和核心知识。
    3. 知识获取更精确:如图5所示,DeepSeekMoE仅用4个激活的路由专家就能达到GShard(激活2个标准大小专家)的性能。进一步地,从头训练一个只激活3个路由专家的DeepSeekMoE模型(激活参数减半),其性能仍然优于GShard(图6)。
  • 分析结论:DeepSeekMoE实现了更高程度的专家特化,其路由专家冗余度低,共享专家功能独特,并且能以更高的效率(更少的激活专家)获取知识。

图4 | 不同比例的禁用顶级路由专家下的Pile损失。值得注意的是,DeepSeekMoE对禁用顶级路由专家的比例更为敏感,这表明DeepSeekMoE中路由专家之间的冗余度较低。
图5 | DeepSeekMoE中不同数量激活路由专家的Pile损失。仅激活4个路由专家,DeepSeekMoE就实现了与GShard相当的Pile损失。
图6 | GShard与激活专家数量减半的DeepSeekMoE(从头训练)的比较。在总专家参数相同、激活专家参数仅为一半的情况下,DeepSeekMoE仍然优于GShard。

5.2. 扩展至DeepSeekMoE 16B的评估

  • 实验内容:将DeepSeekMoE扩展到16B参数,在2T token上训练,并与DeepSeek 7B(内部同源数据训练)和LLaMA2 7B进行比较。
  • 实验结果

    • 与DeepSeek 7B对比(表3):DeepSeekMoE 16B仅用约40%的计算量,就取得了与DeepSeek 7B相当的整体性能。在语言建模和知识密集型任务上表现突出,但在多选任务(如MMLU)上受限于较少的注意力参数而表现稍弱。
    • 与LLaMA2 7B对比(表4):DeepSeekMoE 16B仅用约40%的计算量,在大部分基准上优于LLaMA2 7B,尤其在数学、代码和中文任务上优势明显。
    • Open LLM Leaderboard(图1):DeepSeekMoE 16B显著优于其他具有相似激活参数的模型,性能与激活参数多2.5倍的LLaMA2 7B相当。
  • 分析结论:DeepSeekMoE架构在大规模下依然高效,能以显著更低的计算成本达到甚至超越强大的密集模型的性能。

表3 | DeepSeek 7B与DeepSeekMoE 16B的比较。粗体表示最佳或接近最佳。仅用40.5%的计算量,DeepSeekMoE 16B就实现了与DeepSeek 7B相当的性能。
表4 | LLaMA2 7B与DeepSeekMoE 16B的比较。仅用39.6%的计算量,DeepSeekMoE 16B在大多数基准测试中优于LLaMA2 7B。

6. DeepSeekMoE 16B的对齐

  • 实验内容:对DeepSeekMoE 16B进行监督微调(SFT)以构建聊天模型,并与同样用SFT数据微调的LLaMA2 7B和DeepSeek 7B进行比较。
  • 实验结果:如表5所示,DeepSeekMoE Chat 16B在约40%的计算量下,与7B密集聊天模型在多数任务上性能相当或更优,尤其在代码生成上优势明显。在多选任务上的差距相较于基础模型有所缩小。
  • 分析结论:与一些前期研究不同,DeepSeekMoE模型可以从指令微调中显著受益,其聊天模型保持了基础模型的计算效率优势。
表5 | LLaMA2 SFT 7B、DeepSeek Chat 7B和DeepSeekMoE Chat 16B之间的比较,这三个模型都在相同的SFT数据上进行了微调。与两个7B密集模型相比,DeepSeekMoE Chat 16B在仅用40%计算量的情况下,在大多数基准测试上仍然取得了相当或更好的性能。
表5 | LLaMA2 SFT 7B、DeepSeek Chat 7B和DeepSeekMoE Chat 16B之间的比较,这三个模型都在相同的SFT数据上进行了微调。与两个7B密集模型相比,DeepSeekMoE Chat 16B在仅用40%计算量的情况下,在大多数基准测试上仍然取得了相当或更好的性能。

7. DeepSeekMoE 145B的初步探索

  • 实验内容:初步将DeepSeekMoE扩展至145B参数,在245B token上进行训练,并与GShard 137B和DeepSeek 67B进行比较。同时测试了一个激活专家减半的版本DeepSeekMoE 142B (Half Activated)。
  • 实验结果:如表6所示,(1)DeepSeekMoE 145B显著优于参数和计算量相当的GShard 137B。(2)DeepSeekMoE 145B仅用28.5%的计算量就达到了与DeepSeek 67B相当的性能。(3)激活专家减半的DeepSeekMoE 142B性能依然强劲,仅用18.2%的计算量就达到了DeepSeek 67B的水平,并优于GShard 137B。
  • 分析结论:DeepSeekMoE架构的优势在更大模型规模上得以延续,展现出极高的计算效率和性能潜力。
表6 | DeepSeek 67B (Dense)与约140B总参数规模的MoE模型比较。在“# Experts”和“# Activated Experts”行中,$n+k$分别表示$n$个共享专家和$k$个路由专家。粗体表示除最后一列外最佳或接近最佳的性能。DeepSeekMoE 145B,甚至只有一半激活专家参数的DeepSeekMoE 142B (Half Activated),都大幅优于GShard 137B。此外,DeepSeekMoE 145B用28.5%的计算量实现了与DeepSeek 67B相当的性能。
表6 | DeepSeek 67B (Dense)与约140B总参数规模的MoE模型比较。在“# Experts”和“# Activated Experts”行中,$n+k$分别表示$n$个共享专家和$k$个路由专家。粗体表示除最后一列外最佳或接近最佳的性能。DeepSeekMoE 145B,甚至只有一半激活专家参数的DeepSeekMoE 142B (Half Activated),都大幅优于GShard 137B。此外,DeepSeekMoE 145B用28.5%的计算量实现了与DeepSeek 67B相当的性能。

A7 补充细节:相关工作

MoE技术的发展。混合专家(MoE)技术最早由Jacobs等人(1991)【27, Adaptive mixtures of local experts, 1991, Neural Computing】和Jordan与Jacobs(1994)【28, Hierarchical mixtures of experts and the EM algorithm, 1994, Neural Computing】提出,用于通过独立的专家模块处理不同的样本。Shazeer等人(2017)【58, Outrageously large neural networks: The sparsely-gated mixture-of-experts layer, 2017, ICLR】将MoE引入语言模型训练,并构建了基于LSTM的大规模MoE模型。随着Transformer成为NLP最流行的架构,许多工作尝试将Transformer中的FFN扩展为MoE层来构建MoE语言模型。

主流MoE架构。GShard【33, Gshard: Scaling giant models with conditional computation and automatic sharding, 2021, ICLR】和Switch Transformer【16, Switch transformers: Scaling to trillion parameter models with simple and efficient sparsity, 2021, CoRR】是先驱,它们采用可学习的top-2或top-1路由策略,将MoE语言模型扩展到极大。Hash Layer【44, Hash layers for large sparse models, 2021, CoRR】和StableMoE【12, Stablemoe: Stable routing strategy for mixture of experts, 2022, ACL】使用固定的路由策略以获得更稳定的路由和训练。Zhou等人(2022)【69, Mixture-of-experts with expert choice routing, 2022, NeurIPS】提出了一种专家选择路由策略,其中每个token可以被分配给不同数量的专家。Zoph(2022)【70, Designing effective sparse expert models, 2022, IPDPS Workshops】专注于MoE模型的训练不稳定和微调困难问题,并提出ST-MoE来克服这些挑战。

与本文工作的关系。除了对MoE架构和训练策略的研究外,近年来还涌现了许多基于现有MoE架构的大规模语言或多模态模型【【14, Glam: Efficient scaling of language models with mixture-of-experts, 2022, ICML】; 【35, M6: A chinese multimodal pretrainer, 2021, CoRR】; 【43, Pangu-Σ: Towards trillion parameter language model with sparse heterogeneous computing, 2023, CoRR】; 【67, Openmoe: Open mixture-of-experts language models, 2023, GitHub】】。总的来说,之前的大多数MoE模型都基于传统的top-1或top-2路由策略,在提升专家特化方面留下了很大的空间。作为回应,本文的DeepSeekMoE架构旨在最大程度地提高专家特化。

A5 结论

本文介绍了DeepSeekMoE架构,旨在实现MoE语言模型中的极致专家特化。通过细粒度专家切分和共享专家隔离,DeepSeekMoE相比于主流MoE架构,实现了显著更高的专家特化和性能。
* 验证与优势:从2B参数的小规模模型开始,验证了DeepSeekMoE的优势,证明了其有能力接近MoE模型的性能上限。此外,提供了实证证据表明DeepSeekMoE比GShard具有更高水平的专家特化。
* 规模化与应用:将模型扩展到16B参数,在2T token上训练的DeepSeekMoE 16B,仅用约40%的计算量就展现出与DeepSeek 7B和LLaMA2 7B相当的卓越性能。此外,通过监督微调成功构建了MoE聊天模型,进一步展示了其适应性和多功能性。
* 未来展望:初步探索将DeepSeekMoE扩展到145B参数,发现其依然保持对GShard架构的巨大优势,并以28.5%(甚至可能低至18.2%)的计算量实现了与DeepSeek 67B相当的性能。
* 开源贡献:为了研究目的,公开发布了DeepSeekMoE 16B的模型检查点,该模型可部署在单张40GB显存的GPU上。希望这项工作能为学术界和工业界提供有价值的见解,并为大规模语言模型的加速发展做出贡献。

A6 附录

A. 超参数概览

下表7展示了不同规模DeepSeekMoE的超参数概览。

表7 | 不同规模DeepSeekMoE的超参数概览。相对专家大小是与标准FFN相比较。
表7 | 不同规模DeepSeekMoE的超参数概览。相对专家大小是与标准FFN相比较。

B. DeepSeekMoE与更大模型的比较

表8展示了DeepSeekMoE与GShard×1.2和GShard×1.5的比较。表9展示了DeepSeekMoE与Dense×4和Dense×16的比较。

表8 | DeepSeekMoE与更大的GShard模型之间的比较。
表8 | DeepSeekMoE与更大的GShard模型之间的比较。

在更大的13B总参数规模上,本文也比较了DeepSeekMoE与GShard×1.2和GShard×1.5,结果如表10所示。在更大规模上,DeepSeekMoE甚至明显优于GShard×1.5。

表9 | DeepSeekMoE与更大的密集基线模型之间的比较。
表10 | 在更大规模下,DeepSeekMoE与更大的GShard模型之间的比较。

C. DeepSeekMoE 16B的训练基准曲线

图7展示了DeepSeekMoE 16B和DeepSeek 7B(Dense)在训练过程中的基准曲线,以供参考。

图7 | DeepSeekMoE 16B和DeepSeek 7B(Dense)训练过程中的基准曲线。
图7 | DeepSeekMoE 16B和DeepSeek 7B(Dense)训练过程中的基准曲线。