LLM并行训练4-megascale论文学习

news/2024/10/5 14:09:07/文章来源:https://www.cnblogs.com/sunstrikes/p/18275554

算法优化

并行注意力机制

\[串行版本: y = x + MLP(LayerNorm(x + Attention(LayerNorm(x)))) \]

\[并行版本: y = x + MLP(LayerNorm(x)) + Attention(LayerNorm(x)))) \]

乍一看确实不是等价的, attention那块的后置mlp去哪了..这个其实没有理论证明, Palm论文里提到把mlp融合到attention里实验62B模型上性能没有下降. 主要对应的是下图网络结构的并行化改造.

image-20240629132922611

滑动窗口Attention

image-20240629163320388

通过堆叠不同大小的窗口来捕获句子中的信息,所需要的计算量会比直接计算整个输入文本长度的计算量要小很多

滑动窗口attention的原理参考这个文章的解释:因为模型都是多层叠加的,所以层级越高,attend的视野域就越广。如果w=3,那么第一层只能注意3个位置,但到第二层能注意到第一层输出的三个位置,换算到第一层的输入,就是5个位置。所以随着层级越高,理论上每个位置注意到的区域就越大,所能存储的信息就越接近全局attention时的状态

AdamW优化(LAMB):

adamW对比adam是把权重衰减项从梯度的计算中拿出来直接加在了最后的权重更新步骤上, 为了把权重衰减和梯度计算解耦(如果加到梯度计算里会影响到动量的滑动平均), 从而提升优化效果.

image-20240629164115223

这里做的优化是新增了一个 \(\phi\)截断函数, 主要目的是为了防止batch_size太大的时候导致优化过程中动量出现极端值影响bp. 这个方法论文里说可以把batch_size增大4倍从而加速训练.

\[W_t\leftarrow W_{t-1}-\alpha \cdot\phi(\frac{||W_{t-1}||}{||r_t+\lambda W_{t-1}||})(r_t+\lambda W_{t-1}) \]

3D并行优化

张量并行优化

image-20240629151955858

序列并行(SP)主要有2个目的: 平摊LayerNorm和Dropout的计算开销, 而且Activation占用显存也很多, 能够平摊显存消耗.

[!NOTE]

这里有个疑问: LayerNorm不是要算全局均值和方差么..这个拆分后是只算该设备内部的均值还是说需要进行额外的allReduce?

AllGather优化

序列并行(SP)后, 在进行张量并行(TP)前需要在fp的时候需要先通过gather把之前层的切片从其他节点copy汇聚过来. 如果等gather完成再跑mlp和attention就会让gpu在通信这段时间空置等待, 这里可以优化成每通信完成一个切片后, 进行这个切片的MLP列切分计算, 同时直接把gather结果送给attention并行计算, 最后再把切片计算结果concat到一起. 比如在copy完A0后, A0的前向计算就和A1的通信并行起来了, 这样就能尽量的隐藏通信

另外对矩阵做切片后再进行矩阵乘法, 计算效率要也比2个超大的矩阵乘法要高.

Reduce-Scatter优化

这块是需要把汇聚计算完成的tensor在重新进行切分发送到序列并行的节点里, 这里是把MLP的第二次行切分和attention结果加和给merge到了一起, 完成一个切片的计算后就发送出去, 同步进行下一个切片的计算使计算和通信异步进行.

流水线优化

image-20240629171330492

回顾一下交错式1F1B, 每个节点fp前需要等recv之前layer的结果, 在当前层fp完后, 通过allGather send出去计算完成的数据, 在bp的时候需要通过Reduce-scatter发送出去计算完的grad.

在warm-up/cool-down过程里, 都是必须等通信完成才能进行计算的. 为了缩短等待时间megascale把allGather的recv/send拆分开, recv优先级高于send, recv后就能直接开始计算, 不需要等send的长尾. 从而缩短等待时间.

在稳定状态的时候应该和megatron一样, 通信都会和计算异步. 实际情况里通信一般都会被隐藏掉(这里我没看懂为啥上面画的对比图是个纯串行的流程)

数据加载优化

这章的主要思想工作中经常用到就不细看了, 主要有2部分:

  1. 在bp完同步梯度的时候, 所有前向相关的数据就没用了, 就可以直接释放回池预加载下一轮fp需要的embed
  2. 避免单机内多张卡重复读相同的冗余数据(这里可能指的是embed集合么?), 先在内存里去好重再copy到显存

网络通信优化

TODO待补充..网络这块基本都忘完了.

集群容错

image-20240629155710287

错误检测

主要思想和flux-cpu有很多相似点, 主要有以下几个点

  1. 每个worker定期上报心跳给中心节点, 确保当前状态正常
  2. 状态异常时的自动化诊断(NCCL allToAll, allReduce. 同主机RDMA网卡间的连接和带宽, 网卡到GPU/MEM的连接和带宽), 完成诊断后上报给中心节点.
  3. 中心节点向k8s申请失败节点的拉黑和重分配替换

状态恢复

  • checkpoint保存: 这个看着实现方法和async_patch是一样的, 先把参数copy到内存, 模型继续训练. 同步再起一个异步线程用来把内存里的参数写到hdfs. 这样就可以把非常耗时的hdfs写入给隐藏掉.
  • checkpoint读取: 主要优化手段是在同一数据并行组里的卡, 只选一个GPU对应的训练线程读hdfs后写内存, 然后通过broadcast给这个数据并行组里的其他卡. 可以降低hdfs的读取压力.

LLM的状态恢复感觉还挺复杂的, 如果有一个节点挂了在重分配后是所有节点全部回滚到上一个checkpoint还是有更快的方法..pipeline并行应该是在根据节点rank在启动的时候就分好了层, 节点重入后要替换原来的rank_id.

状态监控

基于cuda_event的timeline可视化, 算是老熟人了. 这里的难点感觉在于超多卡的实时日志收集, 根据DP来画出卡和卡的数据流依赖关系

参考:

megascale: https://arxiv.org/abs/2402.15627

Palm(并行attention): https://public.agent-matrix.com/publish/shared/Paper/Palm.pdf

滑动窗口注意力解释: https://zhuanlan.zhihu.com/p/223430086

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

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

相关文章

【Linux系列】centos搭建本地源

开始备份:查看光盘挂载路径:❗转义符关闭防火墙:测试一下:🎉Congratulations on successfully switching your local source!

1.Java基础

路线图:https://www.bilibili.com/read/cv9965357/JAVA入门 java SE/EE/ME jdk: java development kit java开发者工具包(安装路径不要包含中文与空格) 通过oracle官网下载:http://www.oracle.com 验证JDK安装成功:bin下的java.exe执行工具,javac.exe编译工具是否可用,…

Linux 提权-Docker 容器

本文通过 Google 翻译 Docker Breakout – Linux Privilege Escalation 这篇文章所产生,本人仅是对机器翻译中部分表达别扭的字词进行了校正及个别注释补充。导航0 前言 1 什么是 Docker ? 2 寻找 Docker 权限2.1 升级 Shell 到完整 TTY 2.2 手动枚举 Docker 组中的用户 2.3 …

程序员如何提升个人技术影响力

此文转发于得物技术,如果侵权,联系删除 前言 都说程序员的成长是码出来的,此话不假。但如果既会写代码,还会写文章,还能讲PPT,那你离影响力还会远吗? 本文是针对每一个技术同学都适用。我将从行业技术大会主编的角色告诉你,如何打造自己的技术影响力,有哪些通用的手段…

VMware ESXi 8.0U3 macOS Unlocker OEM BIOS 集成驱动版,新增 12 款 I219 网卡驱动

VMware ESXi 8.0U3 macOS Unlocker & OEM BIOS 集成驱动版,新增 12 款 I219 网卡驱动VMware ESXi 8.0U3 macOS Unlocker & OEM BIOS 集成驱动版,新增 12 款 I219 网卡驱动 VMware ESXi 8.0U3 macOS Unlocker & OEM BIOS 集成网卡驱动和 NVMe 驱动 (集成驱动版) 发…

第三次blog总结

一、前言:家居强电电路模拟程序-3: 1.知识点:考察类间关系的设计。 2.题量:1道迭代难题。 3.难度:这次在上次的基础上添加了互斥开关和窗帘,有一定难度,需要考虑互斥开关的设计。家居强电电路模拟程序-4: 1.知识点:考察类间关系的设计。 2.题量:1道迭代难题。 3.难度…

windows下搭建lisp环境

因看了《黑客与画家》,想要跟着作者的《ANSI Common Lisp》学习一下lisp,记录一下lisp环境安装过程,及中间出现的问题。 lisp环境选择:emac+slime+clisp,在windows 11下安装。 1.安装Emacs Emacs官网:GNU Emacs - GNU Project1.1 进入官网,选择windows 1.2 选择 main GN…

深度学习--RBM(Restricted Boltzmann Machine)受限玻尔兹曼机-算法--91

目录1. 原理2. 结构 1. 原理 参考: https://bacterous.github.io/2018/05/22/Restricted Boltzmann Machine/ 受限玻尔兹曼机(Restricted Boltzmann Machine,RBM)是G.Hinton教授的一宝。 Hinton教授是深度学习的开山鼻祖,也正是他在2006年的关于深度信念网络DBN的工作,以及…

【WPF】根据选项值显示不同的编辑控件(使用DataTemplateSelector)

接了一个小杂毛项目,大概情形是这样的:ZWT先生开的店是卖拆片机的,Z先生不仅卖机器,还贴心地提供一项服务:可以根据顾客需要修改两个电机的转向和转速(机器厂家有给SDK的,但Z自己不会写程序)。厂家有配套一个调节器,调整参数时连接到拆片机的串口上,然后旋转按钮可以…

OO第七,八次大作业总结

一、前言   在这个学期即将迎来尾声的时候,这个阶段的大作业也迎来了最后的两个迭代大作业,而本次博客就将围绕这两个迭代大作业讲述二、设计与分析  这两次的迭代作业的类设计其实没有很多的变化,只不过根据题目要求添加了互斥开关和受控窗帘,二极管这几个类,其中互斥…

微信内置H5支付

🧑‍💻 写在开头 点赞 + 收藏 === 学会🤣🤣🤣场景是用户通过微信扫app内的收款码,跳到一个h5页面。然后完成支付。 代码实现的整体流程: 使用微信扫码,码是app内生成的,码的内容是一个h5页面链接,扫码完成后跳转到自定义的h5支付界面。 扫码进入后,将页面展示所…

《编译原理》阅读笔记:p25-p32

《编译原理》学习第 5 天,p25-p32总结,总计 8 页。 一、技术总结 1.lexical lexical这个单词后续会经常用到,所以首先要搞懂它的英文意思,不然看到中文的“词法,语法,文法”这三个词的时候就会懵了——lexical对应这三个里面的哪一个? (1)lexical: lexicon + al,加…