Skip to content

MOE (Mixture-of-Experts) 篇

来源:AiGC面试宝典 日期:2024年6月23日


一、为什么需要 MOE (Mixture-of-Experts)?

  • 模型和训练样本的增加,导致了训练成本的平方级增长
  • 如何在牺牲极少的计算效率的情况下,把模型规模提升上百倍、千倍?

📝 通俗解释:想象一下,一个公司要服务越来越多的客户,如果每个客户都派一个专属团队去服务,成本会非常高。MOE的思路是:建立一个包含很多"专家"的资源池,根据客户的具体需求,只启用相关的专家团队来服务,这样既服务好了客户,又节省了人力成本。


二、MOE (Mixture-of-Experts) 的思路是什么样的?

MOE (Mixture-of-Experts) 作为一种基于稀疏 MoE 层的深度学习模型架构,能够将大模型拆分成多个小模型(专家,Expert),然后在每轮迭代过程中,根据样本数量决定激活一定量的专家用于计算,实现节省计算资源的目的;同时,MOE 引入可训练并确保稀疏性的门(Gate)机制,以保证计算能力的优化。

与密集模型不同,MoE 将模型的某一层扩展为多个具有相同结构的专家网络(Expert),并由门(Gate)网络决定激活哪些 Expert 用于计算,从而实现超大规模稀疏模型的训练。

以下图为例,模型包含 3 个模型层,如(a)到(b)所示,将中间层扩展为具有 n 个 Expert 的 MoE 结构,并引入 Gating Network 和 Top-k 机制,MoE 细节如下图(c)所示。

MOE Layer 架构图 diagram_1

📝 通俗解释:上图展示了MOE的核心思想。左边(a)是普通网络,(b)是把中间层换成MOE结构。右边(c)是MOE的内部细节:输入x先经过"门卫"(Gate Network),门卫决定让哪几个专家(Expert 1~n)来工作,然后把这几个专家的输出按权重加起来。就像一个医院分诊台,病人来了之后,分诊台根据病情决定让哪几个专科医生来诊治。


MOE 计算公式

计算过程如下述公式:

$$ MoE(x) = \sum_{i=1}^{n} (G(x)_i \cdot E_i(x)) $$

$$ G(x) = TopK(softmax(W_g \cdot x + \epsilon)) $$

📝 通俗解释:第一个公式表示:最终输出 = 各个专家输出的加权和(权重由门控决定)。第二个公式表示:门控网络先计算每个专家的得分,然后取前k个得分最高的专家(TopK),这就是"稀疏"的含义——每次只让少数专家工作。


三、介绍一下 MOE (Mixture-of-Experts) 分布式并行策略?

并行策略示意图 diagram_2

📝 通俗解释:MOE的并行策略就是决定如何把"专家"们分配到不同的计算设备(GPU)上。不同的分配方式有不同的优缺点,就像决定如何分配员工到不同办公室一样。

3.1 MOE + 数据并行

在数据并行模式下包含 MOE 架构,门网络(Gate)和专家网络都被复制地放置在各个运算单元上。下图展示了一个有三个专家的两路数据并行 MoE 模型进行前向计算的方式。

数据并行示意图 图片描述:两个Worker并行,每个Worker包含Expert 1, 2, 3

📝 通俗解释:数据并行就像每个员工都有一份完整的专家名单。两个人同时处理不同的数据,但他们手里都有全部的专家可以用。这种方式简单,但当专家数量很多时,每个设备都需要复制所有专家,显存压力大。

3.2 MOE + 模型并行

该策略门网络依然是复制地被放置在每个计算单元上,但是专家网络被独立地分别放置在各个计算单元上。因此,需引入额外的通信操作,该策略可以允许更多的专家网络同时被训练,而其数量限制与计算单元的数量(如:GPU 数量)正相关。

下图展示了一个有六个专家网络的模型被两路专家并行地训练。专家 1-3 被放置在第一个计算单元上,而专家 4-6 被放置在第二个计算单元上。

模型并行示意图 图片描述:专家并行,Worker 1有Expert 1~3,Worker 2有Expert 4~6,存在Cross-worker Communication

📝 通俗解释:模型并行就像把专家们分散到不同办公室。当需要某个专家时,可能需要跨办公室喊人(通信)。这样可以让更多专家同时工作,但需要协调沟通。该模式针对不同的模型和设备拓扑需要专门的并行策略,同时会引入额外的通信,因此,相较于数据并行+MOE策略,侵入性更强。

除了上述两种 MOE 并行方案之外,还可以 MOE+数据并行+模型并行、MOE+ZeRO 增强的数据并行等。


四、MoE 大模型具备哪些优势?

  1. 训练速度更快,效果更好
  2. 相同参数,推理成本低
  3. 扩展性好:允许模型在保持计算成本不变的情况下增加参数数量,这使得它能够扩展到非常大的模型规模,如万亿参数模型
  4. 多任务学习能力:MoE 在多任务学习中具备很好的性能(比如 Switch Transformer 在所有 101 种语言上都显示出了性能提升,证明了其在多任务学习中的有效性)

📝 通俗解释:MOE的优势就像一个公司有很多各有所长的专家。面对不同任务时,只启用相关专家,所以"养"专家的成本(计算资源)不变,但能处理的任务范围大大增加。一个100人的团队,可以处理原本需要1000人才能做的事情。


五、MoE 大模型具备哪些缺点?

  1. 训练稳定性:MoE 在训练过程中可能会遇到稳定性问题
  2. 通信成本:在分布式训练环境中,MoE 的专家路由机制可能会增加通信成本,尤其是在模型规模较大时
  3. 模型复杂性:MoE 的设计相对复杂,可能需要更多的工程努力来实现和优化
  4. 下游任务性能:MoE 由于其稀疏性,使得在 Fine-tuning 过程中容易出现过拟合

📝 通俗解释:MOE的缺点就像是管理一个庞大的专家团队:1)训练时专家们可能工作不均衡(有些太忙有些太闲);2)专家们分散在不同地方,需要经常沟通协调;3)系统设计复杂,需要很多工程技巧;4)微调时容易"偏科",只记住训练数据而不会灵活应用。


六、MoE 为什么可以实现更大模型参数、更低训练成本?

MoE 使用了混合精度的方法,例如用 bfloat16 精度训练专家,同时对其余计算使用全精度进行较低的精度可以减少处理器间的通信成本、计算成本以及存储 tensor 的内存。

这主要是因为稀疏路由的原因,每个 Token 只会选择 top-k 个专家进行计算。同时可以使用模型并行、专家并行和数据并行,优化 MoE 的训练效率。而负载均衡损失可提升每个 Device 的利用率。

📝 通俗解释:MOE省成本的秘诀在于"偷懒"——每次只让少数专家干活(稀疏激活)。就像一个公司有100个专家,但每个任务只找2个最相关的来处理。这样100个专家的能力都整合在一起了,但干活的成本只是2个专家的成本。同时,用低精度计算可以进一步减少内存和通信开销。


七、MoE 如何解决训练稳定性问题?

  1. 辅助损失函数(Auxiliary Loss):引入负载均衡损失(Load Balancing Loss),强制要求各个专家被激活的概率尽量均匀,避免某些专家被过度使用而其他专家闲置
  2. 噪声项引入:在门控机制中加入随机噪声,增加专家选择的多样性
  3. 专家容量限制(Expert Capacity):设置每个专家处理 Token 的最大数量限制,当某个专家达到容量上限时,额外的 Token 会被路由到其他专家
  4. 梯度裁剪(Gradient Clipping):防止梯度爆炸,保证训练过程的数值稳定性
  5. 混合精度训练:使用 bf16 等低精度格式时注意保持关键计算的精度

📝 通俗解释:训练稳定性问题就像是专家团队工作不均——有的专家忙死,有的闲死。解决方案包括:1)设置"轮班表"让大家轮流工作;2)随机分配一些任务给不太忙的专家;3)设置每个专家的工作量上限;4)监控并调整大家的工作节奏。


八、MoE 如何解决 Fine-Tuning 过程中的过拟合问题?

可以通过以下方式解决:

  • 更大的 Dropout(主要针对 Expert)
  • 更大的学习率
  • 更小的 Batch Size
  • 正则化技术:增加 L2 正则化强度
  • 专家级别的正则化:对不同专家使用独立的正则化策略

📝 通俗解释:Fine-tuning时过拟合就像一个学生死记硬背答案而不是真正理解。解决方法是:1)增加"考试难度"(更大Dropout);2)让学习更仔细但少学一点(大学习率+小batch);3)给每个专家单独辅导,让它们不要"偷懒"记住所有数据。目前看到的主要是预训练的优化,针对 Fine-Tuning 的优化主要是一些常规的手段。


九、MOE 算法在训练大语言模型时有哪些应用场景?

MOE 算法在训练大语言模型时有以下几个应用场景:

  • 解决多模态问题:在多模态大模型的开发中,每个数据集可能包含来自文本、图像、语音等不同模态的数据,这些数据之间的特征和标注关系可能不同。MoE 算法可以将不同模态的数据分发给专门的子模型(即“专家”),让它们在各自擅长的领域内进行处理,并最后将结果汇总

  • 垂直领域应用:随着应用场景的复杂化和细分化,大模型需要同时回答通识问题和解决专业领域问题。MOE 算法可以将不同领域的专家集合起来,让它们各自负责解答特定问题,最后将结果汇总。这种方式可以提高模型的性价比,使其既能应对通用问题,又能在特定领域有更好的表现

  • 提高模型规模和效率:MOE 算法通过引入稀疏性来提高模型的规模和效率。稀疏混合专家模型技术可以将大模型拆分为多个子模型,每个子模型只处理部分训练数据,从而减少了每个子模型的参数量和计算量,提高了训练效率和推理速度

  • 自然语言处理领域:MOE 算法已经成功应用于自然语言处理领域。例如,谷歌在机器翻译方面引入 MOE 算法,通过在 LSTM 层之间增加 MOE 实现了性能的提升。此外,MOE 技术还被应用于 Transformer 架构中,提供了高效的分布式并行计算架构,进一步挖掘了 MOE 在自然语言处理领域中的潜力

📝 通俗解释:MOE的应用场景很广泛:1)多模态——让文字专家处理文字,图像专家处理图像;2)垂直领域——既有"全科医生"回答常识问题,也有"专科医生"处理专业问题;3)大规模模型——用少量计算资源训练超大模型;4)机器翻译、Transformer等具体技术场景。


整理日期:2024/8/11

基于 MIT 许可发布