首页 > 其他分享 >想做大模型开发前,先来了解一下MoE

想做大模型开发前,先来了解一下MoE

时间:2024-03-04 14:14:09浏览次数:22  
标签:expert 模型 开发 gating AllToAll Mixtral 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/

 

点击关注,第一时间了解华为云新鲜技术~

 

标签:expert,模型,开发,gating,AllToAll,Mixtral,MoE
From: https://www.cnblogs.com/huaweiyun/p/18051698

相关文章

  • 开发苹果iOS应用后如何提交到App Store
    摘要本文将介绍使用AppUploader工具提交iOS应用到AppStore的详细步骤。通过选择IPA文件和通道、设置专用密码以及进行上传,开发者可以顺利完成应用的提交上传过程。引言在iOS应用开发过程中,将应用上传到AppStore是至关重要的一步。本文将详细介绍如何使用AppUploader工具来提......
  • 前端技术开发助教工作总结 —— 2023~2024第一学期
    一、助教工作的具体职责和任务(1)与老师配合的方面理论课批改云班课作业并提醒同学们修改解答同学们在实操中遇到的问题定期收集课程评价并协助老师进行调整和改进整理和分享与前端开发技术相关的学习资料实践课协助老师在实践课中解决同学们的困难统计分组、辅助老师评......
  • three.js导出场景内模型为glb,gltf
    使用three,导出当前场景内指定模型为glb,或者gltf格式import{GLTFExporter}from'three/examples/jsm/exporters/GLTFExporter.js'//导出模型为GLTFpublicexportGLTFModel(){letcurrSelectObj:THREE.Object3D=SMART.scene.children[2];//需要导......
  • uniapp开发微信小程序,动态排列组件的解决方案。
    微信小程序开发里面,并不支持<component:is="item",虽然微信小程序提供了WXML提供模板(template),对于uniapp并不管用,编译后,所以解决方案,只有目前(截止2022-04-15)只有两个:1.使用v-if,遍历组件,判断位置,来显示组件,达到排列要求2.第二种没那么麻烦,比较神奇,使用flex布局的order属性,外层......
  • 【TensorFlow】分析模型常用函数
    常用函数获取模型输入节点信息importtensorflowastffromtensorflow.python.toolsimportsaved_model_utilsmodel_dir='model_dir'meta_graph_def=saved_model_utils.get_meta_graph_def(model_dir,tf.saved_model.SERVING)signatures=meta_graph_def.signatu......
  • 服务端工程师进化史-从零开始的APP开发(1)
    引题笔者开发了个漫画小说阅读APP,前前后后花了三个月,从服务端到前端,再到客户端,一路艰辛不言而喻。附上github的提交记录:起因2023年年末,笔者正为“高级系统架构师”的考试准备中,因资料太过于无聊,期间走神无数、三天打鱼两天晒网,到了临考期,已经是预计考不过的;也不知道为啥,在某......
  • 机器学习策略篇:详解训练/开发/测试集划分(Train/dev/test distributions)
    训练/开发/测试集划分设立训练集,开发集和测试集的方式大大影响了或者团队在建立机器学习应用方面取得进展的速度。同样的团队,即使是大公司里的团队,在设立这些数据集的方式,真的会让团队的进展变慢而不是加快,看看应该如何设立这些数据集,让团队效率最大化。在此,想集中讨论如何设立......
  • 「Java开发指南」MyEclipse如何支持Spring Scaffolding?(四)
    在上文中主要为大家介绍了应用程序分层、代码助手等内容,本文将继续介绍SpringDSL模型等。MyEclipsev2023.1.2离线版下载MyEclipse技术交流群:742336981欢迎一起进群讨论5.SpringDSL模型支持Spring的MyEclipse还有一个特性,它是面向那些希望通过使用抽象层(模型驱动开发)来......
  • 鲨鱼记账二次开发
    一. 明细方面① 货币仅支持人民币,可以加设多种货币,记录后并自动以当天汇率转化为人民币。② 关于初始的明细方面,设置的分类过于复杂,可精简设置,后续用户自己依据自身需求进行添加。③ 记录支出和收入时,可以分配不同银行卡和不同平台,更好管理资产。二. 图表方面‘① 没有饼状图,可......
  • 成功实现win7上用vscode+copilot做开发副机
    最初以为直接在Win7上安装VSCode,然后在上面安装GitHub的CodeCopilot就足够了,然而我很快发现VSCode已经不支持Win7了。既然我已经付款,那在网站上使用总该可以吧?但GitHub不支持个人在网站上使用,必须是企业用户;对于桌面端,它目前只支持自家的VSCode。接着我寻找可以共享屏......