想做大模型开发前,先来了解一下MoE
为了实现大模型的高效训练和推理,混合专家模型MoE便横空出世。
大模型发展即将进入下一阶段但目前仍面临众多难题。为满足与日俱增的实际需求,大模型参数会越来越大,数据集类型越来越多,从而导致训练难度大增,同时也提高了推理成本。为了实现大模型的高效训练和推理,混合专家模型MoE便横空出世。
MoE结构的发展
Vanilla MoE
Export Network,用于学习不同数据,一个Gating Network用于分配每个Expert的输出权重。
Sparse MoE
Experts的输出是稀疏的,只有部分的 experts 的权重> 0,其余=0 的 expert 直接不参与计算
Expert Balancing问题
不同 experts 在竞争的过程中,会出现“赢者通吃”的现象:前期变现好的 expert 会更容易被 gating network 选择,导致最终只有少数的几个 experts 真正起作用
Transformer MoE
GShard
- Transformer的encoder和decoder中,每隔一个(every other)FFN层,替换成position-wise MoE层
- Top-2 gating network
Switch Transformer
简化了MoE的routing算法,gating network 每次只 route 到 1 个 expert
GLaM
- Gshard结构
- Scale参数量
- 降低训练推理成本
MoE的分布式通信和MindSpore优化
MoE结构和普通的Dense模型的差异在于,其需要额外的AllToAll通信,来实现数据的路由(Gating)和结果的回收。而AllToAll通信会跨Node(服务器)、跨pod(路由),进而造成大量的通信阻塞问题
MindSpore的MoE优化
大模型训练主要瓶颈在于片上内存与卡间通信。常用的内存优化手段:
1)MoE并行:将不同的专家切分到不同的卡上,由于MoE的路由机制,需要使用AllToAll通信,将token发送到正确的卡上。对AllToAll的优化:分级AllToAll、Group-wise AllToAll等。
2)优化器异构:大模型训练常使用的adam系列优化器,其占用的内存往往是模型参数本身的2倍或以上,可以将优化器状态存储在Host内存上。
3)多副本并行:将串行的通信、计算拆分成多组,组件流水,掩盖通信时间。
MindSpore已使能上述优化,大幅提升了万亿参数稀疏模型的训练吞吐
Mixtral 8x7b MoE大模型
Mixtral的基础模型Mistral
- RoPE
- RMSNorm
- Transformer decoder
- Grouped Multi-Query Attention
- Sliding window attention: 优化随着序列长度增加而增长的显存占用和计算消耗
Mixtral
- 8个expert(类GPT-4)
- Top2 gating
MoE Layer的MindSpore实现
Mindformers的Mixtral支持
- 基于MindFormers实现Mixtral-8x7B MoE模型。关键结构: GQA, RoPE, RMSNorm, SiluMoE配置: 8 Experts, TopK=2, capacity c=1.1加载开源的Mixtral权重和tokenizer,推理结果对齐HF.
- 4机32卡EP,PP等多维混合并行,基于自有数据集试验性训练收敛符合预期。200 epoch loss 100.02
EP=8,MP=1时性能最佳,约1147 tokens/s/p。
MoE和lifelong learning
终身学习/持续学习的性质
|
性质 |
定义 |
|
知识记忆(knowledge retention) |
模型不易产生遗忘灾难 |
|
前向迁移(forward transfer) |
利用旧知识学习新任务 |
|
后向迁移(backward transfer) |
新任务学习后提升旧任务 |
|
在线学习(online learning) |
连续数据流学习 |
|
无任务边界(No task boudaries) |
不需要明确的任务或数据定义 |
|
固定模型容量(Fixed model capacity) |
模型大小不随任务和数据变化 |
MoE模型+终身学习
|
性质 |
|
|
知识记忆(knowledge retention) |
√ |
|
前向迁移(forward transfer) |
√ |
|
后向迁移(backward transfer) |
- |
|
在线学习(online learning) |
× |
|
无任务边界(No task boudaries) |
√ |
|
固定模型容量(Fixed model capacity) |
√ |
MoE的特点:
- 多个Expert分别处理不同分布(domain/topic)的数据
- 推理仅需要部分Expert
LLM的终身学习:
- 世界知识底座持续学习。
- Expert可插拔
- Gating Network可增删。
MoE+终身学习的典型工作
- Lifelong-MoE
- 扩展expert和gating network的维度
- 冻结旧的expert和gating network维度
- 使用正则克服遗忘灾难
Pangu-sigma
Random Routed Experts:
- 第一层,根据任务分配给不同的专家组(多个expert构成一个专家组,供一个task/domain使用)
- 第二层,使用组内随机Gating,让专家组的expert可以负载均衡。
这样可以保证某个领域对应的expert可以直接被抽取出来作为单个模型使用。
Mixtral 8x7b Demo
Mistral-MindSpore: https://github.com/lvyufeng/mistral-mindspore
Mindformer(MoE预训练):https://gitee.com/mindspore/mindformers/
想做大模型开发前,先来了解一下MoE的更多相关文章
- 想做Android Wear开发?你得先搞明白这四件事
手环和手表的腕上穿戴之争,随着Apple Watch发布和Android Wear不断完善而告一段落.尽管续航上略有缺陷,但手表以其类似手机可扩展的生态环境赢得了众多巨头的支持. Google曾透露, ...
- 如何在mac上使用idea做大数据开发
1 软件包下载 jdk1.8 (jdk1.8.0_231) idea(包括2018,2019) (ideaIC-2019.3.3/ideaIC-2018.3.5) 汉化包:汉化包.rar maven3 ...
- 华为高级研究员谢凌曦:下一代AI将走向何方?盘古大模型探路之旅
摘要:为了更深入理解千亿参数的盘古大模型,华为云社区采访到了华为云EI盘古团队高级研究员谢凌曦.谢博士以非常通俗的方式为我们娓娓道来了盘古大模型研发的"前世今生",以及它背后的艰难 ...
- 无插件的大模型浏览器Autodesk Viewer开发培训-武汉-2014年8月28日 9:00 – 12:00
武汉附近的同学们有福了,这是全球第一次关于Autodesk viewer的教室培训. :) 你可能已经在各种场合听过或看过Autodesk最新推出的大模型浏览器,这是无需插件的浏览器模型,支持几十种数 ...
- Java开发想尝试大数据和数据挖掘,如何规划学习?
大数据火了几年了,但是今年好像进入了全民大数据时代,本着对科学的钻(zhun)研(bei)精(tiao)神(cao),我在17年年初开始自学大数据,后经过系统全面学习,于这个月跳槽到现任公司. 现在已 ...
- 研发流程 接口定义&开发&前后端联调 线上日志观察 模型变动
阿里等大厂的研发流程,进去前先了解一下_我们一起进大厂 - SegmentFault 思否 https://segmentfault.com/a/1190000021831640 接口定义 测试用例评 ...
- 【大型软件开发】浅谈大型Qt软件开发(一)开发前的准备——在着手开发之前,我们要做些什么?
前言 最近我们项目部的核心产品正在进行重构,然后又是年底了,除了开发工作之外项目并不紧急,加上加班时间混不够了....所以就忙里偷闲把整个项目的开发思路聊一下,以供参考. 鉴于接下来的一年我要操刀这个 ...
- 想研究BERT模型?先看看这篇文章吧!
最近,笔者想研究BERT模型,然而发现想弄懂BERT模型,还得先了解Transformer. 本文尽量贴合Transformer的原论文,但考虑到要易于理解,所以并非逐句翻译,而是根据笔者的个人理解进 ...
- 千亿参数开源大模型 BLOOM 背后的技术
假设你现在有了数据,也搞到了预算,一切就绪,准备开始训练一个大模型,一显身手了,"一朝看尽长安花"似乎近在眼前 -- 且慢!训练可不仅仅像这两个字的发音那么简单,看看 BLOOM ...
- 从零开始编写自己的C#框架(2)——开发前准备工作
没想到写了个前言就受到很多朋友的支持,大家的推荐就是我最大的动力(推荐得我热血沸腾,大家就用推荐来猛砸我吧O^-^O),谢谢大家支持. 其实框架开发大家都知道,不过要想写得通俗点,我个人觉得还是挺吃力 ...
随机推荐
- vue中设置props参数类型
props参数的使用 在使用vue的项目开发的过程中 经常会定义大量的组件使用 这个时候组件中的定义的数据类型就非常重要了 此时我们需要定义组件中需要的数据类型 之前我只知道简单的几个 今天忽然发现原 ...
- 【JS 逆向百例】网洛者反爬练习平台第六题:JS 加密,环境模拟检测
关注微信公众号:K哥爬虫,持续分享爬虫进阶.JS/安卓逆向等技术干货! 声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后 ...
- linux时间和当前时间相关8小时问题
依次执行如下的代码: 1.更改时区 cp /usr/share/zoneinfo/GMT /etc/localtime ln -sf /usr/share/zoneinfo/Asia/Shanghai ...
- 强大的AWS lambda
AWS强大的lambda 自从几年前换工作后,我所参与的项目一直都是基于AWS云服务的架构,我慢慢对serverless的相关基础建设有了一定了解和实践经验.其中lambda是我心中最强大的serve ...
- 微信小程序-页面跳转Tabbar
官方文档地址:https://developers.weixin.qq.com/miniprogram/dev/reference/configuration/app.html#tabBar 首先我们 ...
- MySQL【二】---数据库查询详细教程{查询、排序、聚合函数、分组}
1.数据准备.基本的查询(回顾一下) 创建数据库 create database python_test charset=utf8; 查看数据库: show databases; 使用数据库: use ...
- 2.6 Windows驱动开发:使用IO与DPC定时器
本章将继续探索驱动开发中的基础部分,定时器在内核中同样很常用,在内核中定时器可以使用两种,即IO定时器,以及DPC定时器,一般来说IO定时器是DDK中提供的一种,该定时器可以为间隔为N秒做定时,但如果 ...
- Linux的信号管理 [补档-2023-07-30]
信号 11-1简介: 信号只是表示某个信号,不可以携带大量信息,信号需要满足特点的条件才会产生.是一种特别的通信手 段. 11-2 信号机制: 假设有两个进程A,B,现在进程A给进程B发送信号 ...
- 纪念JDBC
技术总是在不断更新变化的,尤其是在IT编程领域. 有时候我们理所当然的用着现成的框架,以至于用的太过于顺手,更要时不时的骂一句: 什么垃圾框架?我家狗都不会用! 如果那些被拍死在沙滩的"前浪 ...
- 算法与数据结构-07-手写类HashTable
package day05; import java.sql.SQLOutput; import java.util.Scanner; /** * 哈希表代码实现 */ public class Ha ...