AI Infra论文阅读之通过打表得到训练大模型的最佳并行配置

目录

  • 0x0. 前言
  • 0x1. 摘要
  • 0x2. 介绍
  • 0x3. 背景
  • 0x4. 实验设置
  • 0x5. 高效的LLM训练分析
    • 0x5.1 Fused Kernels 和 Flash Attention
      • 0x5.1.1 Attention
      • 0x5.1.2 RMSNorm Kernel
    • 0x5.2 Activation Checkpointing
    • 0x5.3 Micro-Batch 大小
    • 0x5.4 Tensor Parallelism和Pipline Parallelism
    • 0x5.5 Sequence Parallelism
    • 0x5.6 端到端性能
  • 0x6. 结论
  • 0x7. 附录里面一些有用的公式
    • 0x7.1 MFU计算公式
    • 0x7.2 LLaMA训练的MFU估计
    • 0x7.3 Megatron-LM MFU

0x0. 前言

这次阅读一篇mlsys的一篇新论文,《Efficient Parallelization Layouts
for Large-Scale Distributed Model Training》,虽然该论文还处于open review阶段,但作者在 Megatron-LM 基础上通过对各种训练调优方法进行组合打表获得了一些比较有趣的结论和发现,地址:https://openreview.net/pdf?id=Y0AHNkVDeu 。作者的详细实验表格在:https://github.com/Aleph-Alpha/NeurIPS-WANT-submission-efficient-parallelization-layouts

paper中基于大量搜索实验,最后得出来以下几个训练大模型的建议:

  • 使用Micro Batch大小为1,以实现最小程度的模型并行化,避免Activation Checkpointing,并减少流水线bubble。
  • 优先使用TP和PP,而不是Activation Checkpointing。
  • 只有在无法进一步降低模型并行化程度时,才扩大Micro Batch大小。
  • 对于参数超过30B且序列长度超过2k的模型,使用Sequence Parallelism。

然后在Paper的第4节还有几个有趣的发现,比如应该优先流水并行而不是模型并行,以及Flash Attention自带Activation Checkpointing,只对FFN进行Activation Checkpointing能获得更好的MFU。

这篇文章的解读力求精简,基本没有翻译任何原文,所以节奏非常快只写了核心要点,感兴趣也可以阅读原文,但干货应该都在这里了。

0x1. 摘要

摘要指出了现在训练大语言模型的一些高效的训练方法。包括:1) 需要跨多个硬件加速器进行并行处理和采用计算及内存优化;2) 之前的研究未涉及最新的优化技术,如Flash Attention v1/v2或Sequece Parallel;3) 作者进行了全面的训练配置打表研究,并提出了一些关键的建议以提高训练效率;4) 发现使用 micro-batch=1 能提高训练效率,但较大的micro-batch需要Activation Checkpointing或更高程度的模型并行大小,同时也会导致更大的pipeline bubble;5) 作者得到的最高效的配置在不同模型大小上实现了先进的训练效率,特别是在训练13B LLAMA模型时,达到了70.5%的MFU。

0x2. 介绍

这里对当前训练LLM的一些流行的技术做了简介,比如Zero,Activation Checkpointing,3D Parallel,Flash Attention,Sequence Parallel等等。然后paper的贡献就是把这些技术进行组合打表,最终得到了几个结论。

0x3. 背景

背景里面对Data Parallel,Tensor Parallel,Pipline Paralle,3D Parallel,Sequence Parallel,Activation Checkpointing,Fused Kernels,Flash Attention做了简要介绍,这些都是AI Infra的常见技术大家可以在 https://github.com/BBuf/how-to-optim-algorithm-in-cuda/tree/master/large-language-model-note 这里找到每一种技术的更多介绍资料。

这里需要关注的应该只有下面这张表:

在这里插入图片描述

这个表格是paper的搜索空间,大家可以看一下。这里的RMSNorm Kernel指的是Flash Attention2里实现的kernel。

0x4. 实验设置

实验在32个NVIDIA DGX A100节点上进行,每个节点有8个NVIDIA A100 80GB GPU,总共256个GPU。每个节点内的GPU通过第三代NVLink互联,提供600GB/s的带宽。 跨节点通信由NVIDIA Mellanox 200Gb/s HDR Infiniband连接实现。选择的训练模型为LLAMA,训练设置遵循LLAMA2。然后按照上一节的Table1的配置进行扫描,每次扫描的时候运行10次,并只记录后9次的平均MFU。然后在遍历表格的时候DP和Acc由其他指定的参数自动计算,比如128张GPUs并且TP=4,PP=2时,DP被自动计算为128 / 4 / 2 = 16。实验的扫描配置见B.1表:

在这里插入图片描述可以看到LLAMA 13B最高达到了70%的MFU。

0x5. 高效的LLM训练分析

这篇paper的干货在这一节展示。

0x5.1 Fused Kernels 和 Flash Attention

paper里对Fasl Attention进行了更大规模模型的测试,此外还测试了一下Meagtron-LM自带的fused softmax attention kernel以及Faslh Attention v2里面的Fused RMSNorm kernel。

0x5.1.1 Attention

在这里插入图片描述

Figure1中展示了不同注意力实现的扫描结果,可以看到MFU最高的配置是Flash Attention2+RMS Kernel,然后micro-size=TP=PP=1,这样可以达到最佳MFU。需要特别注意的是Figure1中的测试都没有使用Activation Checkpointing(但Falsh Attention内部自己是有重计算的)。

0x5.1.2 RMSNorm Kernel

在Figure1厘米还展示了Flash Attention库里面优化的RMSNorm kernel在在训练效率上得到了很多的提升,和没用这个RMS Kernel相比可以提升14个百分点的MFU。当然有很大的原因是因为这个kernel更加节省内存,可以让并行配置从pp2变成纯数据并行,减少了通信开销。这里还提了一句,RMSNorm和Activation Checkpointing一起用会出错。

0x5.2 Activation Checkpointing

在这里插入图片描述

在Figure2里面报告了不同模型大小最佳配置的MFU,包含对每一层使用以及不使用Activation Checkpointing。结论就是在不使用Activation Checkpointing并且通过较小的micro-batch或者更高程度的模型并行来补偿因此产生的内存成本,可以实现最佳的训练MFU。这里没有使用Flash Attention提供的RMSNorm Kernel。

对于LLAMA 30B模型,序列长度为8k,在训练过程中即使TP Size大小达到4,PPO Size达到16,Activation Checkpointing也是将模型装入内存的必要条件因为LLAMA 30B模型有52个注意力头,不能被8整除,所以我们无法增加TP Size。在paper的4.1节中,展示了添加RMSNorm kernel进一步降低了所需内存,使得Activation Checkpointing不再必要。在这种情况下,我们再次看到,不使用Activation Checkpointing的设置实现了最佳吞吐量。

另外,这里提到Flash Attention由于本身就自带重计算,所以一个更加合理的方法是对于一个Transformer Block来说,只对FFN这部分用重计算,避免多余的重复计算。

0x5.3 Micro-Batch 大小

这一小节评估了Micro-Batch 大小与所需模型(张量或流水线)并行度和Activation Checkpointing之间的权衡。之前已经有工作基准测试了不同的Micro-Batch大小,并固定了张量和流水线并行度,显示出更大的Micro-Batch大小带来更高的吞吐量。但是,较小的Micro-Batch大小可能使得不同的、更高效的并行化配置成为可能。此外,张量和流水线并行度在实践中也往往不是固定的。

在图3中,paper展示了评估的每种模型类型的最佳表现(Activation Checkpointing、张量并行度大小、流水线并行度大小)配置。为了公平地评估 Activation Checkpointing,没有包括使用 Flash Attention2 的 RMSNorm Kernel,因为该kernel与Activation Checkpointing结合使用时会导致错误。最终发现对于所有模型类型,Micro-Batch大小为1的情况下达到了最佳MFU。一般来说是:Micro-Batch大小越小,MFU越好。使用大于2的Micro-Batch大小时,序列长度为8k的模型在任何并行配置下都无法塞进内存。

因此,这里得出结论,选择Micro-Batch大小为1在大多数情况下是有益的。Micro-Batch大小为1的卓越性能可归因于以下三个因素。

  • 最小程度的模型并行化:最高效的训练通常需要最少量的模型(张量或流水线)并行化,这在Micro-Batch大小最小时实现。
  • 避免Activation Checkpointing:对于某些模型(例如,LLAMA 65B),微批量大小为1是唯一允许无Activation Checkpointing训练的配置。正如前一节所讨论的,不使用Activation Checkpointing通常允许最高吞吐量的配置。LLAMA 30B 8k模型在不使用RMSNorm kernel的情况下无法装入内存。
  • 减少流水线bubble时间:较小的Micro-Batch大小减少了在批处理开始和结束时在流水线bubble中花费的时间。这里使用的是1F1B流水线并行调度算法。Meagtron支持这种实现。

在这里插入图片描述

0x5.4 Tensor Parallelism和Pipline Parallelism

在这里插入图片描述

这一节的内容主要就是看Figure4,结论就是流水并行比张量并行更容易获得更高的MFU,应该优先流水并行。

0x5.5 Sequence Parallelism

在这里插入图片描述

这一节就是看Figure5,对于LLAMA 13B和30B模型,序列长度为2k时,最佳配置是不使用任何张量并行,因此激活 Sequence Parallelism 没有效果。在序列长度为8k的13B模型中,最佳配置采用了2的张量并行大小;然而,没有观察到训练效率的提升。对于最大的模型和序列长度,即序列长度为8k的30B和65B模型,我们可以看到在使用Sequence Parallelism时有2-6个百分点的MFU提升。在这两种情况下,Sequence Parallelism由于减少了内存需求,使得模型并行化程度降低,从而提高了训练效率。

结论是,当与本工作中探索的其他几种优化结合使用时,Sequence Parallelism的使用只有在模型大小超过30B参数或序列长度超过2k时,才能显著提高训练效率。

0x5.6 端到端性能

实际上就是对下面这张表的解读:

在这里插入图片描述

这里的AA-Scaling是作者团队内部的基于Megatron-LM开发的仓库,然后就是说基于本文搜索的最佳并行配置以及相关技术组合可以获得相比于公开框架和模型更高的MFU。

0x6. 结论

基于paper的大量搜索实验,最后得出来以下几个训练大模型的建议。

  • 使用Micro Batch大小为1,以实现最小程度的模型并行化,避免Activation Checkpointing,并减少流水线bubble。
  • 优先使用TP和PP,而不是Activation Checkpointing。
  • 只有在无法进一步降低模型并行化程度时,才扩大Micro Batch大小。
  • 对于参数超过30B且序列长度超过2k的模型,使用Sequence Parallelism。

0x7. 附录里面一些有用的公式

应该就是7.1和7.2可以认真看下,7.3可以忽略。

0x7.1 MFU计算公式

在这里插入图片描述

模型浮点运算量利用率(MFU)的计算遵循PaLM的方法。我们考虑理论上的矩阵乘法峰值吞吐量为P FLOPs每秒(例如,A100 GPU的峰值矩阵乘法TFLOPs为312)。然后,模型的FLOPs利用率是实际达到的每秒处理的token数与理论峰值吞吐量R = P/(6N + 12LHQT)的比率,其中L是层数,H是注意力头的数量,Q是注意力头的大小,T是序列长度。注意,L × H等于模型的隐藏层大小。N是参数量。计算的代码如下:

在这里插入图片描述

0x7.2 LLaMA训练的MFU估计

在这里插入图片描述

0x7.3 Megatron-LM MFU

在这里插入图片描述

在这里插入图片描述

这个可能参考意义不是很大,不太了解这个end2end的训练时间是怎么估记出来的,没看21所引用的paper。

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

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

相关文章

幻兽帕鲁服务器一键搭建脚本

前言 幻兽帕鲁刚上线就百万在线人数。官方服务器的又经常不稳定。所以这里给大家带来最快捷的搭建教程。废话不多说直接开始。 服务器配置要求 这里推荐腾讯云的轻量云服务器 测试环境: CPU : 2核 内存:4GB 系统:Debian 12 64…

leetcode:二叉树的中序遍历(外加先序,后序遍历)

题外:另外三种遍历可以看这: 层序遍历: Leetcode:二分搜索树层次遍历-CSDN博客 先序遍历: 二叉树的先序,中序,后序遍历-CSDN博客 后序遍历: 二叉树的先序,中序,后序…

鸿蒙开发(Harmonyos兼容与Harmonyos适配)

布局的实现 Layout_ability_main.xml布局&#xff1a; <?xml version"1.0" encoding"utf-8"?> <DirectionalLayoutxmlns:ohos"http://schemas.huawei.com/res/ohos"ohos:height"match_parent"ohos:width"match_pare…

测试人员为什么要编写测试用例?好的测试用例应该具备那些特点?

设计测试用例可以说是测试人员的一项最基本技能 。很多时候当我们接到设计测试用例的任务时 &#xff0c;往往都是想的该如何更快的完成这项任务 &#xff1f;而很少去想为什么要完成这项任务? 对于测试用例也是如此&#xff0c;为什么要设计测试用例呢(目的)&#xff1f;其实…

Jellyfin影音服务本地部署并结合内网穿透实现公网访问本地资源

文章目录 1. 前言2. Jellyfin服务网站搭建2.1. Jellyfin下载和安装2.2. Jellyfin网页测试 3.本地网页发布3.1 cpolar的安装和注册3.2 Cpolar云端设置3.3 Cpolar本地设置 4.公网访问测试5. 结语 1. 前言 随着移动智能设备的普及&#xff0c;各种各样的使用需求也被开发出来&…

拼图小游戏的界面和菜单的搭建

package Puzzlegame.com.wxj.ui;import javax.swing.*;public class GameJframe extends JFrame { //游戏主界面 public GameJframe(){//初始化界面initJFrame();//初始化菜单initJmenuBar();//让界面显示出来this.setVisible(true); }private void initJmenuBar() {//创建整个…

需求变化频繁的情况下,如何实施自动化测试

一.通常来说&#xff0c;具备以下3个主要条件才能开展自动化测试工作: 1.需求变动不频繁 自动化测试脚本变化的频率决定了自动化测试的维护成本。如果需求变动过于频繁&#xff0c;那么测试人员就需要根据变动的需求来不断地更新自动化测试用例&#xff0c;从而适应新的功能。…

qiankun子应用静态资源404问题有效解决(涉及 css文件引用图片、svg图片无法转换成 base64等问题)

在&#x1f449;&#x1f3fb; qiankun微前端部署&#x1f448;&#x1f3fb;这个部署方式的前提下&#xff0c;遇到的问题并解决问题的过程 最开始的问题现象 通过http请求本地的静态json文件404css中部分引入的图片无法显示 最开始的解决方式 在&#x1f449;&#x1f3…

行测-言语:2.语句表达

行测-言语&#xff1a;2.语句表达 1. 语句排序题 捆绑就是看两句话是不是讲的同一个内容&#xff0c;相同内容的句子应该相连。 1.1 确定首句 1.1.1 下定义&#xff08;……就是 / 是指&#xff09; A 1.1.2 背景引入&#xff08;随着、近年来、在……大背景 / 环境下&#…

Android 渲染机制

1 Android 渲染流程 一般情况下&#xff0c;一个布局写好以后&#xff0c;使用 Activity#setContentView 调用该布局&#xff0c;这个 View tree 就创建好了。Activity#setContentView 其实是通过 LayoutInflate 来把布局文件转化为 View tree 的&#xff08;反射&#xff09;…

使用Go语言编写自定义的HTTP代理:探险网络奇幻之旅

你是否曾经想过自己也能编写一个代理服务器&#xff0c;掌握网络冲浪的主动权&#xff1f;现在&#xff0c;有了Go语言&#xff0c;这个梦想不再遥不可及&#xff01;让我们一起踏上这段探险之旅&#xff0c;用Go语言编写一个自定义的HTTP代理&#xff0c;开启网络奇幻之旅&…

音频格式之AAC:(3)AAC编解码原理详解

系列文章目录 音频格式的介绍文章系列&#xff1a; 音频编解码格式介绍(1) ADPCM&#xff1a;adpcm编解码原理及其代码实现 音频编解码格式介绍(2) MP3 &#xff1a;音频格式之MP3&#xff1a;(1)MP3封装格式简介 音频编解码格式介绍(2) MP3 &#xff1a;音频格式之MP3&#x…

HNU-编译原理-甘晴void学习感悟

前言 熬过煎熬的考试周、复习以及更加煎熬的等成绩&#xff0c;查到成绩的那一刻&#xff0c;心里还是挺开心的。 虽然我没有完全学懂这门课程&#xff0c;但我还是兢兢业业地通过了课程的考试&#xff0c;拿到了这门课程的认可。 记录一下自己对编译原理的学习感悟&#xf…

优化用户体验测试应用领域:提升产品质量与用户满意度

在当今数字化时代&#xff0c;用户体验测试应用已经成为确保产品质量、提升用户满意度的关键工具。随着技术的不断发展&#xff0c;用户的期望也在不断演变&#xff0c;因此&#xff0c;为了保持竞争力&#xff0c;企业必须将用户体验置于产品开发的核心位置。本文将探讨用户体…

知识圣殿,智慧熔炉

知识圣殿&#xff0c;智慧熔炉 知识殿堂&#xff0c;巍然屹立 一座灵魂熔炉&#xff0c;号称图书馆 万卷书香盈架&#xff0c;智慧如星河汇聚 每一册书页&#xff0c;流淌着人类文明的血脉 钢笔与墨水交织诗篇 思想发芽&#xff0c;真理绽放光焰 浩瀚知识海洋&#xff0c;波涛…

Dlearning

Deep Learning Basic 神经网络&#xff1a; #mermaid-svg-rR22a8Udy5SxGOoP {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-rR22a8Udy5SxGOoP .error-icon{fill:#552222;}#mermaid-svg-rR22a8Udy5SxGOoP .error-t…

【MATLAB源码-第122期】基于matlab斑马优化算法(ZOA)无人机三维路径规划,输出做短路径图和适应度曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 斑马优化算法&#xff08;Zebra Optimization Algorithm&#xff0c;简称ZOA&#xff09;是一种模仿斑马群体行为的优化算法。在自然界中&#xff0c;斑马是一种社会性很强的动物&#xff0c;它们具有独特的群体行为模式&…

【STM32】STM32学习笔记-硬件SPI读写W25Q64(40)

00. 目录 文章目录 00. 目录01. SPI简介02. W25Q64简介03. SPI相关API3.1 SPI_Init3.2 SPI_Cmd3.3 SPI_I2S_SendData3.4 SPI_I2S_ReceiveData3.5 SPI_I2S_GetFlagStatus3.6 SPI_I2S_ClearFlag3.7 SPI_InitTypeDef 04. 硬件SPI读写W25Q64接线图05. 硬件SPI读写W25Q64示例06. 程序…

1块9毛钱,修复拓牛TC1D智能垃圾桶盖子不能正常开合的故障

前言 21年9月份买了拓牛的智能垃圾桶&#xff0c;一直用的很流畅&#xff0c;再加上屋里没啥有机垃圾&#xff0c;也没有宠物&#xff0c;用上之后每次投入垃圾&#xff0c;之后都会盖上盖子&#xff0c;没有很多的异味散发&#xff0c;屋里也没有蟑螂等害虫。 再加上门口有帘…

Chrome单独配置代理的方法

Windows Windows上单独对Chrome设置代理&#xff0c;需要在启动时传递参数&#xff0c;具体步骤如下。 在Chrome浏览器的快捷方式上右击&#xff0c;进入属性。在 快捷方式 标签下找到 目标 项目&#xff0c;在最后添加 –proxy-server“socks5://xxx.xxx.xx.xx:xxxx” 如果要…