LLM分布式预训练浅析

news2025/1/12 3:47:14

随着深度学习的不断进步,语言模型的规模越来越大,参数量级已经达到了数千亿甚至数万亿,参数规模的指数增长带来了两个巨大的挑战

1)模型参数过大,如GLM 130B模型参数需要520GB(130B*4bytes)的显存,参数梯度为520GB,优化器状态需要1040GB,共计2096GB的显存,即使显存最大的GPU也放不下大模型的模型参数;

2)即使可以将模型参数放在一张GPU上,对海量数据进行预训练也需要耗费很长时间,单卡如A100训练130B参数量的模型大约需要232年。分布式预训练技术,就是在这样的背景下应运而生,它允许模型在多个计算节点上并行训练,大幅度缩短了训练时间,本文总结了目前常见的分布式训练的常见方法。

1分布式训练

1

数据并行

数据并行指的是数据集切分为多份,每张GPU分配不同的数据进行训练,每个进程运行完整模型,在每个进程上独立运行前向和反向过程,最后通过AllReduce操作,将多张卡上的梯度进行同步。

图片

▲ 图1 数据并行

2

张量并行

张量并行是指将一个独立的层划分到不同的GPU上,例如用两块GPU实现一个并行的GEMM矩阵乘法运算Y=X*W,可以将X和W分别沿着列方向和行方向切分成两份,通过矩阵乘法的分块规则,分别在每个GPU上做子矩阵乘法,然后将两个子矩阵乘法结果相加得到最终结果

图片

针对transformer模型MLP的张量并行实现方式图2所示,第一个GEMM输入X不做切分,直接通过f操作拷贝到两个GPU上,权重A沿列方向进行切分,每个GPU上保存一半的运算结果,通过GELU运算得到Y1和Y2。第二个GEMM由于Y1和Y2已经分别存在于两个GPU上,相当于已经做了沿列方向的切分,所以对权重B做行方向的切分,分别进行矩阵乘法得到Z1和Z2,g操作是一个AllReduce操作,用来实现公式中的加法,AllReduce之后,每个GPU上都有一份完整的Z矩阵。

图片

▲ 图2 MLP张量并行

针对transformer模型Atttention的张量并行如图3所示,QKV的三个矩阵的权重shape均为是[dim, head_humhead_dim],考虑到多头注意力天然的并行性,可以将三个权重沿着列方向进行切分,每张卡上权重的shape为[dim, head_humhead_dim/N],每张卡上不同部分head的softmax等计算式互相独立,分别得到Y1和Y2,再对输出的权重 B沿着行方向切分,得到计算结果Z1和Z2,再通过g做AllReduce操作得到最终的Z。可以看到,每张卡上做的仍然是一个完整的Attention运算,只是head number变为了原来的1/N。

图片

▲ 图3 Attention 张量并行

3

流水线并行

流水线并行是指将不同的layer划分到不同的GPU上,为了提升节点的利用率,将一个batch,继续拆分为 M 个micro batch,当节点1计算完第一个micro batch, 节点2开始计算后,节点 1可以继续计算第二个micro batch,对于P个节点,M个micro batch的流水线并行,流水线气泡占比为(P-1)/M,为减少气泡占比,需保证M>>P。

图片

▲ 图4 流水线并行

4

序列并行

序列并行是在 张量的基础上,将 Transformer 层中的 LayerNorm 以及 Dropout 的输入按输入长度(Sequence Length)维度进行了切分,使得各个设备上面只需要做一部分的 Dropout 和 LayerNorm,LayerNorm 和 Dropout 的计算被平摊到了各个设备上,减少了计算资源的浪费,进一步降低了显存开销。

图片

▲ 图5 序列并行

4

激活重计算

激活重计算是指在前向计算时,只把检查点节点保存在显存中,检查点以外的中间值全部被丢弃,在方向传播计算梯度时,从最近的检查点开始,其余节点重新计算一次前向,激活重计算需要额外的计算,是一个以时间换空间的策略。

5

ZeRO零冗余优化器

数据并行在通信和计算效率上表现良好,但存在内存冗余问题,ZeRO通过分区参数和状态来减少冗余,使每个GPU只保留部分数据。图6展示了启用内存优化后各设备的内存消耗,其中Ψ代表模型大小,K是优化器状态的内存乘数,Nd是数据并行度。

图片

▲ 图6 ZeRO零冗余优化

假设模型大小为Ψ=75亿,基于Adam优化器的混合精度训练,数据并行度为Nd=64,K=12,我们在数据并行的基础上,分三步对显存进行优化

Pos(优化器状态优化)

我们在每个GPU中保存全部的参数和梯度,但是只保存1/Nd的优化器状态,这会导致总的显存消耗变为2Ψ+2Ψ+KΨ/Nd , 在图示假设下为显存占用31.4GB。

Pos+g(优化器状态和梯度优化)

优化器状态优化的基础上增加对梯度内存的优化,即每个GPU中只保存1/Nd的梯度,这会导致总的显存消耗变为2Ψ+(2Ψ+KΨ)/Nd , 在图示假设下为显存占用为16.6GB。

Pos+g+p(优化器状态、梯度以及参数优化)

优化器状态和梯度优化的基础上增加对参数显存的优化,即每个GPU中只保存1/Nd的参数,这将导致总的内存消耗变为(2Ψ+2Ψ+KΨ)/Nd ,在图示假设下为显存占用为1.9GB。

2

讨论与展望

未来的LLM可能会采用更先进的并行策略,以进一步减少通信开销并提高计算效率。例如探索使用分层并行策略,将模型的不同层次分布在不同的节点上进行训练,以减少节点间的通信需求。此外,还可以结合使用数据并行和模型并行的方法,根据硬件环境和模型规模灵活调整并行策略。分布式预训练技术的发展为大规模智算平台提供了有效支撑,但仍然面临非常大挑战,通过精心设计解决方案并不断探索新的并行策略,我们可以进一步提高分布式预训练的效率和可扩展性,为构建更大规模的模型提供支持。

如何学习AI大模型?

作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

四、AI大模型商业化落地方案

img

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。

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

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

相关文章

【Latex】Latex 简介和安装

Latex LaTeX 是一种基于排版的文档准备系统,广泛用于创建高质量的科学和数学文档。它的核心是 TeX 语言,由美国计算机科学家 Donald Knuth 在 1978 年开发。LaTeX 简化了文档的格式化过程,尤其是在处理复杂的公式、引用、表格、图表等方面&a…

Java IO精髓:高效块读写入技术深入解析

文件的复制 首先我们先用昨天学习的知识来完成文件的复制,使用read和write方法来完成。 public static void main(String[] args) throws IOException {FileInputStream fis new FileInputStream("./image.png");FileOutputStream fos new FileOutputStream("…

OpenCV开发笔记(七十九):基于Stitcher类实现全景图片拼接

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/141561865 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…

加速边缘智能技术落地!移远通信推出全功能ARM主板QSM560DR、QSM668SR系列

8月22日,全球领先的物联网整体解决方案供应商移远通信宣布,正式推出其两款全功能ARM主板——QSM560DR与QSM668SR系列。 作为智能设备开发与硬件设计的核心平台,这两款ARM主板以卓越的集成度和性能、广泛的兼容性以及丰富的功能接口&#xff0…

零基础学习人工智能—Python—Pytorch学习(八)

前言 本文介绍卷积神经网络的上半部分。 其实,学习还是需要老师的,因为我自己写文章的时候,就会想当然,比如下面的滑动窗口,我就会想当然的认为所有人都能理解,而实际上,我们在学习的过程中之所以卡顿的点多,就是因为学习资源中想当然的地方太多了。 概念 卷积神经网络…

WPF- vs中的WPF应用项目模板 如何自己实现

读书笔记 1. 单个 c#文件的 空白window应用程序 (只展示了一个button按钮) 2.C#文件 和xml文件 的空白window程序 .xml文件作为程序的资源 (只一个button按钮) 3. xmal和c#共同编译 形如使用VS 创建WPF应用项目模板 1.新建一个wpf空白项目 ,添加一个主c#文件 和xaml文件(属…

list底层详解

目录 介绍 list的实现 1.自定义节点 2.迭代器封装 构造函数 前置和后置 前置--和后置-- *操作符和->操作符 和!操作符 iterator和const_iterator 3. list类 构造函数和析构函数 赋值操作 头尾迭代器 插入和删除 头插头删尾插尾删 list接口函数总代码 介绍…

【开端】Java中最常用的一个类型String的使用

一、绪论 Java中最常用的一个类型是String,其实从JDK1.0 到JDK20 Java 开发工具包其实也经过很多演变,很多功能做了一些优化。这一节就把String类里的方法拎出来看看哪些是常用的,哪些经常用不到得到,哪些是已经有的,…

BaseCTF [第 2 周] lk

前言:做题笔记。 下载解压查壳。 64IDA打开。 查找字符串去。 跟进BaseCTF{ 找到 main 头部: 尾部: 程序: 选择题,咳,动漫迷可以做,也能得flag。(我不怎么看动漫。。) 告知我们,输…

【开发笔记】Notepad++配置

Notepad配置 Notepad保护色配置 settings --> Style Configurator 选择 Enable olobal foreground colourEnable global background colour 设置背景色 点击 Save & Close按钮,完成保存。 设置 Unix换行符

计算机网络 TCPUDP、IP、ARPRARP、NAT总结

文章目录 TCP 和 UDPUDPTCPTCP 三次握手半连接队列(SYN队列)全连接队列(Accept队列)TCP四次挥手为什么四次挥手为什么需要TIME_WAIT状态TIME_WAIT的危害为什么是2MSL 重传机制滑动窗口流量控制拥塞控制 IPIP地址分类A、B、C类地址…

javaee、ssm(maven)、springboot(maven)项目目录结构以及编译后文件目录存放路径

javaee项目目录结构: src下的文件或者是源码编译后都会放在WebRoot(项目根目录)文件夹\WebRoot\WEB-INF\classes目录中。 编译后的文件夹目录如下: 以上为普通的javaee项目目录结构,同maven工程目录结构是不一样的。…

Segment Anything:如何导出完整的ONNX模型?

在本文中,我将讨论 Segment Anything - 例如分割的神经网络,可用于从图像中分割任何对象而无需知道其类型。但是,这不是关于如何使用它的教程,因为它已经在官方存储库和其他类似文章中进行了描述。在这里,我将解释如何…

《计算机网络期末复习知识点大全》

目录 一、第一章 概述 1. TCP/IP分层网络体系结构、分层原因、作用 2. 时延、发送时延、传播时延 2.1 速率相关性能指标 2.1.1 速率 2.1.2 带宽 2.2 时间相关性能指标 2.2.1 发送时延 2.2.2 传播时延 2.3 考点例题 二、第二章 物理层 1. 编码与调制 2. 常用编码方…

人眼检测(单张图像-原始版)

目录 实验原理 实验代码 运行结果 改进代码 实验原理 要在C中使用OpenCV来检测图像中的人眼,你需要完成以下步骤: 安装OpenCV库并设置好开发环境。加载预训练的级联分类器(通常是用于人脸和眼睛检测的XML文件)。读取图像或视…

SQL-函数ing

1、字符串函数 # 字符函数 select concat(hello , mysql!); select lower(HELLO); select upper(hello); select lpad(01,5,-);# 左填充 select rpad(01,5,-);# 右填充 select trim( hello mysql ! );# 去除前后空格 select substring(hello mysql!,1,7);# 截取一部分字符前7…

【Java设计模式】非循环访问者模式:简化对象交互

文章目录 【Java设计模式】非循环访问者模式:简化对象交互一、概述二、非循环访问者设计模式的意图三、非循环访问者模式的详细解释及实际示例四、Java中非循环访问者模式的编程示例五、非循环访问者模式类图六、Java中何时使用非循环访问者模式八、非循环访问者模式…

XTuner微调个人小助手认知 #书生浦语大模型实战营#

1.任务: 本次的任务是使用 XTuner 微调 InternLM2-Chat-1.8B 实现自己的小助手认知,从而让模型能够个性化的回复,让模型知道他是我们的小助手,在实战营帮我们完成XTuner微调个人小助手认知的任务。并截图打卡。 任务打卡&#x…

深入探索【Hadoop】生态系统:Hive、Pig、HBase及更多关键组件(下)

🐇明明跟你说过:个人主页 🏅个人专栏:《大数据前沿:技术与应用并进》🏅 🔖行路有良友,便是天堂🔖 目录 一、引言 1、什么是Hadoop 2、Hadoop生态系统的构成概览 二…

【html+css 绚丽Loading】 000019 五行轮回剑

前言:哈喽,大家好,今天给大家分享htmlcss 绚丽Loading!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 &#x1f495…