16.大模型分布式训练框架 Microsoft DeepSpeed

微调、预训练显存对比占用

预训练LLaMA2-7B模型需要多少显存?

假设以bf16混合精度预训练 LLaMA2-7B模型,需要近120GB显存。即使A100/H100(80GB)单卡也无法支持。

为何比 QLoRA多了100GB?不妨展开计算下显存占用:

  • 模型参数:70亿 x 2 Bytes ≈ 14GB;
  • 更新梯度:70亿 x 2 Bytes ≈ 14GB;
  • 优化器(e.g.AdamW),训练过程默认使用fp32精度:
    • 模型参数拷贝:7B x 4Bytes ≈ 28GB
    • 倍梯度数量的动量:2x7B x 4Bytes≈ 56GB
  • 显存占用总计:14 x 2 + 28 x 3 = 112 GB
  • 可简记为:7 x (2+2+12) = 112

请添加图片描述

使用混合精度训练模型单步流程图

请添加图片描述

ZeRO技术

请添加图片描述

Zero Redundancy Optimizer (ZeRO优化器) 技术创新 (2020年 GPT3发布前)

大模型训练困难

  • 巨大的深度学习模型虽然能带来显著的准确度提升,但训练拥有数十亿到数万亿参数的模型非常具有挑战性。
  • 现有数据并行和模型并行这两种常见解决方案在将大型模型适配到有限的设备内存中时存在根本性的限制,同时还需在计算、通信和开发效率之间取得平衡。

ZeRO的创新

  • 内存优化:ZeRO通过优化内存使用,大幅提高了训练速度,同时增加了可以有效训练的模小。
  • 消除冗余:ZeRO在数据和模型并行训练中消除了内存冗余,同时保持了低通信量和高计算度。
  • 模型规模扩展:ZeRO允许模型大小与设备数量成比例扩展,同时保持高效率。

出色的实验结果

  • 大规模的模型训练:ZeRO实现了在400个GPU上对超过1000亿参数的大模型进行超线性加速训练,实现了15Petaflops的吞吐量。
  • 性能提升:与当时最先进技术相比,模型大小增加了8倍,可实现性能增加10倍。
  • 易用性:ZeRO能够训练高达130亿参数的大型模型(例如,比Megatron GPT的83亿和T5的110亿都大),而无需依赖更难以应用的模型并行技术。
  • 研究成果:研究人员利用ZeRO的系统突破创造了世界上最大的语言模型(170亿参数),并达到了破纪录的准确率。

ZeRO-DP(Data Parallelism)优化技术

ZeRO-DP 是一种分布式数据并行训练方法,通过减少冗余数据来降低每个设备的显存占用,从而允许训练更大的模型。

ZeRO-DP 三个优化阶段(以 Adam优化器,64张GPU为例计算):

  • ZeRO Stage 1 (Pos):4倍显存压缩,将优化器参数(如动量和学习率等)分布到多张卡。通信量与数据并行相同。
  • ZeRO Stage 2 **(Pos+g):8倍显存压缩, 进一步将梯度分布到多张卡 。通信量仍不变。
  • ZeRO Stage 3 **(Pos+g+p):进一步将模型参数分布到多张卡,显存减少与GPU卡的数量(Nd)成线性关系。如,在64个GPU上分割(Nd=64)将实现64倍的显存压缩。通信量会适度增加50%。

请添加图片描述

ZeRO-R(Residual)组件:进一步优化显存开销

ZeRO优化器的ZeRO-R 组件针对以下三个关键方面进行了优化,进一步降低了显存占用并提高训练大型模型的效率:

  • 分区激活检查点(Pa)
    • 原理:模型并行(MP)设计本质上需要复制激活,导致跨模型并行GPU的激活冗余复制。ZeRO通过分区激活并在计算中需要使用激活的前一刻才将其以复制形式具体化,从而消除了这种冗余。
    • 过程:一旦计算了模型的一层的前向传播,输入激活就会在所有模型并行进程中分区,直到在反向传播期间再次需要。此时,ZeRO使用all-gather操作重新生成激活的复制副本。
    • 内存节省:配合激活检查点,只存储分区的激活检查点而非复制副本,可以显著减少激活占用的内存量。对于极大的模型和非常有限的设备内存,这些分区的激活检查点甚至可以卸载到CPU内存,将激活内存开销减少到几乎为零,但需要额外的通信成本。
  • 恒定大小缓冲区 (CB)
    • 策略:ZeRO精心选择临时数据缓冲区的大小,以平衡内存和计算效率。为了提高效率,高性能库(如NVIDIA Apex或Megatron)在应用这些操作前将所有参数融合到单个缓冲区中。但是,融合缓冲区的内存开销与模型大小成正比,对于大型模型可能成为障碍。ZeRO通过使用性能高效的恒定大小融合缓冲区解决了这个问题,使缓冲区大小不依赖于模型大小。
  • 内存碎片整理 (MD)
    • 问题:由于激活检查点和梯度计算,模型训练中出现内存碎片化。在前向传播中,仅存储选定的激活以供反向传播使用,而大多数激活被丢弃,因为它们可以在反向传播期间重新计算,导致短期和长期内存交错,从而引起内存碎片化。内存碎片化在内存充足时通常不是问题,但对于在有限内存下运行的大型模型训练,会导致内存碎片化问题,如OOM(内存不足)和由于内存分配器花费大量时间寻找连续内存片段而导致的效率低下。
    • 优化:ZeRO通过为激活检查点和梯度预分配连续内存块,并在生成时将它们复制到预分配的内中,实时进行内存碎片整理。MD不仅使ZeRO能够以更大的批量大小训练更大的模型,而且还提高了在有限内存下训练的效率。

Microsoft DeepSpeed 是什么呢?

Microsoft DeepSpeed****完整实现了 ZeRO 优化器

Microsoft DeepSpeed 框架简介

DeepSpeed 是一个开源深度学习优化库,旨在提高大模型训练和运行效率,以支持数千亿~万亿参数的超大语言模型。为了提高大模型训练的效率和扩展性, DeepSpeed 不仅实现了ZeRO 论文中的核心技术,还组合了以下多个模块:

  1. **ZeRO(Zero Redundancy Optimizer)😗*ZeRO 是 DeepSpeed 的一个关键组成部分,它通过优化数据并行训练中的显存使用,显著减少了所需的GPU显存。ZeRO 分为几个不同的级别(ZeRO-DP, ZeRO-Offload, ZeRO-Infinity),每个级别都提供了不同程度的优化和显存节省,允许训练更大的模型或在有限的硬件资源上训练模型。
  2. **模型并行(Model Parallelism)😗*DeepSpeed 实现了模型并行技术,如:Tensor切片,以支持大型模型的分布式训练。这些技术允许模型的不同部分在不同的计算设备上并行运行,从而处理那些单个设备无法容纳的大型模型。
  3. 流水线并行(Pipeline Parallelism):通过将模型训练分解为多个阶段,并在不同的设备上并行处理这些阶段,流水线并行技术可以进一步提高训练效率。这种方法特别适合于顺序依赖较弱的训练任务,如某些类型的深度学习模型。
  4. **稀疏注意力(Sparse Attention)😗*DeepSpeed 支持稀疏注意力机制,这有助于降低训练大型模型(尤其是那些基于Transformer的模型)时的计算和内存需求。稀疏性技术可以减少不必要的计算,使模型更加高效。
  5. 显存和带宽优化:DeepSpeed 采用了多种技术来优化显存使用和增加带宽效率,如异步I/O、内存池化和压缩通信等。这些优化有助于提高数据加载和模型训练过程中的效率。

https://www.deepspeed.ai/

ZeRO-Offload 技术使能CPU参与大模型训练

ZeRO-Offload是ZeRO技术的一个扩展,它将部分数据和计算从GPU(或其他主要训练设备)卸载到CPU,从而减轻了GPU的显存负担,并使得在有限GPU资源下训练更大的模型成为可能。核心策略如下:

  • 模型卸载:ZeRO-Offload可以将模型的一部分状态(如优化器状态、梯度或参数)从GPU卸载到CPU内存中,从而减少GPU上的内存需求。。
  • 计算卸载:除了模型卸载之外,ZeRO-Offload还可以将一部分计算任务(如参数更新)卸载到CPU,减轻GPU的计算负担,使得GPU可以专注于更加密集的前向和反向传播计算。同时尽量减少数据在GPU和CPU之间的移动,以及减少CPU上的计算时间,从而在GPU上节省显存
  • 效率和规模:在单个NVIDIA V100 GPU上可以实现40 TFlops的性能,训练超过100亿参数的模型,相比于PyTorch等流行框架在单GPU上能训练的最大模型规模提高了10倍。
  • 灵活性和可扩展性:设计用于在多GPU上扩展,提供接近线性的加速比,最多支持128个GPU

ZeRO-Offload 模型训练数据流图:降低 GPU CPU 交互开销

请添加图片描述

ZeRO-Offload 模型训练流程(单张GPU

请添加图片描述

ZeRO-Offload 模型训练流程(多张GPUs

请添加图片描述

ZeRO-Offload 模型训练流程(延迟更新)

请添加图片描述

ZeRO-Infinity 异构创新支持百万亿模型训练

ZeRO-Infinity也是ZeRO技术的扩展,旨在设计面向百万亿大模型的训练框架。它的主要创新如下:

  • 全面优化: ZeRO-Infinity结合了数据并行、模型并行、流水线并行和ZeRO-Offload的优点,提供了一套全面的显存和计算优化方案 。
  • 高效利用各种存储层 :通过智能地使用GPU显存、CPU内存和NVMe SSD存储, 最大化了训练设备的存储和计算能力。
  • 超大模型规模:可以在当前一代GPU集群上训练高达数十甚至数百万亿参数的模型。在单个NVIDIA DGX-2节点上微调万亿参数模型,降低了超大模型训练和微调的资源需求。
  • 优秀的吞吐量和可扩展想:在512个NVIDIA V100 GPU上保持超过25 petaflops的性能(达到峰值的40%),在不受CPU或NVMe带宽限制的情况下,展示了超线性的可扩展性。
  • 开源友好: Microsoft 在 DeepSpeed 框架中开源实现了ZeRO-Infinity 技术。

随着大型模型规模的快速增长和GPU内存增长的限制,传统的训练方法面临瓶颈。ZeRO-Infinity 面向未来提出了一套创新的训练方法,推动了大模型和复杂任务的研究。

ZeRO-Infinity 异构训练框架

请添加图片描述

分布式模型训练并行化技术对比

大模型分布式训练:数据并行 与 模型并行

请添加图片描述

大模型分布式训练:模型并行 与 流水线并行

流水线并行则是将模型训练的过程(特别是前向和后向传播)分割成多个阶段,并在不同的设备上并行执行这些阶段。流水线并行的关键优势在于它可以减少设备间的空闲时间,因为不同的设备可以同时处理模型的不同部分。

在实践中,这两种技术经常结合使用,以实现在有限硬件资源下训练大规模深度学习模型的目标。例如,一个大型模型可以首先使用模型并行技术在多个设备上分割,然后在这些设备上进一步应用流水线并行技术来优化训练过程的效率。

于它可以减少设备间的空闲时间,因为不同的设备可以同时处理模型的不同部分。

在实践中,这两种技术经常结合使用,以实现在有限硬件资源下训练大规模深度学习模型的目标。例如,一个大型模型可以首先使用模型并行技术在多个设备上分割,然后在这些设备上进一步应用流水线并行技术来优化训练过程的效率。

请添加图片描述

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

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

相关文章

给类设置serialVersionUID

第一步打开idea设置窗口(setting窗口默认快捷键CtrlAltS) 第二步搜索找到Inspections 第三步勾选主窗口中Java->Serializations issues->下的Serializable class without serialVersionUID’项 ,并点击“OK”确认 第四步鼠标选中要加…

DearLicy主题 | 小众化小清新风格的博客主题源码 | Typecho主题模版

DearLicy主题,一款小众化小清新风格的博客主题 主题支持Typecho所支持的所有版本PHP 简约、小众、优雅 安装教程 1.将主题上传至/usr/themes/文件夹下解压 2.后台进行启用 3.访问前台查看效果 源码下载:https://download.csdn.net/download/m0_6604…

热门开源项目ChatTTS: 国内语音技术突破,实现弯道超车

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…

python简单练习案例-石头剪刀布小游戏

🌈所属专栏:【python】 ✨作者主页: Mr.Zwq ✔️个人简介:一个正在努力学技术的Python领域创作者,擅长爬虫,逆向,全栈方向,专注基础和实战分享,欢迎咨询!…

IDEA SpringBoot整合Mybatis(保姆级教程,超详细!!!)

目录 1. 简介 2. 创建SpringBoot项目 3. Maven依赖引入 4. 创建mapper文件夹 5. 数据源和Mybatis配置 6. 工程启动类配置 7. 连接数据库和创建测试表 8. Mapper接口和XML自动生成 9. 接口测试 1. 简介 本博客将详细介绍在IDEA中,如何整合SpringBoot与Myba…

基于SSM+Jsp的在线教育资源管理系统

开发语言:Java框架:ssm技术:JSPJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包…

AI办公自动化:批量根据Excel表格内容制作Word文档

工作任务:Excel表格中有大量文本,根据这些文本自动生成word文档 在chatgpt中输入提示词: 你是一个Python编程专家,写一个Python脚本,具体步骤如下: 读取Excel文件:"F:\AI自媒体内容\AI视…

[leetcode]将二叉搜索树转化为排序的双向链表

. - 力扣(LeetCode) /* // Definition for a Node. class Node { public:int val;Node* left;Node* right;Node() {}Node(int _val) {val _val;left NULL;right NULL;}Node(int _val, Node* _left, Node* _right) {val _val;left _left;right _rig…

目标检测数据集 - 零售食品LOGO检测数据集下载「包含VOC、COCO、YOLO三种格式」

数据集介绍:零售食品 LOGO 检测数据集,真实零售食品 LOGO 高质量商品图片数据,数据集含常见零售食品 LOGO 图片,包括饮料类、酒类、调味品类、膨化饼干类、巧克力类、常见零食类等等。数据集类别丰富,标注标签包含 150…

DeepSORT(目标跟踪算法)中卡尔曼增益的理解

DeepSORT(目标跟踪算法)中卡尔曼增益的理解 flyfish 先用最简单的例子来理解卡尔曼增益 公式 (1) 首先,通过多次测量一个物理量,并使用取平均值的方式来计算其真实值: x ^ k 1 k ( z 1 z 2 ⋯ z k ) \hat{x}_…

python-基础篇-函数-在py中的长相

文章目录 整体长相长相要求 整体长相 怎么自定义函数? 要知道怎么定义函数,就要知道函数的组成部分是怎样的。 def 函数名(参数1,参数2....参数n):函数体return 语句这就是 Python 函数的组成部分。 长相要求 所以自定义函数&#xff0c…

父亲节:我要做爸爸的健康监督员

父亲节将至,总想着能为爸爸做些什么,来表达我们的感激与关爱。在这个特殊的日子里,成为爸爸的健康监督员,用华为 Watch 4 的智慧健康功能,任何时刻都可以关注爸爸的健康状况,放心又安心了。 用一键微体检…

使用 python 将 Markdown 文件转换为 ppt演示文稿

在这篇博客中,我们将展示如何使用 wxPython 创建一个简单的图形用户界面 (GUI),以将 Markdown 文件转换为 PowerPoint 演示文稿。我们将利用 markdown2 模块将 Markdown 转换为 HTML,并使用 python-pptx 模块将 HTML 内容转换为 PowerPoint 幻…

[Vulnhub]Wintermute LFI+SMTP+Screen+Structv2-RCE+Lxc逃逸

概要 靶机 192.168.8.104 信息收集 $ nmap 192.168.8.103 --min-rate 1000 -sC -sV 结果: Starting Nmap 7.92 ( https://nmap.org ) at 2024-06-15 05:54 EDT Nmap scan report for 192.168.8.103 (192.168.8.103) Host is up (0.035s latency). Not shown: 997 closed t…

亚马逊测评自养号与机刷的区别

前言: 在亚马逊运营的领域中,经常有人问:测评自养号就是机刷吗?它们两者有什么区别?做自养号太慢、太需要时间了,如果用机刷的话,会不会简单高效一点? 在这篇文章中,我…

SpringCloud 网关Gateway配置并使用

目录 1 什么是网关? 2 Gateway的使用 2.1 在其pom文件中引入依赖 2.2 然后gateway配置文件中配置信息 2.3 启动网关微服务 3 网关处理流程 4 前端-网关-微服务-微服务间实现信息共享传递 1 什么是网关? 网关:就是网络的关口&#xff…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 游戏表演赛分队(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 📎在线评测链接 游戏表演赛分队(100分) 🌍 评测功能需要订阅专栏后私信联系…

Python | Leetcode Python题解之第148题排序链表

题目: 题解: class Solution:def sortList(self, head: ListNode) -> ListNode:def merge(head1: ListNode, head2: ListNode) -> ListNode:dummyHead ListNode(0)temp, temp1, temp2 dummyHead, head1, head2while temp1 and temp2:if temp1.v…

现代信号处理14_基于蒙特卡洛的信号处理(CSDN_20240616)

Monte Carlo/Simulation方法 在统计上,样本数量是一个很重要的问题,在处理问题(如计算样本均值)的过程中,样本数量越多越好。但是在实际中,样本往往是稀缺的,获取数据就要付出代价。在贝叶斯理论…

SringBoot 如何使用HTTPS请求及Nginx配置Https

SringBoot 如何使用HTTPS请求及Nginx配置Https SringBoot 如何使用HTTPS请求生成证书导入证书及配制创建配置类将pfx转成.key和.pem Nginx 安装SSL依赖./configure 安装依赖编译安装完openssl后报了新错 Nginx配置 SringBoot 如何使用HTTPS请求 生成证书 由于业务数据在传输过…