大模型论文:DeepSeekMoE: Towards Ultimate Expert Specialization in Mixture-of-Experts Language Models

论文:https://arxiv.org/pdf/2401.06066

一、摘要

  • 在大型语言模型时代,专家混合(Mixture-of-Experts,MoE)是一种在扩大模型参数规模时管理计算成本的有前景架构。然而,传统的 MoE 架构(如 GShard)通常采用从 N N N 个专家中激活前 K K K个(Top- K K K)的方式,但在实现专家专化方面面临挑战,也就是说,很难确保每个专家能够学习到互不重叠且专注的知识。为此,我们提出了面向终极专家专化的 DeepSeekMoE 架构。该架构包含两项核心策略:(1)将专家细粒度划分为 m N mN mN 个子专家,并从中激活 m K mK mK个,从而实现更灵活的专家组合;(2)额外隔离出 K s K_s Ks 个共享专家,用于捕获通用知识并减少路由专家之间的冗余。从一个较小规模(20 亿参数)出发,我们证明了 DeepSeekMoE-2B 的性能与拥有 1.5 倍专家参数量和计算量的 GShard-2.9B 相当。此外,DeepSeekMoE-2B 的性能几乎接近其参数规模相同的稠密模型(dense counterpart),而后者代表了 MoE 模型性能的上限。随后,我们将 DeepSeekMoE 扩展至 160 亿参数,并展示其在仅使用约 40% 计算量的情况下,能达到与 LLaMA2-7B 相当的性能。进一步地,我们的初步尝试将 DeepSeekMoE 扩展至 1450 亿参数,结果持续验证了其相对于 GShard 架构的显著优势,并显示出其性能可与 DeepSeek-67B 相媲美,但计算量仅为后者的 28.5%,甚至可能低至 18.2%。

  • DeepSeekMoE 架构 通过:

    • 专家细分化(mN/mK 激活策略),
    • 与共享专家(shared experts)协作机制,
  • 成功地在专家混合架构中实现了高效的专家专化与知识共享平衡。

  • 一般的 MoE 是“多专家但分工混乱”,而 DeepSeekMoE 是“多层次专家 + 通用专家协作体系”,通过精细化专家拆分与共享知识机制,实现了更纯粹、更高效的专家专化。

二、介绍

  • 专家混合(Mixture-of-Experts, MoE) 架构能够在一定程度上实现参数规模的扩展,同时保持适度的计算成本。

  • 现有的 MoE 架构存在**知识混合(Knowledge Hybridity)知识冗余(Knowledge Redundancy)**等问题,限制了专家专化能力。也就是说,各专家难以学习到彼此不重叠且专注的知识内容。

  • 传统 MoE 架构在 Transformer 中,用多个专家模块替代标准前馈网络( FFNs),每个专家与标准 FFN 结构相同,每个 token 会被分配给一个或两个专家。这种架构带来了两个主要问题:

    • 知识混合问题:现有 MoE 通常只激活有限数量的专家(如 8 或 16 个),而每个被选中的专家往往需要覆盖多样化的知识,因此一个专家参数中会混杂不同类型的知识,不利于专化;
    • 知识冗余问题:分配到不同专家的 token 可能共享相同的通用知识,从而导致多个专家学习了重复内容,使参数利用率下降,浪费计算资源。
  • 这些问题共同阻碍了专家专化,使得模型难以接近理论上的性能上限。

  • 针对这些问题,本文提出了 DeepSeekMoE —— 一种专为实现终极专家专化而设计的创新型 MoE 架构。架构包含两项核心策略:

    1. 精细化专家划分(Fine-Grained Expert Segmentation):在保持计算成本不变的前提下,本文将专家进一步划分为更小的子专家单元,使每次激活的专家组合更灵活多样。精细化划分使得知识能被更细致地分解,并精确地分配给不同专家,每个专家因此能保持更高程度的专化。
    2. 共享专家隔离(Shared Expert Isolation):本文额外隔离出部分专家作为“共享专家”,这些专家始终被激活,专门用于捕获跨任务的通用知识。通过将共性知识集中到这些共享专家中,减少了被路由专家之间的冗余,从而提升参数效率,让路由专家能专注于特定领域。
  • 这一设计有助于模型更高效地学习不同类型的知识,使各专家专注且互补。,本文进行了实验对比:

模型 参数量 计算量 性能表现 备注
DeepSeekMoE-2B 2B 100% 性能超过 GShard-2B,接近稠密模型的上限 在 12 个 zero-shot 与 few-shot 基准上表现优秀
DeepSeekMoE-16B 16B 40% 与 DeepSeek-7B 和 LLaMA2-7B 性能相当 使用约 40% 的计算量,表现突出,适用于 2 万亿 tokens 大规模语料
DeepSeekMoE-16B (微调) 16B 100% 与 DeepSeek Chat-7B 和 LLaMA2-SFT-7B 性能相当 微调后用于聊天模型,结果良好
DeepSeekMoE-145B 145B 28.5%~18.2% 性能接近 DeepSeek-67B,计算量仅为 28.5%~18.2% 性能接近 DeepSeek-67B,但计算量仅为其 28.5%~18.2%

在这里插入图片描述

  • 这张图表明,DeepSeekMoE 16B 在高效利用计算资源方面表现优异,在 激活参数数量更少 的情况下能够实现 与更大模型相似的性能,这显示了该架构在计算效率和规模上的巨大优势。

  • 本文的主要贡献如下:

    • 架构创新(Architectural Innovation):提出了 DeepSeekMoE,一种创新型的 MoE 架构,旨在实现终极专家专化。该架构引入了两项核心机制:精细化专家划分共享专家隔离
    • 实证验证(Empirical Validation):通过大量实验验证了 DeepSeekMoE 的专家专化水平远高于传统架构。DeepSeekMoE-2B 的性能几乎达到 MoE 模型的理论上限。
    • 可扩展性(Scalability):成功将模型扩展至 16B 和 145B 参数规模,在显著减少计算量(仅 40%~28%)的情况下,性能仍与相同规模的稠密模型相当。
    • 对齐与微调(Alignment for MoE):通过有监督微调(SFT),将 DeepSeekMoE-16B 适配为对话模型,展示了其强大的适应性与多样性。
    • 公开发布(Public Release):已开放 DeepSeekMoE-16B 模型检查点,且该模型可在单张 40GB 显存的 GPU 上运行,无需量化处理。

三、 DeepSeekMoE架构

DeepSeekMoE架构包含了两项核心策略:精细化专家划分共享专家隔离。这两项策略旨在提升专家的专化程度。

在这里插入图片描述

  • (a) 代表了传统的 Top-2 路由策略,适合基础的 MoE 应用,但难以满足高效处理复杂任务的需求。(b) 引入了 精细化专家划分,提升了灵活性和专化性,但保持了计算效率。©DeepSeekMoE 的完整架构,结合了 共享专家隔离,优化了任务处理的效率和计算资源的利用,提升了整体性能。

3.1 精细化专家划分(Fine-Grained Expert Segmentation)

  • 当模型的专家数量有限时,每个专家必须学习多样化的知识,导致难以实现专化。因此,如果每个 token 可以路由到更多专家,知识可以被拆解并分配给不同的专家,从而实现更高的专化。

  • 通过将每个专家拆分成更小的子专家,减少了每个专家的尺寸,并增加了可激活的专家数量,保持了计算成本不变。具体方法是在 MoE 层 中将标准的 FFN(前馈网络)拆分成 m m m 个子专家,每个子专家占原专家的 $\frac{1}{m} $尺寸,激活的专家数量也增加了。 计算激活的专家输出:

    h t l = ∑ i = 1 m N g i t ⋅ FFN i ( u t l ) + u t l h_t^l = \sum_{i=1}^{mN} g_{it} \cdot \text{FFN}_i(u_t^l) + u_t^l htl=i=1mNgitFFNi(utl)+utl

    • **计算组合性:**精细化划分显著增加了激活组合的可能性。例如,假设 N = 16 N = 16 N=16,如果每个专家被拆分成 4 个子专家,则可以有 4,426,165,368 种不同的组合方式。

3.2 共享专家隔离(Shared Expert Isolation)

  • 在传统路由策略中,不同专家间可能需要共享通用知识,导致冗余。为了减少冗余,DeepSeekMoE 引入了 共享专家(Shared Experts) 概念,专门用于捕捉通用知识。

  • 通过为共享知识分配专门的共享专家,并确保每个 token 都路由到这些共享专家,减少了其他专家之间的冗余。此外,路由到共享专家的专家数量减少了 K s K_s Ks,保持计算量不变。计算每个 token 的输出:

    h t l = ∑ i = 1 K s FFN i ( u t l ) + ∑ i = K s + 1 m N g i t ⋅ FFN i ( u t l ) + u t l h_t^l = \sum_{i=1}^{K_s} \text{FFN}_i(u_t^l) + \sum_{i=K_s+1}^{mN} g_{it} \cdot \text{FFN}_i(u_t^l) + u_t^l htl=i=1KsFFNi(utl)+i=Ks+1mNgitFFNi(utl)+utl

  • 计算共享专家和精细化专家的门控值和激活规则。无论路由器如何,token 都会被确定性地分配到这些共享专家中。这确保了通用知识的捕捉,减少了计算量。

3.3 负载平衡(Load Balance)

  • 自动学习的路由策略可能导致负载不平衡,特别是:
  1. 路由崩溃: 只有少数专家被激活,导致其他专家训练不足。
  2. 设备级负载不均: 专家分布在多个设备上时,可能出现某些设备计算瓶颈。
  • 负载平衡损失:

    • 专家级平衡损失(Expert-Level Balance Loss):
      用于减轻路由崩溃问题,通过调整专家选择频率来确保负载均衡。
    • 设备级平衡损失(Device-Level Balance Loss):
      在设备间分配专家时,确保计算负载均衡,避免设备出现计算瓶颈。
  • 专家级平衡损失的计算:

    L E x p B a l = α 1 ∑ i = 1 N ′ f i p i \mathcal{L}_{ExpBal} = \alpha_1 \sum_{i=1}^{N'} f_i p_i LExpBal=α1i=1Nfipi

  • L E x p B a l \mathcal{L}_{ExpBal} LExpBal 代表专家级平衡损失,用于衡量每个专家的负载情况,确保负载均衡。 N ′ N' N 表示总的专家数量, f i f_i fi 是专家 i i i的负载因子,反映了该专家被激活的频率或次数, p i p_i pi 表示专家 i i i 的重要性,可能是与专家的任务相关的权重。 α 1 \alpha_1 α1 是一个超参数,用于调节负载平衡损失对训练过程的影响。

  • 设备级平衡损失的计算:

L D e v B a l = α 2 ∑ i = 1 D f i ′ p i ′ \mathcal{L}_{DevBal} = \alpha_2 \sum_{i=1}^{D} f_i' p_i' LDevBal=α2i=1Dfipi

  • L D e v B a l \mathcal{L}_{DevBal} LDevBal 代表设备级平衡损失,旨在确保在多设备计算中,设备间的负载保持均衡。 D D D 是设备的数量, f i ′ f_i' fi 是设备 i i i 的负载因子,反映了该设备的计算负载情况, p i ′ p_i' pi 是设备 i i i的重要性,表示该设备的任务重要性或计算能力的需求。 α 2 \alpha_2 α2 是一个超参数,控制设备负载平衡损失对整体训练的影响。

3.4 总结

  1. 精细化专家划分:将每个专家拆分成多个更小的子专家,增加了专家之间的组合灵活性,使得知识可以更加专注且灵活地分配给专家。
  2. 共享专家隔离:通过引入共享专家,捕捉跨任务的通用知识,减少冗余并提升计算效率。
  3. 负载平衡:引入了专家级和设备级的平衡损失,确保在分布式计算中避免负载不均,提升计算效率。
  • 这些创新使得 DeepSeekMoE 在大规模训练和推理中具备了更高的性能和计算效率,特别是在专家数量较大时,能够有效减少计算资源的浪费。

四、 验证实验

4.1 实验设置
  • 4.1.1 训练数据和分词
    • 本文的训练数据来源于 DeepSeek-AI 创建的大规模多语种语料库。该语料库主要集中在英语和中文,同时也包含其他语言。在验证实验中,从语料库中采样了包含 100B tokens 的子集来训练模型。为了进行分词,使用了 HuggingFace Tokenizer 工具,通过字节对编码(BPE)方法对训练语料子集进行分词。在验证实验中,选择了一个 8K 的词汇表,随着模型规模的扩大,词汇表会随之增加。
  • 4.1.2 基础设施
    • 实验基于 HAI-LLM 框架,结合了多种并行计算策略,包括张量并行、ZeRO 数据并行等。为了优化性能,还开发了 GPU 内核,支持 CUDA 和 Triton,以加速算法并融合不同专家的计算任务。所有实验均在配备 NVIDIA A100 或 H800 GPU 的节点上进行,使用 NVLink 和 InfiniBand 互联技术进行通信。
  • 4.1.3 超参数
    • 在验证实验中,将 Transformer 层数设置为 9,隐藏层维度为 1280,使用 10 个注意力头。使用 AdamW 优化器,学习率初期设置为线性增长,之后逐步衰减。在训练过程中,采用了 dropout 技术来防止过拟合,并根据任务规模调整了 批量大小训练步数
  • 4.1.4 评估基准
    • 本文在多个基准任务上进行了评估,涵盖了语言建模、语言理解与推理、阅读理解、代码生成和封闭书问答等任务。每个任务都使用了特定的评价标准(如准确率、Pass@1、EM率等)。
4.2 评估结果
  • 基准模型:在包括 DeepSeekMoE 的评估中,本文与五个其他模型进行了比较。Dense 代表标准的稠密 Transformer 模型,Hash LayerSwitch Transformer 属于 MoE 架构。我本文还与 GShard 进行了比较,DeepSeekMoE 使用了一个共享专家并通过调整专家的参数大小与计算量,展示了其在与其他 MoE 架构相比时的优势。

    在这里插入图片描述

  • 结果:结果表明,DeepSeekMoE 在所有任务上表现出 显著的性能优势,特别是在 语言理解阅读理解 等任务上。即使在与 GShard 等模型进行比较时,DeepSeekMoE 的表现也非常接近或超过了其他架构。

4.3 DeepSeekMoE 接近 MoE 模型的上限
  • 与 GShard 的比较:深入分析表明,DeepSeekMoE 在具有更多参数时,仍然能够接近或超过 GShard 模型的表现。在参数量上,DeepSeekMoE 表现出 优越的计算效率,与具有更大规模参数的模型相比,达到了类似的性能水平。
  • 与 DenseX16 的比较:在比较 DeepSeekMoE 和更大规模的稠密模型(DenseX16)时,结果表明 DeepSeekMoE 接近 DenseX16 的表现,并且 计算效率更高,特别是在处理大规模数据时,能够更有效地利用计算资源。

在这里插入图片描述

4.4 消融实验
  • 共享专家隔离:通过消融实验,证明了 共享专家隔离 对提高模型性能的重要作用。实验表明,通过隔离共享专家,DeepSeekMoE 在多个任务上均获得了显著的性能提升。

  • 精细化专家划分:实验还验证了 精细化专家划分 对模型性能的贡献。随着每个专家被进一步划分成更小的子专家,DeepSeekMoE 在任务执行时表现出了 持续的性能提升,特别是在需要更多任务适应性的情况下,精细化划分显示出了明显优势。

    在这里插入图片描述

4.5 专家专化分析
  • 专家冗余的减少:实验进一步展示了 DeepSeekMoE路由专家 之间具有较低的冗余性。在与 GShard 的比较中,DeepSeekMoE 对于 禁用一定比例的专家 显示出更高的灵敏度,说明它对冗余的控制更加严格,从而提升了 计算效率

在这里插入图片描述

在这里插入图片描述

  • DeepSeekMoE较少的计算资源 下,能够提供 与 GShard 相当的性能,表现出更高的 计算效率共享专家隔离精细化专家划分 都是提升 DeepSeekMoE 性能的关键因素。相比 GShardDeepSeekMoE激活专家数量计算开销 上的优化使得它在 多任务适应性整体表现 上具有更大的优势。
4.6 总结
  • DeepSeekMoE 在多个基准任务上展示了 卓越的性能,尤其是在 语言建模阅读理解代码生成 等领域,精细化专家划分共享专家隔离 有效地提升了模型的整体性能。
  • 相对于其他 MoE 架构DeepSeekMoE计算效率性能 上均表现突出,特别是在 大规模任务 上,展示了其 优越的性能计算能力
    读理解**、代码生成 等领域,精细化专家划分共享专家隔离 有效地提升了模型的整体性能。
  • 相对于其他 MoE 架构DeepSeekMoE计算效率性能 上均表现突出,特别是在 大规模任务 上,展示了其 优越的性能计算能力
  • 通过 消融实验,进一步验证了精细化划分和共享专家隔离策略对提升模型的性能和准确性至关重要。
Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐