LLM分布式预训练浅析

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

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.rhkb.cn/news/409311.html

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

相关文章

MDM监管锁系统租赁系统搭建教程

材料准备 使用公司资质申请苹果开发者账号 https://support.tuya.com/zh/help/_detail/Kam3pskapsytn 注意事项: 填写公司官网的时候 公司官网必须可以访问 且官网包含公司的 地址 联系方式 等信息 否则会被拒绝 申请苹果开发者的appleid 最好使用已经注册并使用一…

8.5 数据库基础技术-规范化

函数依赖 函数依赖公理系统

每日Attention学习15——Cross-Model Grafting Module

模块出处 [CVPR 22] [link] [code] Pyramid Grafting Network for One-Stage High Resolution Saliency Detection 模块名称 Cross-Model Grafting Module (CMGM) 模块作用 Transformer与CNN之间的特征融合 模块结构 模块思想 Transformer在全局特征上更优,CNN在…

Puppeteer Web 抓取:使用 Browserless 的 Docker

Docker 镜像介绍 Docker 镜像是用于在 Docker 容器中执行代码的文件。它类似于构建 Docker 容器的指令集,就像一个模板。换句话说,它们相当于虚拟机环境中的快照。 Docker 镜像包含运行容器所需的所有库、依赖项和文件,使其成为容器的独立可…

【Pytorch】生成对抗网络实战

GAN框架基于两个模型的竞争,Generator生成器和Discriminator鉴别器。生成器生成假图像,鉴别器则尝试从假图像中识别真实的图像。作为这种竞争的结果,生成器将生成更好看的假图像,而鉴别器将更好地识别它们。 目录 创建数据集 定…

前端宝典十一:前端工程化稳定性方案

一、工程化体系介绍 1、什么是前端工程化 前端工程化 前端 软件工程;前端工程化 将工程方法系统化地应用到前端开发中;前端工程化 系统、严谨、可量化的方法开发、运营和维护前端应用程序;前端工程化 基于业务诉求,梳理出最…

redhawk:STA timing data file解析

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 往期文章:

PyTorch深度学习网络(一:MLP)

全连接神经网络,又称多层感知机(MLP),是深度学习最基础的神经网络。全连接神经网络主要由输入层、隐藏层和输出层构成。本文实现了一个通用MLP网络,包括以下功能: 根据输入的特征数、类别数、各隐藏层神经…

以简单的例子从头开始建spring boot web多模块项目(五)-thymeleaf引擎

继续向里面加,这次是引入thymeleaf渲染引擎。 使用这个引擎的很多,主要是以下几个优点: Thymeleaf是适用于Web和独立环境的现代服务器端Java模板引擎。Thymeleaf的主要目标是为您的开发工作流程带来优雅的自然模板 -HTML可以在浏览器中正确显…

Vue3加vite使用Cesium绘制图形

Vue3加vite使用Cesium绘制图形 1、项目开发准备 Node版本:16.20.2 1.1创建一个新的工程:my-cesium-app npm create vitelatest my-cesium-app – --template vue1.2 安装Element Plus npm install element-plus --save // main.js import ElementPl…

【STM32】看门狗

看门狗,还没有别的地方用上,暂时还不清楚在实际应用中最多的场景是什么,我感觉是用来强制重启系统。 大部分图片来源:正点原子HAL库教程 专栏目录:记录自己的嵌入式学习之路-CSDN博客 目录 1 应用场景 1.1 解决…

Langchain Memory组件深度剖析:从对话基础到高级链式应用

文章目录 前言一、Langchain memory 记忆1.Memory 组件基本介绍2.Memory 组件的类型1.ChatMessageHistory2.ConversationBufferMemory3.ConversationBufferWindowMemory4.ConversationEntityMemory5.ConversationKGMemory6.ConversationSummaryMemory 二、长时记忆1.简单介绍2.…

解决ubuntu22.04无法识别CH340/CH341和vscode espidf插件无法选择串口设备节点问题

文章目录 解决ubuntu22.04无法识别CH340/CH341和vscode espidf插件无法选择串口设备节点问题不识别CH340/CH341报错解决办法升级驱动编译安装 卸载brltty程序 vscode espidf插件无法选择串口设备节点问题解决办法编译安装 解决ubuntu22.04无法识别CH340/CH341和vscode espidf插…

C#开发中ImageComboBox控件数据源实时变换

在C#开发中,我们如何将控件的数据源实时变换,当然我们可以在窗口实例化的时候指定固定的数据源,但是这样对于用户来说数据源永远固定,并不利于我们对于用户的数据存储,优化用户的操作,遇到这种问题&#xf…

Flutter ListView滑动

在Flutter中,ScrollController可以精确地控制和管理滚动行为。通过ScrollController,可以监听滚动的位置、速度,甚至可以在用户滚动时触发自定义的动作。此外,ScrollController还提供了对滚动位置的直接控制,可以编程地…

DRF——请求的封装与版本管理

文章目录 django restframework1. 快速上手2. 请求数据的封装3. 版本管理3.1 URL的GET参数传递(*)3.2 URL路径传递(*)3.3 请求头传递3.4 二级域名传递3.5 路由的namespace传递 小结 django restframework 快速上手请求的封装版本…

科大讯飞刘聪:大模型加持,人形机器人将跨越三大瓶颈

2024年,AI大模型成为机器人产业新的加速器。 今年3月,ChatGPT4加持的机器人Figure01向外界展示了大模型赋能人形机器人的巨大潜力。Figure01能理解周围环境,流畅地与人类交谈,理解人类的需求并完成具体行动,包括给人类…

虚幻5|AI视力系统,听力系统,预测系统(2)听力系统

虚幻5|AI视力系统,听力系统,预测系统(1)视力系统-CSDN博客 一,把之前的听力系统,折叠成函数,复制粘贴一份改名为听力系统 1.小个体修改如下,把之前的视力系统改成听力系统 2.整体修…

隐私指纹浏览器产品系列 —— 浏览器指纹 中(三)

1.引言 在上一篇文章中,我们聊到了最老牌的浏览器指纹检测站——BrowserLeaks。BrowserLeaks曾经是浏览器指纹检测的权威,但它似乎更像是一本老旧的工具书,只能呆板告诉你浏览器的指纹值,并对比不同浏览器的指纹差异。 今天&…

C语言 之 浮点数在内存中的存储 详细讲解

文章目录 浮点数浮点数的存储浮点数的存储浮点数的读取例题 浮点数 常见的浮点数:3.14159、1E10(表示1*10^10)等 浮点数家族包括: float、double、long double 类型。 浮点数表示的范围在float.h 中有定义 浮点数的存储 浮点数…