接
【PyTorch][chapter-36][MOE- Mixture of Experts Explained 】[1]-CSDN博客
- 什么是 MOE(Mixture of Experts)
- MOE 的简史
- 什么是稀疏性?
- 负载均衡(load Balancing)
- MOE and Transformer
- Switch Transformers
- 使用路由器Z损失稳定训练
- Experts学习什么?
- 扩展Experts数量如何影响预训练?
- 微调MOE模型
- 何时使用稀疏专家混合模型 vs 密集模型?
- 让MOE飞速运行
- Experts并行
- 容量因子与通信成本
- 服务技术
- 高效训练
- 开源的专家混合模型
- 令人兴奋的研究方向
- 一些资源
- PyTorch 代码
一 Stabilizing training with router Z-loss
前面讨论的平衡损失可能会导致不稳定问题。我们可以使用多种方法来稳定稀疏模型,但代价是质量。例如,引入 dropout 可以提高稳定性,但会导致模型质量下降
另一方面,添加更多乘法组件可以提高质量,但会降低稳定性。
ST-MoE中引入的路由器 z-loss通过惩罚进入门控网络的大型逻辑,显著提高了训练稳定性,同时不降低质量。由于此损失鼓励值的绝对幅度更小,因此舍入误差会减少,这对于门控等指数函数可能非常有影响。我们建议查看论文以了解详细信息。
二: Experts学习什么?
ST-MoE 的作者观察到:
1 编码器专家专业化程度较高。 专注于一组标记或浅层概念。例如,我们可能会以标点符号专家、专有名词专家等结束
2 解码器专家的专业化程度较低。作者还在多语言设置中进行训练。虽然可以想象每个专家都专注于一种语言,但事实恰恰相反:由于标记路由和负载平衡,没有一个专家专门研究任何给定的语言。
三 扩展Experts数量如何影响预训练
专家数量越多,样本效率越高,加速越快,但这些收益正在减少(尤其是在 256 或 512 之后),并且推理需要更多 VRAM。Switch Transformers 在大规模上研究的属性在小规模上是一致的,即使每层有 2、4 或 8 位专家。
四 微调 MoE
Mixtral is supported with version 4.36.0 of transformers. You can install it with pip install transformers==4.36.0 --upgrade
密集模型和稀疏模型之间的过拟合动态非常不同。稀疏模型更容易出现过度拟合,因此我们可以在专家内部探索更高的正则化(例如 dropout)(例如,我们可以为密集层设置一个 dropout 率,为稀疏层设置另一个更高的 dropout 率)。
一个问题是是否使用辅助损失进行微调。ST-MoE 的作者尝试关闭辅助损失,即使删除多达 11% 的标记,质量也没有受到明显影响。删除标记可能是一种有助于防止过度拟合的正则化形式。
Switch Transformers 观察到,在固定的预训练困惑度下
1 :稀疏模型在下游任务中的表现比密集模型差,尤其是在 SuperGLUE 等推理密集型任务中。
2 : 对于 TriviaQA 等知识密集型任务,稀疏模型的表现却出奇地好。
作者还观察到,帮助进行微调的专家数量较少。另一个证实泛化问题的观察结果是,该模型在较小的任务中表现较差,但在较大的任务中表现良好。
可以尝试冻结所有非专家权重。也就是说,我们只更新 MoE 层。这会导致性能大幅下降。我们可以尝试相反的方法:只冻结 MoE 层中的参数,这几乎与更新所有参数一样有效。这可以帮助加快速度并减少微调所需的内存。这可能有点违反直觉,因为 80% 的参数都在 MoE 层中(在 ST-MoE 项目中)。他们对该架构的假设是,由于专家层每 1/4 层才出现一次,并且每个 token 每层最多看到两个专家,因此更新 MoE 参数影响的层比更新其他参数要少得多。
在微调稀疏 MoE 时要考虑的最后一部分是,它们具有不同的微调超参数设置 - 例如,稀疏模型往往从较小的批量大小和较高的学习率中受益更多。
此时,您可能会感到有些难过,因为人们一直在努力微调 MoE。令人兴奋的是,最近的一篇论文《MoEs Meets Instruction Tuning》(2023 年 7 月)进行了以下实验:
- 单任务微调
- 多任务指令调整
- 多任务指令调整,然后进行单任务微调
当作者微调 MoE 和 T5 等效模型时,T5 等效模型表现更好。当作者微调 Flan T5(T5 指令等效模型)MoE 时,MoE 表现明显更好。不仅如此,Flan-MoE 对 MoE 的改进大于 Flan T5 对 T5 的改进,这表明 MoE 可能从指令调整中受益比密集模型多得多。MoE 从更多任务中受益更多。与之前建议关闭辅助损失函数的讨论不同,损失实际上可以防止过度拟合。
五 何时使用稀疏 MoE 与密集模型?
对于多台机器的高吞吐量场景,专家非常有用。如果预训练的计算预算固定,则稀疏模型将更为理想。对于 VRAM 较少的低吞吐量场景,密集模型将更好。
注意:不能直接比较稀疏模型和密集模型之间的参数数量,因为两者代表着截然不同的东西。
密集层和稀疏层的主要区别在于神经网络中神经元在各层之间的连接方式。
FFN 密集层(或全连接层)将一层中的每个神经元连接到下一层中的每个神经元,从而产生大量参数。
MOE 相比之下,稀疏层有意限制这些连接,只允许一部分神经元连接到下一层。这种结构差异会影响计算效率、内存使用情况以及每层适合解决的问题类型。
六 Making MoEs go brrr
最初的 MoE 工作将 MoE 层作为分支设置,这导致计算速度变慢(因为 GPU 不是为此设计的),并且导致网络带宽成为瓶颈(因为设备需要向其他设备发送信息)。本节将讨论一些现有工作,以使使用这些模型进行预训练和推理更加实用。
七 并行性
让我们简单回顾一下并行性:
- 数据并行性:相同的权重在所有cores上复制,并且数据在cores之间进行分区。
- 模型并行性:模型跨cores分区,数据跨cores复制。
- 模型和数据并行:我们可以跨cores划分模型和数据。请注意,不同的核心处理不同的数据批次。
- 专家并行性:专家被放置在不同的工作器上。如果与数据并行性相结合,则每个核心都有不同的专家,并且数据在所有核心上进行分区
对于专家并行,专家被放置在不同的工作器上,每个工作器都会获取不同的训练样本批次。对于非 MoE 层,专家并行的行为与数据并行相同。对于 MoE 层,序列中的令牌会被发送到所需专家所在的工作器。
八 容量系数和通信成本
增加容量因子 (CF) 会提高质量,但会增加通信成本和激活内存。如果全对全通信速度较慢,则使用较小的容量因子更好。一个好的起点是使用容量因子为 1.25 的 top-2 路由,每个核心配备一名专家。在评估期间,可以更改容量因子以减少计
九 服务技巧
MoE 的一个大缺点是参数数量太多。对于局部用例,可能需要使用较小的模型。让我们快速讨论一下可以帮助提供服务的几种技术:
- 1 Switch Transformers 的作者们进行了早期的蒸馏实验。通过将 MoE 蒸馏回其密集对应部分,他们可以保留 30-40% 的稀疏性增益。因此,蒸馏具有更快的保留和在生产中使用较小模型的优势。
- 2 最近的方法修改了路由,将完整的句子或任务路由给专家,从而允许提取子网络进行服务。
- 3 专家聚合 (MoE):该技术合并专家的权重,从而减少推理时的参数数量。
十 更高效的训练
FasterMoE(2022 年 3 月)分析了 MoE 在高效分布式系统中的性能,并分析了不同并行策略的理论极限,以及倾斜专家流行度的技术、减少延迟的细粒度通信调度,以及根据最低延迟选择专家的调整拓扑感知门,从而将速度提高了 17 倍。
Megablocks(2022 年 11 月)通过提供可以处理 MoE 中存在的动态性的新 GPU 内核来探索高效的稀疏预训练。他们的提案从不丢弃令牌,并有效地映射到现代硬件,从而显著提高速度。有什么诀窍?传统的 MoE 使用分批矩阵乘法,假设所有专家都具有相同的形状和相同数量的令牌。相比之下,Megablocks 将 MoE 层表示为可以适应不平衡分配的块稀疏操作。
十一 开源代码
目前有多个开源项目用于训练 MoE:
- Megablocks:https://github.com/stanford-futuredata/megablocks
- Fairseq:https://github.com/facebookresearch/fairseq/tree/main/examples/moe_lm
- OpenMoE:https://github.com/XueFuzhao/OpenMoE
在已发布的开放获取 MoE 领域中,您可以检查:
- Switch Transformers(谷歌):基于 T5 的 MoE 集合,包含 8 到 2048 位专家。最大的模型有 1.6 万亿个参数。
- NLLB MoE(Meta):NLLB 翻译模型的 MoE 变体。
- OpenMoE:一项社区努力,已发布基于 Llama 的 MoE。
- Mixtral 8x7B (Mistral):一款高质量的 MoE,性能优于 Llama 2 70B,推理速度更快。还发布了一个指令调优模型。有关更多信息,请参阅公告博客文章。
十二 研究方向
进一步的实验是将稀疏的 MoE提炼回具有更少参数但参数数量相似的密集模型。
另一个领域将是 MoE 的量化。QMoE ( 2023年 10 月)是朝着这个方向迈出的一大步,它将 MoE 量化为每个参数小于 1 位,从而将使用 3.2TB 加速器的 1.6T Switch Transformer 压缩到仅 160GB。
因此,TL;DR,有一些有趣的领域值得探索:
- 将 Mixtral 提炼为密集模型
- 探索专家的模型合并技术及其对推理时间的影响
- 执行 Mixtral 的极端量化技术
十三 Some resources
- Adaptive Mixture of Local Experts (1991)
- Learning Factored Representations in a Deep Mixture of Experts (2013)
- Outrageously Large Neural Networks: The Sparsely-Gated Mixture-of-Experts Layer (2017)
- GShard: Scaling Giant Models with Conditional Computation and Automatic Sharding (Jun 2020)
- GLaM: Efficient Scaling of Language Models with Mixture-of-Experts (Dec 2021)
- Switch Transformers: Scaling to Trillion Parameter Models with Simple and Efficient Sparsity (Jan 2022)
- ST-MoE: Designing Stable and Transferable Sparse Expert Models (Feb 2022)
- FasterMoE: modeling and optimizing training of large-scale dynamic pre-trained models(April 2022)
- MegaBlocks: Efficient Sparse Training with Mixture-of-Experts (Nov 2022)
- Mixture-of-Experts Meets Instruction Tuning:A Winning Combination for Large Language Models (May 2023)
- Mixtral-8x7B-v0.1, Mixtral-8x7B-Instruct-v0.1.