在 LLM 架构中应用多专家模型

news2024/11/18 8:21:54

本文转载自:在 LLM 架构中应用多专家模型 2024年 3月 14日 By Kyle Kranen and Vinh Nguyen
https://developer.nvidia.cn/zh-cn/blog/applying-mixture-of-experts-in-llm-architectures/


文章目录

    • 一、概述
    • 二、LLM 架构领域的专家齐聚一堂
      • 1、模型容量
      • 2、MoE 在降低成本的同时训练更大的模型
      • 3、 MoE 可降低延迟
    • 三、MoE 架构的工作原理是什么?
    • 四、试验 Mixtral 模型
    • 五、实验结果
      • 1、负载均衡
      • 2、领域专家任务分配
      • 3、专家推荐的最佳令牌
      • 4、按令牌划分的首选专家
    • 六、总结


一、概述


img

多专家模型 (MoE) 大型语言模型 (LLM) 架构最近出现了,无论是在 GPT-4 等专有 LLM 中,还是在开源版本的社区模型中,如 Mistral Mixtral 8x7B。
Mixtral 模型的强劲相对性能引起了极大的兴趣,并引发了许多关于 MoE 及其在 LLM 架构中使用的问题。

那么,什么是 MoE,为什么它很重要?

多专家模型是神经网络的架构模式,它将层或运算 (例如线性层、MLP 或注意力投影) 的计算拆分为多个“专家”子网络。
这些子网络各自独立执行自己的计算,并组合其结果以创建 MoE 层的最终输出。
MoE 架构可以是密集的,这意味着每个专家都用于每个输入,也可以是稀疏的,这意味着每个输入都使用一个专家子集。

本文主要探讨MoE在LLM架构中的应用。

如需了解MoE在其他领域的应用,请参阅使用稀疏的专家混合模型扩展视觉、适用于多语言ASR流式传输的专家级混合转换器以及FEDformer:用于长期序列预测的频率增强型分解转换器。


二、LLM 架构领域的专家齐聚一堂

本节提供一些背景信息,并重点介绍在 LLM 架构中使用 MoE 的优势。


1、模型容量

模型容量可以定义为模型能够理解或表达的复杂程度。
通常情况下,(经过充分训练的) 具有更多参数的模型过去证明具有更大的容量。

如何将 MoE 分解为容量?
参数较多的模型通常具有更大的容量,而 MoE 模型可以通过将模型的各个层替换为 MoE 层 (其中专家子网络的大小与原始层相同),从而有效地增加相对于基础模型的容量。

研究人员已经对MoE模型的准确性进行了调查,该模型使用与全密集模型相似数量的标记进行训练(MoE大小:E+P参数与全密集大小相比:EP参数)。
尽管这仍然是一个活跃的研究领域,但全密集模型的表现普遍优于MoE模型。
有关更多详细信息,请参阅 适用于路由语言模型的统一扩展定律。

这就提出了一个问题,为什么不直接使用密集模型?
这里的答案在于稀疏 MoE,具体来说,稀疏 MoE 在每个使用的参数上都更高效。

请考虑 Mixtral 8x7B 是一个使用 8 位专家 MoE 的模型,其中每个令牌仅使用 2 位专家。
在这种情况下,在模型中单个令牌的任何给定前向传递中,批量中任何给定令牌使用的参数数量都要低得多 (共使用 460 亿个参数,其中使用 120 亿个参数)。
与使用所有 8 位专家或类似大小的全密集模型相比,这需要的计算量更少。
给定在训练中将令牌分批在一起,则使用大多数 (如果不是所有) 专家。
这意味着在此模式中,与相同大小的密集模型相比,稀疏 MoE 使用的计算量较少,且内存容量相同。

在一个 GPU 小时数备受追逐、时间和成本高昂的世界里,大规模训练全密集模型显得尤为昂贵。
据报道,Meta 训练的 Lama 2 模型集(全密集)耗费了 330 万 NVIDIA A100 预训练的 GPU 小时数。
具体来说,在 1024 个 GPU 上以全容量运行 330 万个 GPU 小时,不包括任何停机时间,大约需要 134 天。
这还不包括任何实验、超参数扫描或训练中断。


2、MoE 在降低成本的同时训练更大的模型

MoE 模型通过提高每个权重的触发器效率来降低成本,这意味着在具有固定时间或计算成本限制的机制下,可以处理更多令牌,并可以进一步训练模型。
鉴于具有更多参数的模型需要更多样本才能完全收,这基本上意味着我们可以在固定预算下训练比密集模型更好的 MoE 模型。


3、 MoE 可降低延迟

在大量提示和批量(其中计算是瓶颈)的情况下,MoE 架构可用于降低第一个令牌的服务延迟。
随着用例(例如 检索增强生成 (RAG) 和自主智能体可能需要多次调用模型,从而增加单次调用延迟。


三、MoE 架构的工作原理是什么?

MoE 模型有两个关键组件。
首先,构成混合模型的“专家”子网络,用于密集和稀疏 MoE.其次,稀疏模型使用路由算法来确定哪些专家会处理哪些标记。
在密集和稀疏 MoE 的某些公式中,MoE 可能包含一个加权机制,用于执行专家输出的加权平均值。
在本文中,我们将重点介绍稀疏案例。

在许多已发表的论文中,MoE 技术应用于 Transformer 模块内的多层感知器 (MLP).在这种情况下,Transformer 模块内的 MLP 通常被一组专家 MLP 子网络取代,这些子网络会结合其结果,使用平均值或求和生成 MLP MoE 输出。

研究还表明,MoE 的概念可以推广到 Transformer 架构的其他部分。
最近的论文 SwitchHead: 利用混合专家注意力加速 Transformer 建议 MoE 也可应用于投影层,这些层将输入转换为 Q、K 和 V 矩阵,以供注意力运算使用。
其他论文则建议将条件执行 MoE 概念应用于注意力头本身。

在特定输入的情况下,路由网络(或算法)用于确定哪些专家被激活。
路由算法可以是简单的(在张量平均值中统一选择或合并),也可以是复杂的,如在采用专家选择路由的多专家组合中所述。

在决定给定路由算法对问题的适用性的许多因素中,我们经常讨论两个核心因素:特定路由机制下的模型准确性和特定机制下的负载均衡。
选择正确的路由算法可以在准确性和触发器效率之间进行权衡。
完美的负载均衡路由算法可能会降低每个令牌的准确性,而最准确的路由算法可能会在专家之间分配不均的令牌。

许多提议的路由算法旨在最大化模型准确性,同时最小化任何给定专家提出的瓶颈。
虽然 Mixtral 8x7B 使用 Top-K 算法来路由令牌,但诸如 采用专家选择路由的多专家组合 引入概念,以确保专家不会被过度引导。
这可以防止瓶颈的形成。


四、试验 Mixtral 模型

在实践中,每位专家都会学习什么?他们专注于低级语言结构 (例如标点符号、动词、形容词等),还是精通高级概念和领域 (例如编码、数学、生物学和法律)?

为了进行实验,我们使用了Mixtral 8x7B 模型,该模型包含32个顺序Transformer块,每个块中的MLP层被替换为稀疏MoE块,每个MoE块包含8个专家,每个令牌只激活其中两个专家。
其他层,包括自注意力层和归一化层,由所有令牌共享。

值得注意的是,当读取 8x7B 的名称时,可以想象专家是 8 个独立的完整网络,每个网络都有 70 亿个参数,每个令牌都由这 8 个完整网络中的一个完全端到端处理 (图 1)。
这种设计将生成一个 8x7B=56B 的模型。


Diagram showing a possible interpretation of the Mixtral 8x7B model with eight separate full networks.

图 1.Mixtral 8x7B 模型的可能解释

虽然这无疑是合理的设计,但并不是 Mixtral 8x7B 中使用的设计。
图 2 描述了实际设计,每个令牌都处理了 70 亿个参数。
请注意,令牌及其副本 (由第二专家在每层处理) 总共仅处理 129 亿个参数,而不是 2x7B=14B.由于共享层的原因,整个网络仅处理 470 亿个参数,而不是 8x7B=56B 参数。


Mixtral 8x7B actual architecture, where the attention layers are shared, and MLP layers comprise eight experts each.

图 2.简化的 Mixtral 8x7B 模型架构


因此,每个通过网络的令牌都必须通过类似格点的结构,外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传可能的网络实例化。

如果我们将每个实例化都视为“全栈专家”(处理端到端令牌的专家),是否有可能了解它们提供的专业知识?遗憾的是,由于 28%=32%是一个非常大的数字 (+2+10%=46%),它比用于训练 LLM 的所有数据 (大多数 LLM 的数据为+3T 到 10T 令牌) 大几个数量级,因此同一实例化很少会处理任何两个令牌。
因此,我们将研究每个层专家专门研究的是什么,而不是每个完整的专家组合。


五、实验结果

我们使用大规模的多任务语言理解(MMLU)基准测试来评估模型的性能。
该基准测试包括涉及57个主题的多项选择题,涵盖了广泛的领域,如抽象代数、世界信仰、专业法、解剖学、天文学和商业道德等。
我们记录了第1层、第16层和第32层8位专家中每个专家的令牌专家作业。

在解析数据后,有几项观察值得注意。


1、负载均衡

得益于负载均衡,专家可以获得均衡的负载,但最忙碌的专家仍可获得比最忙碌的专家多 40 – 60%的令牌。


Token distribution over experts show equalized distribution yet still some imbalances.

图 3.所有 MMLU 主题的专家加载分布


2、领域专家任务分配

某些领域比其他领域更能激活某些专家。

在第 32 层中,其中一个示例是抽象代数,它比其他示例更多使用专家 3 和专家 8、


Token distribution over expert in layer 32 showing experts 4 and 8 receiving most tokens.

图 4.在第 32 层中,抽象代数的令牌分布情况

另一方面,专业法领域主要激活专家 4,而相对来说使专家 3 和专家 8 静音。


Token distribution over expert in layer 32 for professional law showing expert four receiving most tokens.

图 5.在专业定律的第 32 层中,令牌在专家上的分布

另一个引人入胜的例子是世界性的教会,专家 7 收到的令牌比专家 8 少 5 倍多。


Token distribution over expert in layer 32 for world religions showing expert eight receiving far more tokens than expert seven.

图 6.针对世界性教会,在第 32 层中,令牌在专家上的分布

这些实验结果表明,专家的负载分布倾向于在不同的主题范围内保持一致。
但是,当所有样本都完全属于某个主题时,可能会出现很大的分布不平衡。


3、专家推荐的最佳令牌

图 7 中的“cloud”(云) 一词显示了每位专家最频繁处理的令牌。


Word cloud showing most common tokens processed by experts.

图 7.专家处理的最常见令牌


4、按令牌划分的首选专家

每个令牌是否都有首选专家?每个令牌似乎都有一组首选专家,如下示例所示。

令牌“:”和所有“:”令牌的专家分配在第 1 层由专家 1 和 7 处理,在第 32 层由专家 3 和 8 处理 (图 8)。
图 9、10 和 11 显示了各种令牌的专家分配。


Bar graphs showing expert assignment for token “:”

图 8.令牌“:”的专家分配


Bar graphs showing expert assignment for token “.”

图 9.令牌“。”的专家分配


Bar graphs showing expert assignment for token “what”

图 10.专家分配令牌“what”


Bar graphs showing expert assignment for token “who”

图 11.令牌“Who”的专家分配


六、总结

MoE 模型为模型预训练吞吐量提供了明显的优势,支持在与密集模型相同的计算量上训练更具表现力的稀疏 MoE 模型。
这将在相同的计算预算下生成更具竞争力的模型。
MoE 模型可以针对整个网络或现有网络中的特定层。
通常,应用带有路由的稀疏 MoE 以确保仅使用部分专家。

我们的实验探索了令牌的分配方式以及专家之间的相对负载平衡。
这些实验表明,尽管采用了负载平衡算法,但仍然存在很大的分布不平衡,这可能会影响推理效率低下,因为一些专家提前完成工作,而另一些则过载。
这是一个值得关注的积极研究领域。

您可以尝试 Mixtral 8x7B 指令模型 以及其他 AI 基础模型,这些模型可以在 NVIDIA NGC 目录中找到。


2024-05-28(二)

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

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

相关文章

Nginx源码编译安装

Nginx NginxNginx的特点Nginx的使用场景Nginx 有哪些进程root 和 alias 指定路径的区别root(根目录)alias(别名目录、虚拟目录) 使用源码编译安装Nginx准备工作安装依赖包编译安装Nginx检查、启动、重启、停止 nginx服务配置 Ngin…

【JavaEE】留言板与图书管理系统

目录 留言板1. 准备工作2. 约定前后端交互接口lombok3. 服务器代码4. 调整前端页面代码 图书管理系统1. 准备工作2. 约定前后端交互接口3. 服务器代码4. 调整前端页面代码 留言板 需求: 界⾯如下图所⽰ 输⼊留⾔信息, 点击提交. 后端把数据存储起来.⻚⾯展⽰输⼊的表⽩墙的信…

用单链表实现集合

一、实验题目 (1)实验题目 用单链表实现集合 (2)问题描述 用有序单链表实现集合的判等、交、并和差等基本运算。 二、实验内容 (1)采用有序单链表存储集合; (2)实现交…

vue实现pdf下载——html2canvas

html2canvas 官方文档https://html2canvas.hertzen.com/getting-started html2canvas 的原理是通过遍历DOM树,将每一个HTML元素转化为Canvas对象,并叠加到一起形成一张完整的图片或者PDF文件。 1. 安装插件 npm install html2canvas jspdf --save 2.使用(页面已经…

PVE安装虚拟主机

本文记录PVE安装其他虚拟主机的步骤,以安装win-server为例。裸机安装PVE则不是本文主题。 准备文件 获取Windows系统镜像 win server镜像可以从官网获取普通Windows镜像可从MSDN获取此外,安装Windows系统还需要从PVE下载特殊驱动 获取Windows必要驱动 …

网络安全形势与WAF技术分享

我一个朋友的网站,5月份时候被攻击了,然后他找我帮忙看看,我看他的网站、网上查资料,不看不知道,一看吓一跳,最近几年这网络安全形势真是不容乐观,在网上查了一下资料,1、中国信息通…

【网络安全的神秘世界】web应用程序安全与风险

🌝博客主页:泥菩萨 💖专栏:Linux探索之旅 | 网络安全的神秘世界 | 专接本 第一章:web应用程序安全与风险 web攻击基础知识 1、什么是web应用攻击 web攻击的本质,就是通过http协议篡改应用程序&#xff0…

手撸 串口交互命令行 及 AT应用层协议解析框架

在嵌入式系统开发中,命令行接口(CLI)和AT命令解析是常见的需求。CLI提供了方便的调试接口,而AT命令则常用于模块间的通信控制。本文将介绍如何手动实现一个串口交互的命令行及AT应用层协议解析框架,适用于FreeRTOS系统…

机器学习多场景实战

机器学习已不再局限于理论探讨,而是广泛渗透到我们生活的方方面面,成为解决复杂问题、优化决策过程的强有力工具。从智能推荐系统个性化推送你可能喜爱的电影和商品,到金融风控领域精准识别欺诈交易;每一个应用场景都是机器学习技…

Spring Boot项目中,如何在yml配置文件中读取maven pom.xml文件中的properties标签下的属性值

一、前言 在最近的项目开发过程中&#xff0c;有一个需求&#xff0c;需要在Spring Boot项目的yml配置文件中读取到mave的 pom.xml文件中的properties标签下的属性值&#xff0c;这个要怎么实现呢&#xff1f; 二、技术实践 pom.xml文件中增加测试属性 <properties><…

【数据结构】筛选法建堆

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…

Golang | Leetcode Golang题解之第134题加油站

题目&#xff1a; 题解&#xff1a; func canCompleteCircuit(gas []int, cost []int) int {for i, n : 0, len(gas); i < n; {sumOfGas, sumOfCost, cnt : 0, 0, 0for cnt < n {j : (i cnt) % nsumOfGas gas[j]sumOfCost cost[j]if sumOfCost > sumOfGas {break}…

Android 14.0 Settings主页面去掉自定义您的设备等菜单相关功能

1.前言 在14.0的系统rom产品定制化开发中,在系统Settings主页面的主菜单中,在测试某些功能的时候,比如开启护眼模式和改变系统密度会在主菜单第一项的网络菜单头部增加 自定义您的设备和设置护眼模式时间安排 等等相关的设置模块 这对于菜单布局显示相当不美观,所以根据系…

TSR,FSR,DLSS超级分辨率的原理分析

先了解一些时域抗锯齿的方法&#xff1a; TAA&#xff1a; 抖动 TAA 的主要原理是跨帧计算多个子像素样本&#xff0c;然后将它们组合成一个最终像素。最简单的方案是在像素内生成随机样本&#xff0c;但有更好的方法来生成固定序列的样本。选择一个好的序列以避免聚集非常重…

MacOS 安装C语言版TensorFlow

文章目录 安装C语言版TensorFlow解压归档环境变量c_api.hC语言示例 安装C语言版TensorFlow 官方文档&#xff1a;https://tensorflow.google.cn/install/lang_c?hlzh-cnTensorFlow 提供了一个 C API&#xff0c;该 API 可用于为其他语言构建绑定。该 API 在 c_api.h 中定义&a…

我有点想用JDK17了

大家好呀&#xff0c;我是summo&#xff0c;JDK版本升级的非常快&#xff0c;现在已经到JDK20了。JDK版本虽多&#xff0c;但应用最广泛的还得是JDK8&#xff0c;正所谓“他发任他发&#xff0c;我用Java8”。 其实我也不太想升级JDK版本&#xff0c;感觉投入高&#xff0c;收…

【TB作品】 51单片机8x8点阵显示滚动汉字仿真

功能 题目5基于51单片机LED8x8点阵显示 流水灯 直接滚动显示HELLO 直接滚动显示老师好 代码 void main( void ) {/** 移位后&#xff0c;右边的是第一个595&#xff0c;接收0X02&#xff0c;显示出0X02* 移位后&#xff0c;左边的是第2个595&#xff0c;接收0Xfe&#xff0c…

C++结合OpenCV进行图像处理与分类

⭐️我叫忆_恒心&#xff0c;一名喜欢书写博客的在读研究生&#x1f468;‍&#x1f393;。 如果觉得本文能帮到您&#xff0c;麻烦点个赞&#x1f44d;呗&#xff01; 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧&#xff0c;喜欢的小伙伴给个三…

人工智能任务5-高级算法工程师需要学习哪些课程与掌握哪些能力

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能的任务5-高级算法工程师需要学习哪些课程&#xff0c;需要掌握哪些能力。高级算法工程师需要掌握的算法模型有&#xff1a;人脸检测模型MTCNN&#xff0c;人脸识别方法Siamese network、center loss、softm…

在VSCode中安装python

引言 Python 是一种广泛使用的高级编程语言&#xff0c;因其易学、易用、强大而受到欢迎。它由 Guido van Rossum 于 1991 年首次发布&#xff0c;并以简洁的语法和丰富的库生态系统而著称。 以下是 Python 的一些关键特点和优势&#xff1a; 关键特点 易于学习和使用&#x…