[论文笔记]Mixtral of Experts

引言

今天带来大名鼎鼎的Mixtral of Experts的论文笔记,即Mixtral-8x7B。

作者提出了Mixtral 8x7B,一种稀疏专家混合(Sparse Mixture of Experts,SMoE)语言模型。Mixtral与Mistral 7B具有相同的架构,不同之处在于每个层由8个前馈块(即专家)组成。对于每个令牌(Token),在每个层中,路由器网络选择两个专家处理当前状态并结合它们的输出。尽管每个令牌只看到两个专家,但在每个时间步长上选择的专家可以不同。因此,每个令牌可以访问47B参数,但在推理过程中只使用13B活跃参数。Mixtral在32k令牌的上下文大小下进行训练,并且在所有评估的基准测试中表现优于或与Llama 2 70B和GPT-3.5相匹配。还提供了一个经过微调以遵循指示的模型Mixtral 8x7B – Instruct,在人类基准测试中超过了GPT-3.5 Turbo。基础模型和指导模型都以Apache 2.0许可协议发布。

1. 总体介绍

在这篇工作中,作者介绍了Mixtral 8x7B,一个稀疏混合专家模型,其权重开放并在Apache 2.0下许可。Mixtral在大多数基准测试中优于Llama 2 70B和GPT-3.5。由于每个令牌仅使用其参数的子集,Mixtral可在低批量大小下实现更快的推理速度,并在大批量大小下实现更高的吞吐量。

Mixtral是一个稀疏专家混合网络。它是一个仅解码器模型,其中前馈块从8个不同组的参数集中进行选择。在每个层中,对于每个令牌,路由器网络选择其中的两个组(专家)来处理该令牌并将它们的输出按加法结合。这种技术可以增加模型的参数数量,同时控制成本和延迟,因为模型每个令牌只使用总参数集的一部分。

Mixtral是使用具有32k令牌的多语言数据进行预训练的。它在多个基准测试中要么匹配要么超越Llama 2 70B和GPT-3.5的性能。特别是在数学、代码生成以及需要多语言理解的任务中,Mixtral展示出优越的能力,明显优于Llama 2 70B在这些领域。实验证明,Mixtral能够成功地从其32k令牌的上下文窗口中检索信息,无论序列长度及信息在序列中的位置如何

作者还介绍了Mixtral 8x7B – Instruct,这是一个经过监督微调和直接偏好优化以遵循指示的聊天模型。其性能明显优于GPT-3.5 Turbo等在人类评估基准上的聊天模型。

image-20240603232912655

图1:专家混合层。每个输入向量通过路由器被分配给8个专家中的2个。该层的输出是两个被选中的专家输出的加权和。在Mixtral中,一个专家是一个标准的前馈块,就像原始Transformer架构中的前馈网络块。

2. 架构细节

Mixtral基于一个transformer架构,并使用了和Mistral 7b中描述的相同的修改,但与之不同的是,Mixtral支持完全密集的32k token的上下文长度,并且将前馈块替换为专家混合层。模型架构参数总结如下表1所示。

image-20240604135354389

2.1 稀疏混合专家

图1简要介绍了专家混合层。对于给定的输入 x x x,MoE模块的输出由专家网络输出的加权和确定,其中权重由门控网络的输出给出。即给定 n n n个专家网络 { E 0 , E i , . . . , E n − 1 } \{E_0, E_i, ..., E_{n−1}\} {E0,Ei,...,En1},专家层的输出由以下公式给出:
∑ i = 0 n − 1 G ( x ) i ⋅ E i ( x ) \sum_{i=0}^{n-1} G(x)_i \cdot E_i(x) i=0n1G(x)iEi(x)
这里, G ( x ) i G(x)_i G(x)i表示第 i i i个专家的门控网络的 n n n维输出,而 E i ( x ) E_i(x) Ei(x)表示第 i i i个专家网络的输出。如果门控向量是稀疏的,我们可以避免计算门控为零的专家的输出。有多种不同的方法可以实现 G ( x ) G(x) G(x)​ ,但一个简单而有效的方法是对线性层的Top-K个logits进行softmax运算。使用
G ( x ) : = Softmax ( TopK ( x ⋅ W g ) ) G(x) := \text{Softmax}(\text{TopK}(x\cdot W_g)) G(x):=Softmax(TopK(xWg))
其中, ( TopK ( ℓ ) ) i : = ℓ i (\text{TopK}(ℓ))_i := ℓ_i (TopK())i:=i,如果 ℓ i ℓ_i i是logits ℓ ∈ R n ℓ ∈\R^n Rn的前K个元素之一,否则 ( TopK ( ℓ ) ) i : = − ∞ (\text{TopK}(ℓ))_i :=-\infty (TopK())i:= K K K的值,即每个标记使用的专家数量,是一个超参数,用于调节处理每个标记所需的计算量。如果保持 K K K不变而增加n,可以增加模型的参数数量,同时保持其计算成本基本恒定。

这引发了模型的总参数数量(通常称为稀疏参数数量)与用于处理单个标记的参数数量(称为活跃参数数量)之间的区别,其中稀疏参数数量随 n n n增加,而活跃参数数量随K增加直至 n n n

MoE层可以在单个GPU上高效运行,并使用高性能的专门内核。例如,Megablocks将MoE层的前馈网络操作转换为大型稀疏矩阵乘法,显著提高执行速度,并自然处理不同的专家分配不同数量的标记的情况。此外,MoE层可以通过标准的模型并行技术将其分布到多个GPU,并通过一种称为专家并行的特定分区策略进行。在MoE层的执行过程中,要由特定专家处理的标记被路由到相应的GPU进行处理,并将专家的输出返回到原始标记位置。请注意,EP在负载平衡方面存在挑战,必须均匀分布工作负载到各个GPU,以防止单个GPU过载或遇到计算瓶颈。

在Transformer模型中,MoE层独立地应用于每个标记,并替换transformer块的前馈(FFN)子块。对于Mixtral,使用与专家函数 E i ( x ) E_i(x) Ei(x)相同的SwiGLU架构,并设置 K = 2 K = 2 K=2。这意味着每个标记被路由到两个具有不同权重集的SwiGLU子块中。综上所述,对于输入标记 x x x,输出 y y y的计算如下:
y = ∑ i = 0 n − 1 Softmax ( Top2 ( x ⋅ W g ) ) i ⋅ SwiGLU i ( x ) y = \sum_{i=0}^ {n-1} \text{Softmax}(\text{Top2}(x \cdot W_g))_i \cdot \text{SwiGLU}_i(x) y=i=0n1Softmax(Top2(xWg))iSwiGLUi(x)
这个公式与GShard架构相似,但有两个例外:所有的FFN子块替换为MoE层,而GShard替换其他块;此外,GShard对每个标记分配的第二个专家使用了更复杂的门控策略。

3. 结果

将Mistral 7B与Llama进行比较,并使用作者自己的评估流程重新运行所有基准测试,以进行公平比较。对各种任务的性能进行了测量,分类如下:

  • 常识推理(0-shot):Hellaswag,Winogrande,PIQA,SIQA,OpenbookQA,ARC-Easy,ARC-Challenge ,CommonsenseQA

  • 世界知识(5-shot):Natur alQuestions,TriviaQA

  • 阅读理解(0-shot):BoolQ,QuAC

  • 数学:GSM8K(8-shot,maj@8)和MATH(4-shot,maj@4)

  • 代码:Humaneval (0-shot)和MBPP (3-shot)

  • 热门聚合结果:MMLU(5-shot),BBH(3-shot),和AGI Eval(3-5-shot,仅限英文多项选择题)

image-20240604142101438

在表2中报告了Mixtral、Mistral 7B、Llama 2 7B/13B/70B和Llama 1 34B2的详细结果。图2比较了Mixtral在不同类别中与Llama模型的性能。在大多数指标上,Mixtral超过了Llama 2 70B。特别是,在代码和数学基准测试中,Mixtral展现出了卓越的性能。

image-20240604142200638

大小和效率 将性能与Llama 2系列进行比较,旨在了解Mixtral模型在成本性能范围内的效率(见图3)。作为一种稀疏的Mixture-of-Experts模型,Mixtral每个标记只使用13B个活跃参数。以5倍较低的活跃参数,Mixtral能够在大多数类别中胜过Llama 2 70B。

注意,重点关注活跃参数数量,它与推理计算成本成正比,但不考虑内存成本和硬件利用率。为了提供Mixtral的内存成本与其稀疏参数数量47B成比例,这仍然小于Llama 2 70B。至于设备利用率,SMoEs层由于路由机制和在每个设备上运行多个专家时内存负载增加而引入了额外开销。它们更适合批处理工作负载,其中可以达到良好的算术强度。

image-20240604142319696

与Llama 2 70B和GPT-3.5的比较 在表3中,进行了Mixtral 8x7B与Llama 2 70B和GPT-3.5的性能比较。Mixtral的性能与其他两个模型相似或更好。在MMLU上,Mixtral获得了更好的性能,尽管其容量显着较小。

3.1 多语言基准测试

与Mistral 7B相比,作者在预训练期间显著提高了多语言数据的比例。额外的容量使得Mixtral在多语言基准测试中表现出色,同时在英语方面保持高准确性。特别是,在法语、德语、西班牙语和意大利语方面,Mixtral在表4中明显优于Llama 2 70B。

image-20240604142412114

3.2 长距离性能

为了评估Mixtral处理长篇上下文的能力,引入的密钥(passkey)检索任务上对其进行评估,这是一个设计用来衡量模型在随机插入的长提示中检索密钥的能力的合成任务。图4(左)的结果显示,Mixtral无论上下文长度或密钥在序列中的位置如何,都能实现100%的检索准确率。图4(右)显示,在proof-pile数据集的一个子集上,随着上下文大小的增加,Mixtral的困惑度呈单调下降趋势。

image-20240604142458098

3.3 偏见基准测试

为了确定可能需要通过微调/偏好建模进行修正的潜在缺陷,对基准模型在Bias Benchmark for QA (BBQ) 和Bias in Open-Ended Language Generation Dataset (BOLD) 上进行了性能测量。BBQ是一个手写的问题集数据集,旨在检测针对九个不同社会相关类别的社会偏见:年龄、残疾状态、性别认同、国籍、外貌、种族/民族、宗教、社会经济地位、性取向。BOLD是一个大规模数据集,包含23679个用于偏见基准测试的英文文本生成提示,涵盖五个领域。使用评估框架对Llama 2和Mixtral在BBQ和BOLD上进行基准测试,表5中显示结果。

image-20240604142706229

与Llama 2相比,Mixtral在BBQ基准测试上呈现出较少的偏见。对于BOLD中的每个组,更高的平均情感分数意味着更积极的情绪,较低的标准差表示组内偏见较少。总体而言,Mixtral表现出比Llama 2更积极的情感,在每个组内的方差相似。

4. 指令微调

image-20240604142904156

使用指令数据集进行监督微调(SFT),然后使用配对反馈数据集进行直接偏好优化(DPO)来训练Mixtral - Instruct。Mixtral - Instruct在MT-Bench上达到8.30的得分(见表2),使其成为截至2023年12月最好的开放权重模型。由LMSys进行的独立人工评估结果如图6所示,显示Mixtral - Instruct优于GPT-3.5-Turbo、Gemini Pro、Claude-2.1和Llama 2 70B chat。

5. 路由分析

在本节中,对路由器进行了一项关于专家选择的小型分析。具体而言,对训练过程中是否有一些专家专门针对某些特定领域(如数学、生物学、哲学等)进行了调查。

image-20240604143022667

为了调查这一点,对The Pile验证数据集的不同子集上选择的专家进行了分布测量。结果如图7所示,分别对应模型的第0层、第15层和第31层(分别是模型的第一层和最后一层)。在基于主题的专家分配中没有观察到明显的模式。例如,在所有层级上,ArXiv论文(使用Latex编写)、生物学(PubMed摘要)和哲学(PhilPapers)文档的专家分配分布非常相似。

只有在DM Mathematics领域,专家分配存在略微不同的分布。这种差异可能是数据集的合成性质和自然语言范围有限的覆盖的结果,在第一层和最后一层尤为明显,因为这些层级的隐藏状态与输入和输出嵌入的相关性非常高。

image-20240604143135489

这表明路由器确实表现出一些结构化的句法行为。图8展示了不同领域(Python代码、数学和英语)的文本示例,其中每个标记都用与其选择的专家相对应的背景颜色进行了突出显示。图示显示,例如,在Python中的self和英语中的Question等单词通常会通过相同的专家进行路由,即使它们涉及多个标记。同样,在代码中,缩进标记始终分配给同一专家,特别是在第一层和最后一层,其中隐藏状态与模型的输入和输出更相关。

image-20240604143242022

连续的标记通常被分配给同样的专家。实际上,在The Pile数据集中,观察到一定程度的位置局部性。表5显示了每个领域和层级中连续标记分配给相同专家的比例。对于较高层级,连续分配重复的比例显著高于随机分配。这对于如何优化模型的快速训练和推理具有影响。例如,在进行专家并行时,具有高局部性的情况更有可能导致某些专家的过度订阅。相反,这种局部性可以用于缓存。

6. 结论

在本论文中,作者介绍了Mixtral 8x7B,这是第一个在开源模型中达到最新技术水平的专家混合网络。由于每个时间步只使用两个专家,因此Mixtral每个标记只使用13B个活跃参数,同时表现优于之前每个标记使用70B参数的最佳模型Llama 2 70B。

总结

⭐ 作者提出了Mixtral-8x7B,是一种稀疏的混合专家模型,通过门控机制来选择专家(MoE层),每个时间步只激活少量的专家,可以加快推理计算,但实际上要存储所有的参数所需的资源也是不少的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/23007.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringCache 缓存 - @Cacheable、@CacheEvict、@CachePut、@Caching、CacheConfig 以及优劣分析

目录 SpringCache 缓存 环境配置 1)依赖如下 2)配置文件 3)设置缓存的 value 序列化为 JSON 格式 4)EnableCaching 实战开发 Cacheable CacheEvict CachePut Caching CacheConfig SpringCache 的优势和劣势 读操作…

Flask 实现增改及分页查询的完整 Demo

Flask 实现增改及分页查询的完整 Demo 简介 本文将通过一个 Flask Demo 来展示如何使用 Flask 框架实现 RESTful API,包括增加、修改用户信息以及分页查询功能。我们将使用 Flask 的扩展 SQLAlchemy 来处理数据库操作。 环境准备 首先,确保你已安装 …

【Android面试题】请你分别采用递归和非递归对二叉树进行遍历?

请你分别采用递归和非递归对二叉树进行遍历? 这道题想考察什么? 1、二叉树的基本原理和遍历的方法? 考察的知识点 二叉树遍历的基本概念、二叉树的基本原理 考生如何回答 二叉树的基本概念 当然可以! 二叉树是一种常见的数据结构,它由一组称为节点的元素构成。每个…

地平线x3派开启core文件存储奔溃日志

开发环境 ubuntu22 ros humble c11 程序奔溃后core文件存储设置 1. 确保系统允许生成core文件 首先,检查和设置系统的core文件生成限制: 检查当前core文件大小限制 使用以下命令检查当前core文件大小限制: ulimit -c如果输出为 0&am…

reduce过滤递归符合条件的数据

图片展示 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </head><…

Python 实现乘数加密法

乘数加密是简单代替密码的一种。乘数加密法脱胎于凯撒加密法,加密和解密符号设计把他们转换成数字,加上或者减去密钥,然后把新的数字转换回符号,当我们把加减密钥变成乘以密钥,就是乘法加密法。有关凯撒加密法可以看之前的文章《Python实现凯撒加解密》。 加密过程 乘数加…

力扣hot100:25. K 个一组翻转链表

LeetCode&#xff1a;25. K 个一组翻转链表 这个题很像24. 两两交换链表中的节点 和 206. 反转链表 的合并体。 在力扣hot100&#xff1a;24. 两两交换链表中的节点中我们使用递归来实现这个问题是很方便的&#xff0c;使用迭代在k个结点一组时就不太好使了&#xff0c;我们可…

【攻击绕过】IP速率限制绕过

【攻击绕过】IP速率限制绕过 1.探测对应功能的API接口2.在代码或参数中插入空白字符3.通过标头操纵IP来源4.修改其他标头5.利用代理网络6.利用 API 网关行为 1.探测对应功能的API接口 应尝试对目标功能的API接口执行暴力攻击&#xff0c;例如/api/v3/sign-up&#xff0c;包括/…

鸿蒙轻内核M核源码分析系列六 任务及任务调度(3)任务调度模块

调度&#xff0c;Schedule也称为Dispatch&#xff0c;是操作系统的一个重要模块&#xff0c;它负责选择系统要处理的下一个任务。调度模块需要协调处于就绪状态的任务对资源的竞争&#xff0c;按优先级策略从就绪队列中获取高优先级的任务&#xff0c;给予资源使用权。本文我们…

nc翻译公式注意事项

nc翻译公式注意事项 翻译3个及以上条件&#xff08;里面加引号的是表名和表中字段&#xff0c;没加引号的是VO中的字段&#xff0c;没加引号的不能是getcolvalue后的字段&#xff09; "pzh->getColValueMore(\"voucherref_view\",\"pk_voucher\"…

关于map并发读写问题的解决方案考虑小计

叠甲&#xff1a;未详细看底层实现&#xff0c;只是大概看了一下涉及的api的源码&#xff0c;理解错的地方勿喷 问题背景 公司业务中用到了一个map&#xff0c;作用是存储需要屏蔽的数据&#xff0c;请求打过来后会去其中匹配 若命中则直接退出 该map的使用有以下几个特点&am…

ffmpeg视频编码原理和实战-(4)H264原始码流分析

H.264是一种广泛使用的视频编码标准&#xff0c;它采用一种分层结构&#xff0c;其中最重要的一个层是NAL&#xff08;网络抽象层&#xff09;。在H.264编码中&#xff0c;原始码流&#xff08;bitstream&#xff09;是由多个NALU&#xff08;NAL Units&#xff09;组成的。了解…

欧洲历史的五个阶段

欧洲的历史基本上都是分裂的&#xff0c;大致可以分为五个时期&#xff0c;分别为古希腊时代、罗马帝国时代、中世纪时代&#xff0c;文艺复兴时代、工业革命时代。 一&#xff0c;古希腊时代 古希腊是西方文明的源头&#xff0c;也是最重要和最直接的文明起源&#xff0c;首…

Python编程学习第一篇——Python零基础快速入门(五)—字典

上期我们学习了List结构&#xff0c;今天大家一起来学习字典。Python中的字典是一种无序的数据类型&#xff0c;用于存储键值对(key-value)。它是一种可变的数据结构&#xff0c;可以在其中添加、删除和修改元素。字典中的键必须是唯一的&#xff0c;而值可以重复。 下面我们以…

前端想学习后端需要下载那些东西

前端想学习后端需要下载那些东西 需要下载的软件如下&#xff1a; 1、JDK的下载2、Tomcat的下载 3、MySQL的下载4、Navicat的下载 5、Maven的下载6、IDEA的下载下载教程&#xff1a;点击→此处 进入

【学习笔记】java SPI机制

目录 实现&#xff1a;示例&#xff1a;注意事项&#xff1a; Java SPI (Service Provider Interface) 是 Java 提供的一套用来发现和加载第三方服务的机制。SPI 的主要目的是为了解耦框架与插件&#xff08;服务提供商&#xff09;之间的依赖关系&#xff0c;使得框架能够灵活…

nexus搭建npm前端项目的私服

一、为什么要搭建私库 节省外网带宽加速maven构建部署第三方构件&#xff08;特别是无法从公共仓库下载的构件&#xff09;提高稳定性&#xff08;内网部署&#xff0c;更少地依赖外网&#xff09;降低中央仓库的负荷 构件&#xff0c;好比我们的藏书&#xff0c;去书店或商城…

深度学习——TensorBoard的使用

官方文档torch.utils.tensorboard — PyTorch 2.3 documentation TensorBoard简介 TensorBoard是一个可视化工具&#xff0c;它可以用来展示网络图、张量的指标变化、张量的分布情况等。特别是在训练网络的时候&#xff0c;我们可以设置不同的参数&#xff08;比如&#xff1…

【kubernetes】探索k8s集群的pod控制器详解(Deployment、StatefulSet、DaemonSet、Job、CronJob)

目录 一、Pod控制器及其功用 二、pod控制器有多种类型 2.1ReplicaSet 2.1.1ReplicaSet主要三个组件组成 2.2Deployment 2.3DaemonSet 2.4StatefulSet 2.5Job 2.6Cronjob 三、Pod与控制器之间的关系 3.1Deployment 3.2SatefulSet 3.2.1StatefulSet三个组件 3.2.2为…