聊聊最近很火的混合专家模型(MoE)

news2024/10/7 18:25:58

前段时间,在2024年NVIDIA GTC大会上,英伟达不小心透露了GPT-4采用了MoE架构,模型有1.8万亿参数,由8个220B模型组成,与此前的GPT-4泄露的信息一致。

近半年多以来,各类MoE大模型更是层出不穷。在海外,除了GPT-4,谷歌推出Gemini、Mistral AI推出Mistral、连马斯克xAI的最新大模型Grok-1用的也是MoE架构。

在国内,MiniMax在今年年初就全量发布大语言模型abab6,该模型为国内首个MoE模型,直接对标GPT-4。昆仑万维也于今年4月17日正式推出了新版MoE大语言模型「天工3.0」,拥有4000亿参数,超越了3140亿参数的Grok-1,成为全球最大的开源MoE大模型。

在各大模型厂商还在不断卷模型参数规模的今天,无论是互联网巨头,还是独角兽公司,都不约而同地选择了MOE作为大模型后续迭代的方向。

结合近期国内掀起的大模型降价浪潮,让我们不禁猜测模型成本下降的背后是否和采用新的MOE架构有关,毕竟原来一个千亿级别的通用大模型现在可能只需要几个百亿级别的MOE模型就能达到相同的效果,而训练一个千亿大模型和百亿大模型需要的成本却差了一个数量级。

下面,让我们一起来揭开MoE的神秘面纱吧。

1、什么是MoE?

MoE,全称Mixture of Experts,混合专家模型。MoE是大模型架构的一种,其核心工作设计思路是“术业有专攻”,即将任务分门别类,然后分给多个“专家”进行解决。与MoE相对应的概念是稠密(Dense)模型,可以理解为它是一个“通才”模型。一个通才能够处理多个不同的任务,但一群专家能够更高效、更专业地解决多个问题。

上图中,左侧图为传统大模型架构,右图为MoE大模型架构。两图对比可以看到,与传统大模型架构相比,MoE架构在数据流转过程中集成了一个专家网络层(红框部分)。下图为红框内容的放大展示:

专家网络层的核心由门控网络(Gating Network)和一组专家模型(Experts)构成,其工作流程大致如下:

  1. 数据首先会被分割多个区块(Token),每组数据进入专家网络层时,首先会进入门控网络
  2. 门控网络将每组数据分配给一个或多个专家,每个专家模型可以专注于处理该部分数据,“让专业的人做专业的事”
  3. 最终,所有专家的输出结果汇总,系统进行加权融合,得到最终输出。

2、MOE的设计

MoE架构的核心思想是将一个复杂的问题分解成多个更小、更易于管理的子问题,并由不同的专家网络分别处理。这些专家网络专注于解决特定类型的问题,通过组合各自的输出来提供最终的解决方案,提高模型的整体性能和效率。

MOE的设计一般包括以下步骤:

(1)专家模型的选择与训练

  • 每个专家模型通常是针对特定任务或特定数据进行训练的。这些专家模型可以是不同的神经网络,分别在不同的数据集上进行优化,以便在特定领域内具有更好的性能。
  • 在训练过程中,专家模型的选择可以基于特定的任务需求或数据特征。例如,可以有专门处理代码数据的专家模型,或者有处理科学论文的专家模型。

(2)门控机制(Gating Mechanism)

  • 混合专家模型的核心在于门控机制,它负责在推理过程中动态选择和组合不同的专家模型。门控机制根据输入数据的特征,决定哪些专家模型对当前任务最有效。
  • 常见的门控机制包括软门控(Soft Gating)和硬门控(Hard Gating)。软门控会为每个专家分配一个概率权重,所有专家的输出按照这些权重进行加权平均;硬门控则直接选择一个或几个专家进行输出。

(3)专家模型的组合与输出

  • 在推理阶段,混合专家模型会根据门控机制的选择,将多个专家模型的输出进行组合,以生成最终的结果。
  • 这种组合可以是简单的加权求和,也可以是更复杂的融合策略,具体取决于任务的要求和门控机制的设计。

(4)优化与训练策略

  • 为了有效训练混合专家模型,通常需要设计特定的优化策略。例如,可以使用分阶段训练的方法,先分别训练每个专家模型,然后在整体框架中进行联合优化。
  • 训练过程中还需要考虑专家模型之间的协同和竞争关系,确保每个专家模型能够在其擅长的领域内充分发挥作用,同时避免不必要的冗余和冲突。

总的来说,混合专家模型通过引入多个专门优化的专家模型,并使用门控机制动态选择和组合这些专家模型的输出,能够在处理复杂任务时表现出更高的灵活性和性能。

3、MOE vs. Dense

MoE(专家混合模型)和Dense(稠密)模型在多个方面存在差异,以下是一些关键点:

指标

MOE

Dense

模型结构

模型由多个专家组成,每次计算时只有一部分专家被激活,从而减少了计算量。

所有参数和激活单元都参与每一次前向和后向传播计算。

计算效率

由于只激活部分专家,计算量和内存需求较少,因此在处理并发查询时具有更高的吞吐量。

计算量和内存需求随参数规模线性增长。

性能

可以在保持高效计算的同时,达到与大型Dense模型相似的性能。例如,50B的MoE模型在性能上接近34B的Dense模型。

性能稳定,但需要大量计算资源。

时延

由于只需加载部分激活的专家,时延较低,尤其是在并发性较低的情况下。

由于需要加载所有参数,时延较高。

应用场景

适用于需要高效处理并发查询的任务,如大规模在线服务。

适用于需要稳定性能且计算资源充足的任务。

综上,MoE相对于Dense模型有以下几个优势:

  1. 吞吐量更高:MoE模型的激活单元少于密集层,因此在处理许多并发查询时,MoE模型具有更高的吞吐量。
  2. 时延更低:当并发性较低时,大部分时间用于将两个激活的专家模型加载到内存中,这比密集层需要的内存访问时间更少,从而降低了时延。
  3. 更高效的计算:对于单个查询,MoE需要从内存中读取的参数更少,因此在计算效率上优于密集层。
  4. 性能优越:MoE模型可以在保持小型模型的计算效率的同时,提供接近大型密集模型的强大性能。例如,Mistral MoE模型展示了在降低成本的同时,取得与更大模型相当的性能。
  5. 灵活性:可以将一个已经训练好的大型密集模型转换为MoE模型,使其具有小型模型的高效计算和大型密集模型的强大性能。

同时,MoE同样存在以下挑战:

  1. 由于MoE需要把所有专家模型都加载在内存中,这一架构对于显存的压力将是巨大的,通常涉及复杂的算法和高昂的通信成本,并且在资源受限设备上部署受到很大限制。
  2. 此外,随着模型规模的扩大,MoE同样面临着训练不稳定性和过拟合的问题、以及如何确保模型的泛化性和鲁棒性问题、如何平衡模型性能和资源消耗等种种问题,等待着大模型开发者们不断优化提升。

4、MoE化

将一个Dense模型转换为MoE模型的过程被称为MoE化(MoEfication)。这个过程的目标是保留Dense模型的强大性能,同时通过MoE模型的高效结构实现更高的计算效率。以下是MOE化的关键步骤:

  1. 分解Dense模型:将Dense模型的参数和计算分解为多个专家模块。每个专家模块只处理输入数据的一部分。
  2. 门控机制:引入门控(gate)机制,以决定每个输入数据应该由哪些专家模块处理。门控机制可以基于输入数据的特征来动态选择专家。
  3. 训练MoE模型:使用与Dense模型相同的数据和训练方法,训练新的MoE模型。确保训练过程中门控机制能够有效地选择合适的专家模块。
  4. 优化和调试:通过实验和调试,优化MoE模型的性能和效率。可以调整门控机制、专家数量等参数,以达到最佳效果。

MoE模型是一种基于“分而治之”策略的神经网络架构,它将复杂的问题分解为多个子问题,每个子问题由一个独立的模型进行处理。这些专家模型可以是任意类型的神经网络,如全连接网络、卷积神经网络或循环神经网络等。MoE模型的核心在于如何有效地结合这些专家模型的输出,以得到最终的预测结果。

【推广时间】

有做模型推理、微调、AI绘画出图,需要GPU资源的朋友们,可以试试UCloud云计算旗下的Compshare这家GPU算力云平台,4090性价比高,单卡按时2.6元,免费200G磁盘。单卡一个月价格在1250元,还是很香的。现在通过链接注册联系客服可以获得20元代金券,同时现在还有个内容激励活动,发布分享一些AI绘画。模型微调、推理,大模型相关的文章带上他们平台,还可以拿500元代金券,可以白嫖好久的算力了,大家可以试试。

高性价比4090算力租用,注册就送20元代金券,更有内容激励活动:GPU算力平台 | 面向AI场景的高性价比GPU租用平台

GPU云服务器租用,P40、4090、V100S多种显卡可选:GPU云服务器租用_GPU云主机限时特惠-UCloud中立云计算服务商

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

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

相关文章

【Tlias智能学习辅助系统】01 准备工作

Tlias智能学习辅助系统 01 创建员工、部门表创建springboot工程,引入对应的起步依赖(web、mybatis、mysql驱动、lombok)准备 Mapper、Service、Controller 等基础结构MapperServiceControllerpojo封装类application.properties 接口开发规范 创建员工、部门表 -- 创…

MyBatis的坑(动态SQL会把0和空串比较相等为true)

文章目录 前言一、场景如下二、原因分析1. 源码分析2. 写代码验证 三、解决办法代码及执行结果如下 总结 前言 在开发过程中遇到MyBatis的动态SQL的if条件不生效的情况,但经过debuger发现并不是参数问题,已经拿到了参数并传给了MyBatis,且从表…

第十九节:带你梳理Vue2: 父组件向子组件传参(props传参)

1. 组件嵌套 1.1 组件的嵌套使用 之前有说过,Vue组件跟Vue实例是一样的,因此在Vue中一个组件中也可以定义并使用自己的局部组件,这就是组件的嵌套使用 例如:示例代码如下: <div id"app"><!-- 3. 使用组件 --><my-component></my-component&…

inStrain:灵敏地检测共享微生物菌株

GitHub - MrOlm/inStrain: Bioinformatics program inStrain 安装 conda create -n instrain conda activate instrain pip install instrain inStrain -h 需要准备一个 scaffold-to-bin file &#xff08;.text 文件&#xff0c;包含由制表符分隔的两列&#xff0c;其中第一…

Kafka原生API使用Java代码-生产者-发送消息

文章目录 1、生产者发送消息1.1、使用EFAK创建主题my_topic31.2、根据kafka官网文档写代码1.3、pom.xml1.4、KafkaProducer1.java1.5、使用EFAK查看主题1.6、再次运行KafkaProducer1.java1.7、再次使用EFAK查看主题 1、生产者发送消息 1.1、使用EFAK创建主题my_topic3 1.2、根…

研学活动报名二维码怎么制作?

在组织研学活动时&#xff0c;老师们经常面临报名流程繁琐、信息收集不全面、统计工作耗时等问题&#xff1f;如何高效地管理学生的报名信息&#xff0c;确保活动顺利进行呢&#xff1f; 现在我们有了更多的选择。老师们可以快速制作出研学活动的研学活动报名二维码怎么制作&am…

DNF手游攻略:开荒必备攻略!

DNF手游马上就要开服了&#xff0c;今天给大家带来最完整的DNF手游入门教程。这篇攻略主要讲述了 DNF手游开服第一天要注意的事项&#xff0c;这是一个新手必备的技能书&#xff0c;可以让你在开服的时候&#xff0c;少走一些弯路&#xff0c;让你更快完成任务&#xff01;废话…

[MySQL最详细的知识点]

MySQL 关系型数据库以一行作为一个记录,列数据库以一列为一个记录一行是一个记录,一列是一个字段一行是一个实体,一列是一个属性 MySQL引擎: MySQL引擎&#xff1a;可以理解为&#xff0c;MySQL的“文件系统”&#xff0c;只不过功能更加强大。​MySQL引擎功能&#xff1a;除…

自动化测试-ddt数据驱动yaml文件实战(详细)

前言 ddt 驱动 yaml/yml 文件来实现数据驱动测试 ddt.file_data&#xff1a;装饰测试方法&#xff0c;参数是文件名。文件可以是 json 或者 yaml 类型。 注意&#xff1a;如果文件是以 “.yml”或者".yaml" 结尾&#xff0c;ddt 会作为 yaml 类型处理&#xff0c;…

【教学类-59-01】专注力视觉训练01(圆点百数图)

背景需求&#xff1a; 视觉训练的神奇效果&#xff0c;让你的宝贝成为焦点 - 小红书魔法视觉追踪-视觉训练—— &#x1f50d;视觉训练&#x1f50d; &#x1f539;想要提高宝宝的专注力&#xff0c;视觉训练是个绝佳方法&#xff01; &#x1f539;让宝宝仔细观察数字的路线&a…

JavaScript-内存分配,关键字const

内存空间 内存分为栈和堆 栈&#xff1a;由操作系统自动释放存放的变量值和函数值等。简单数据类型存放在栈中 栈会由低到高先入后出 堆&#xff1a;存储引用类型 &#xff08;数组&#xff0c;对象&#xff09; 对象会先将数据存放在堆里面&#xff0c;堆的地址放在栈里面 关键…

喜讯 | 盘古信息冠捷科技、锐明科技IMS项目荣获创新案例、优秀案例

5月28日&#xff0c;中国数据要素及行业应用创新大会盛大启幕&#xff0c;现场汇聚了中国工程院院士、数据要素研究机构及数据要素知名企业、数字要素行业生态代表等300位业内相关人士。广东盘古信息科技股份有限公司副总经理朱熀锋代表盘古信息出席大会&#xff0c;并带来了IM…

Sytem.getenv的作用和意义介绍

Sytem.getenv的作用和意义介绍&#xff01;在实际的项目开发中&#xff0c;我们经常需要获取一些系统自身的环境变量&#xff0c;为此&#xff0c;java官方提供的这个系统环境变量&#xff0c;自带了一个方法&#xff0c;就可以直接拿到系统的环境变量值了。 下面是一个简单的…

誉天Linux云计算架构师就业班要学习哪些内容?

课程设计思路&#xff1a; 根据十多年来毕业学员的就业和反馈&#xff0c;对数百名学员的就业回访;Linux运维&#xff0c;云计算&#xff0c;高并发&#xff0c;分布式&#xff0c;容器&#xff0c;云原生&#xff0c;自动化等是目前市场上就业情况最好&#xff0c;需求量最大&…

vue项目集成萤石云在Web系统中实现实时摄像头监控及控制功能

需求 需求&#xff1a; 开发人员在产线上放置一个萤石摄像头&#xff0c;前端在可视化大屏上实时监控&#xff0c;且控制左右上下功能。 效果 萤石云接入web前期准备工作 阅读萤石云API文档&#xff1a;萤石云开放平台开发者文档 阅读萤石云控制API文档&#xff1a;萤石云摄…

CATIA二次开发VBA入门(4)——进程外开发环境搭建,vb.net在Visual Studio中开发,创建圆柱曲面的宏录制到二次开发案例

目录 引出vb.net和vb6.0 进程外开发环境搭建vb.net开发环境搭建《CATIA二次开发技术基础》模板 添加宏库引用 vs开发环境初步vs中的立即窗口对象浏览器 建立模板案例&#xff1a;创建一堆圆柱曲面第一步&#xff1a;录制宏第二步&#xff1a;代码精简第三步&#xff1a;for循环…

Aloha机械臂的mujoco仿真问题记录

今天在测试ACT代码时&#xff0c;遇到了仿真中的机械臂无法摆放正确的姿势来抓去红色方块。 后来经过测试&#xff0c;发现应该是python包的版本问题有误&#xff0c;下面记录下正确的包版本&#xff1a; 官方给出的包&#xff1a; conda create -n aloha python3.8.10 conda…

YOLOv8 简介

YOLOv8 是 YOLO 系列的最新版本&#xff0c;在 2023 年由 Ultralytics&#xff08;YOLO 的创造者&#xff09;发布&#xff0c;是性能最佳的目标检测器之一&#xff0c;被视为对现有 YOLO 变体&#xff08;如 YOLO v5 和 YOLOX&#xff09;的改进。 YOLOv8 支持全方位的视觉 A…

【C++】前缀和:一维前缀和

1.题目 2.算法思路 如果暴力求解的话&#xff0c;时间复杂度为O(n*q)。一定会超时。 优化的思路也很简单&#xff0c;就是得到一个求和数组arr&#xff0c;使arr[i]a1a2...ai。 然后每次求l到r之间的数时&#xff0c;直接arr[r]-arr[l-1]就可以得出&#xff01; 这样&#…

贷款借钱平台 小额贷款系统开发小额贷款源码 贷款平台开发搭建

这款是贷款平台源码/卡卡贷源码/小贷源码/完美版 后台51800 密码51800 数据库替换application/database.php程序采用PHPMySQL&#xff0c;thinkphp框架代码开源&#xff0c;不加密后台效果&#xff1a;手机版效果 这款是贷款平台源码/卡卡贷源码/小贷源码/完美版 后台51800 密码…