使用MergeKit创建自己的专家混合模型:将多个模型组合成单个MoE

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
简介: MoE架构通过MergeKit实现新突破,允许整合预训练模型创建frankenMoEs,如FrankenMoE,区别于头开始训练的MoEs。MergeKit工具支持选择专家模型,定义正负提示,并生成MoE配置。

由于Mixtral的发布,专家混合(MoE)架构在最近几个月变得流行起来。虽然Mixtral和其他MoE架构是从头开始预训练的,但最近出现了另一种创建MoE的方法:Arcee的MergeKit库可以通过集成几个预训练模型来创建moe。这些人通常被称为frankenMoEs或MoErges,以区别于预先训练的MoEs。

在本文中,我们将详细介绍MoE架构是如何工作的,以及如何创建frankenmoe。最后将用MergeKit制作自己的frankenMoE,并在几个基准上对其进行评估。

MOE

混合专家是为提高效率和性能而设计的体系结构。它使用多个专门的子网,称为“专家”。与激活整个网络的密集模型不同,MoEs只根据输入激活相关专家。这可以获得更快的训练和更有效的推理。

MoE模型的核心有两个组件:

稀疏MoE层:它们取代了transformer 体系结构中的密集前馈网络层。每个MoE层包含几个专家,并且只有这些专家的一个子集被用于给定的输入。

Gate Network或Router:该组件确定哪些令牌由哪些专家处理,确保输入的每个部分由最合适的专家处理。

在下面的示例中,我们展示了如何将Mistral-7B块转换为具有稀疏MoE层(前馈网络1、2和3)和路由器的MoE块。本例表示一个拥有三个专家的MoE,其中两名目前正在工作(ffn1和ffn3)。

由于模型的复杂性,微调moe过程可能很困难,需要在训练期间平衡专家的使用,以适当地训练门控权重以选择最相关的权重。在内存方面,即使在推理过程中只使用了总参数的一小部分,但包括所有专家在内的整个模型都需要加载到内存中,这需要很高的VRAM容量。

moe有两个基本参数:

专家数(num_local_experts):这决定了体系结构中专家的总数(例如,Mixtral为8)。专家数越多,VRAM的使用率就越高。

每专家的令牌数(num_experts_per_tok):这决定了每个令牌和每个层所使用的专家数量(例如,Mixtral为2)。在每个令牌的高数量专家与快速训练和推理的低数量专家之间存在权衡。

以前moe的表现不如密集模型。但是2023年12月发布的Mixtral-8x7B改变了这个观点。另外就是传闻GPT-4也是一个MoE,这是有道理的,因为与密集模型相比,OpenAI运行和训练它要便宜得多。

MoEs vs frankenMoEs

传统的moe,专家和路由共同训练。但是我们今天要介绍的frankenMoEs只升级现有的模型,然后初始化路由器。

也就是说我们从基本模型中复制大多数的权重(LN和注意力层),然后再复制每个专家中的FFN层的权重。也就是说除了ffn之外,所有其他参数都是共享的。这个原理和Mixtral-8x7B与8个专家没有8*7 = 56B参数,而是大约45B,每个令牌使用两个专家可以提供12B密集模型的推理速度(FLOPs),而不是14B是一样的。

MergeKit为了选择最相关的专家并适当地初始化他们,实现了三种初始化路由器的方式:

随机权重Random:这是最简单但是最不建议的方法,因为每次都可能选择相同的专家(它需要进一步微调或num_local_experts = num_experts_per_tok,这意味着不需要任何路由)。

低成本嵌入Cheap embed:它直接使用输入标记的原始嵌入,并在所有层上应用相同的转换。这种方法计算成本低,适合在功能较弱的硬件上执行。

隐藏层表示Hidden:它通过从LLM的最后一层提取积极和消极提示列表来创建隐藏表示。对它们进行平均和归一化来初始化门控单元。

通过上面描述就可以猜到“Hidden”初始化是将令牌正确路由到最相关专家的最有效方法。在下一节中,我们将使用这种技术创建自己的frankenMoE。

创建frankenMoEs

首先我们需要选择n位专家。这里将使用Mistral-7B,因为它的尺寸合适,并且也经过了测试是目前比较好的模型。像Mixtral这样的8个专家有点多了,所以在本例中我们将使用总共四个专家,每个令牌和每个层使用其中两个专家。我们最终将得到一个具有24.2B个参数的模型,而不是4*7 = 28B个参数。

我们这次的目标是创建一个全面的模型,它可以做几乎所有的事情:写故事、解释文章、用Python编写代码等等。所以可以将这个需求分解为四个任务,并为每个任务选择最好的专家。我是这样分解它的:

聊天模型:使用的通用模型mlabonne/AlphaMonarch-7B,完全符合要求。

代码模型:能够生成良好代码的模型。我对基于mistral - 7b的代码模型没有太多的经验,但我发现beowolx/CodeNinja-1.0-OpenChat-7B与其他代码模型相比来说会好一些。

数学模型:数学对LLM来说很棘手,所以我们想要一个专门的数学模型。这里选择了mlabonne/ neuralaredevil - 7b,因为它的MMLU和GMS8K分数很高

角色扮演模式:这种模式的目标是写出高质量的故事和对话。所以SanjiWatsuki/ Kunoichi-DPO-v2-7B看样子不错,因为MT-Bench评分很高(8.51)。

可以看到我们都是选择的基于mistral - 7b的模型,因为这是MergeKit的要求,模型的架构必须要一致,所以除了我们以上的方法以外还可以选择使用不同数据进行微调的模型,只要模型表现有差异即可,但是最重要的一点是模型架构必须相同。

现在我们已经有了使用的专家,就可以创建YAML配置,MergeKit将使用它来创建frankenMoE。我们的配置如下:

 base_model: mlabonne/AlphaMonarch-7B
 experts:
   - source_model: mlabonne/AlphaMonarch-7B
     positive_prompts:
     - "chat"
     - "assistant"
     - "tell me"
     - "explain"
     - "I want"
   - source_model: beowolx/CodeNinja-1.0-OpenChat-7B
     positive_prompts:
     - "code"
     - "python"
     - "javascript"
     - "programming"
     - "algorithm"
   - source_model: SanjiWatsuki/Kunoichi-DPO-v2-7B
     positive_prompts:
     - "storywriting"
     - "write"
     - "scene"
     - "story"
     - "character"
   - source_model: mlabonne/NeuralDaredevil-7B
     positive_prompts:
     - "reason"
     - "math"
     - "mathematics"
     - "solve"
     - "count"

还有很多其他配置,请参看MergeKit的文档。

对于每个专家,提供了五个基本的积极提示。如果真正使用的话可以更加详细,比如写出完整的句子。因为最好的策略是使用能够触发特定专家的真实提示,添加负面提示来做相反的事情也是一个好方法。

准备好之后,可以将配置保存为config.yaml。在同一个文件夹中,我们将下载并安装mergekit库(mixtral分支)。

 git clone -b mixtral https://github.com/arcee-ai/mergekit.git
 cd mergekit && pip install -e .
 pip install -U transformers

如果你的计算机有足够的内存(大约24 - 32gb),你可以运行以下命令:

 mergekit-moe config.yaml merge --copy-tokenizer

如果你没有足够的内存,你可以像下面这样对模型进行分片(这需要更长的时间):

 mergekit-moe config.yaml merge --copy-tokenizer --allow-crimes --out-shard-size 1B --lazy-unpickle

这个命令自动下载专家并在目录中创建frankenMoE。对于我们选择的 “hidden”门模式,还可以使用load-in-4bit和load-in-8bit选项以较低的精度计算隐藏状态。

还可以将配置复制到LazyMergekit中,我们将在Colab提供中(本文最后),可以输入您的模型名称,选择混合分支,指定Hugging Face用户名/令牌,并运行。

为了更好地了解其功能,我们在三个不同的基准测试上对其进行了评估:Nous的基准测试套件、EQ-Bench和Open LLM Leaderboard。这个模型不是为了在传统的基准测试中脱颖而出而设计的,因为代码和角色扮演模型通常不适用于那些环境。但是由于强大的通用专家,它表现得非常好。

beyond - 4x7b -v3是Nous基准测试套件中最好的模型之一(使用LLM AutoEval进行评估),性能明显优于v2。

它也是EQ-Bench排行榜上最好的4x7B模型,优于旧版本的ChatGPT和Llama-2-70b-chat。beyond与Mixtral-8x7B-Instruct-v0.1和Gemini Pro非常接近,后者(据说)要大得多。

最后,它在Open LLM排行榜上的表现也很强劲,明显优于v2模型。

在这些定量评估之上,我还建议使用LM Studio上以更定性的方式检查模型的输出。测试这些模型的一种常用方法是收集一组问题并检查它们的输出。通过这种策略,我发现与其他模型(包括AlphaMonarch-7B)相比,beyond - 4x7b -v3对用户和系统提示的变化非常稳健。这是非常酷的,因为它提高了模型的可用性。

frankenMoEs是一种很有前途但仍处于实验阶段的方法。可能会比SLERP或DARE TIES等更简单的合并技术更具优势。并且当只对两个专家使用frankenMoEs时,它们的表现可能不如简单地合并两个模型那么好。但是frankenMoEs擅长保存知识,这可以获得更强大的模型,如我们上面的beyond - 4x7b -v3所示。

总结

在本文中,我们介绍了混合专家体系结构。与从零开始训练的传统moe不同,MergeKit通过整合专家来促进moe的创建,提供了一种提高模型性能和效率的创新方法。我们还详细介绍了使用MergeKit创建MoE的过程,以下是本文的一些代码

https://avoid.overfit.cn/post/b3588f09e1794b3f8edde5a07b2c270a

作者:Maxime Labonne

目录
相关文章
|
8月前
|
物联网 网络架构
PHATGOOSE:使用LoRA Experts创建低成本混合专家模型实现零样本泛化
这篇2月的新论文介绍了Post-Hoc Adaptive Tokenwise Gating Over an Ocean of Specialized Experts (PHATGOOSE),这是一种通过利用一组专门的PEFT模块(如LoRA)实现零样本泛化的新方法
95 0
|
6天前
|
机器学习/深度学习 人工智能 NoSQL
记忆层增强的 Transformer 架构:通过可训练键值存储提升 LLM 性能的创新方法
Meta研究团队开发的记忆层技术通过替换Transformer中的前馈网络(FFN),显著提升了大语言模型的性能。记忆层使用可训练的固定键值对,规模达百万级别,仅计算最相似的前k个键值,优化了计算效率。实验显示,记忆层使模型在事实准确性上提升超100%,且在代码生成和通用知识领域表现优异,媲美4倍计算资源训练的传统模型。这一创新对下一代AI架构的发展具有重要意义。
30 11
记忆层增强的 Transformer 架构:通过可训练键值存储提升 LLM 性能的创新方法
|
12天前
|
机器学习/深度学习 人工智能 计算机视觉
NeurIPS 2024:无需训练,一个框架搞定开放式目标检测、实例分割
在NeurIPS 2024会议上,论文提出了一种名为VL-SAM的框架,旨在解决开放式目标检测和实例分割任务。该框架结合了视觉语言模型(VLM)和Segment-Anything模型(SAM),利用注意力图作为提示,在无需额外训练的情况下实现未知物体的检测与分割。实验结果显示,VL-SAM在长尾实例分割数据集(LVIS)和角落情况目标检测数据集(CODA)上均表现出色,展示了其在现实世界应用中的潜力。然而,注意力图质量和计算复杂性仍是潜在挑战。
37 19
|
1月前
|
机器学习/深度学习 人工智能 计算机视觉
字节豆包大模型团队突破残差连接局限!预训练收敛最快加速80%
字节跳动豆包大模型团队提出“超连接”创新方法,突破残差连接局限,引入可学习的深度和宽度连接,动态调整网络层间连接强度。该方法在大型语言模型预训练中实现最快收敛速度,加速80%,并在图像生成、分类等任务中表现出色,显著提升准确率和稳定性。论文链接:https://arxiv.org/pdf/2409.19606
69 5
|
2月前
|
监控
SMoA: 基于稀疏混合架构的大语言模型协同优化框架
通过引入稀疏化和角色多样性,SMoA为大语言模型多代理系统的发展开辟了新的方向。
76 6
SMoA: 基于稀疏混合架构的大语言模型协同优化框架
|
2月前
|
机器学习/深度学习 数据采集 数据处理
谷歌提出视觉记忆方法,让大模型训练数据更灵活
谷歌研究人员提出了一种名为“视觉记忆”的方法,结合了深度神经网络的表示能力和数据库的灵活性。该方法将图像分类任务分为图像相似性和搜索两部分,支持灵活添加和删除数据、可解释的决策机制以及大规模数据处理能力。实验结果显示,该方法在多个数据集上取得了优异的性能,如在ImageNet上实现88.5%的top-1准确率。尽管有依赖预训练模型等限制,但视觉记忆为深度学习提供了新的思路。
46 2
|
3月前
|
人工智能 网络架构 开发者
第一个100%开源的MoE大模型,7B的参数,1B的推理成本
【10月更文挑战第1天】《OLMoE: Open Mixture-of-Experts Language Models》一文介绍了OLMoE,这是一个完全开源的Mixture-of-Experts(MoE)语言模型,具有70亿参数量,但每个输入令牌仅需10亿参数进行推理,有效平衡了性能与成本。OLMoE由Allen Institute for AI等机构的研究者共同开发,其开源特性促进了大规模语言模型领域的合作与创新,降低了资源浪费,同时具备良好的可扩展性和效率,为研究和应用开辟了新可能。然而,其复杂性也可能带来训练和调优上的挑战。
78 2
|
2月前
|
存储 弹性计算 自然语言处理
基础大模型 vs 应用大模型
基础大模型(如GPT-3、BERT等)通过大量通用数据训练,具备强大的泛化能力。应用大模型则在此基础上进行微调,针对特定任务优化。两者均将知识编码在参数中,而非直接存储原始数据,实现“自然留存”。阿里云提供多种大模型和服务,欢迎体验。
66 0
|
4月前
|
人工智能 负载均衡 网络架构
混合专家更有主见了,能感知多模态分情况行事,Meta提出模态感知型专家混合
【9月更文挑战第3天】在人工智能领域,多模态学习备受关注。Meta AI提出了一种名为模态感知型专家混合(MoMa)的新架构,通过模态特定的专家模块组合处理图像和文本,提升了多模态早期融合语言模型的预训练效率。MoMa在1万亿令牌训练下,实现了3.7倍的FLOPs节省,优于标准混合专家方案。尽管存在因果推理性能和负载平衡方面的局限性,MoMa仍为多模态预训练提供了高效新方法。论文详细内容见:https://arxiv.org/pdf/2407.21770
77 3
|
6月前
|
机器学习/深度学习 自动驾驶
大模型概念问题之谷歌的MUM模型是什么
大模型概念问题之谷歌的MUM模型是什么