多GPU训练大语言模型,DDP, ZeRO 和 FSDP

在某些时候,我们可能需要将模型训练扩展到单个 GPU 之外。当模型变得太大无法适应单个 GPU 时,需要使用多 GPU 计算策略。但即使模型适合单个 GPU,使用多个 GPU 来加速训练也是有好处的。即使您正在处理一个小模型,了解如何在多个 GPU 上分配计算也是有用的。

让我们讨论如何以一种高效的方式在多个 GPU 上进行扩展。您首先要考虑的情况是您的模型仍然适合单个 GPU。扩展模型训练的第一步是将大型数据集分布到多个 GPU 上,并并行处理这些数据批次。一种流行的实现这种模型复制技术的方法是 PyTorch 的分布式数据并行(Distributed Data Parallel,简称 DDP)。DDP 将您的模型复制到每个 GPU 上,并将数据批次并行发送到每个 GPU。每个数据集并行处理,然后在同步步骤中结合每个 GPU 的结果,从而更新每个 GPU 上的模型,使其在所有芯片上始终保持一致。这种实现允许在所有 GPU 上进行并行计算,从而加快训练速度。

请注意,DDP 要求您的模型权重以及所有其他参数、梯度和优化器状态都能适应单个 GPU 的内存。如果您的模型太大,无法做到这一点,您应该研究另一种技术,称为模型分片(model sharding)。PyTorch 中一种流行的模型分片实现是完全分片数据并行(Fully Sharded Data Parallel,简称 FSDP)。FSDP 的动机来源于微软研究人员在 2019 年发表的一篇论文,该论文提出了一种名为 ZeRO 的技术。ZeRO 代表零冗余优化器(Zero Redundancy Optimizer),其目标是通过在 GPU 上分布或分片模型状态来优化内存,做到零数据重叠。这使您能够在模型无法适应单个芯片内存时,将模型训练扩展到多个 GPU。

在回到 FSDP 之前,让我们快速了解一下 ZeRO 的工作原理。训练 LLMs 所需的所有内存组件,最大的内存需求是优化器状态,它占用了权重的两倍空间,其次是权重本身和梯度。之前展示的模型复制策略的一个限制是,您需要在每个 GPU 上保留完整的模型副本,这会导致冗余的内存消耗。您在每个 GPU 上存储了相同的数字。而 ZeRO 通过在 GPU 之间分布(也称为分片)模型参数、梯度和优化器状态,而不是复制它们,消除了这种冗余。同时,同步模型状态的通信开销接近前面讨论的 DDP。ZeRO 提供了三个优化阶段。ZeRO Stage 1 仅在 GPU 上分片优化器状态,这可以将内存占用减少最多四倍(分片的优化器状态包括Adam优化器(2个状态),激活和临时内存)。ZeRO Stage 2 还在芯片之间分片梯度。当与 Stage 1 一起应用时,这可以将内存占用减少最多八倍。最后,ZeRO Stage 3 在 GPU 之间分片所有组件,包括模型参数。当与 Stage 1 和 Stage 2 一起应用时,内存减少与 GPU 数量成线性关系。例如,在 64 个 GPU 之间分片可以将内存减少 64 倍。

让我们将这个概念应用于 DDP 的可视化,并用模型参数、梯度和优化器状态的内存表示替换 LLM。当您使用 FSDP 时,您会如同在 DDP 中看到的那样,在多个 GPU 之间分布数据。但在 FSDP 中,您还会使用 ZeRO 论文中指定的策略,在 GPU 节点之间分布或分片模型参数、梯度和优化器状态。使用这种策略,您现在可以处理那些过大而无法装入单个芯片的模型。

与 DDP 不同,每个 GPU 都具有处理每个数据批次所需的所有模型状态,FSDP 需要在前向和后向传递之前从所有 GPU 收集这些数据。每个 GPU 根据需求从其他 GPU 请求数据,以在操作期间将分片数据转化为未分片数据。操作后,您会将非本地的未分片数据释放回其他 GPU,恢复为原始分片数据。您也可以选择在后向传递期间保留这些数据以供将来操作使用。请注意,这再次需要更多的 GPU 内存,这是典型的性能与内存利用率之间的权衡决策。在后向传递的最后一步,FSDP 同步 GPU 之间的梯度,方式与 DDP 相同。通过 FSDP 描述的模型分片,您可以减少整体 GPU 内存利用率。可选地,您可以指定 FSDP 将部分训练计算卸载到 CPU,以进一步减少 GPU 内存利用率。为了在性能和内存利用率之间进行权衡,您可以使用 FSDP 的分片因子配置分片水平。分片因子为 1 基本上移除了分片,并完全复制模型,类似于 DDP。如果您将分片因子设置为最大可用 GPU 数,则启用完全分片。这具有最大的内存节约,但增加了 GPU 之间的通信量。任何介于两者之间的分片因子都启用部分分片。

让我们看看 FSDP 与 DDP 在每个 GPU 的每秒万亿次浮点运算(teraflops)中的性能比较。使用最多 512 个 NVIDIA V100 GPU(每个 80 GB 内存)进行这些测试。请注意,一个 teraflop 对应于每秒一万亿次浮点运算。第一个图显示了不同尺寸 T5 模型的 FSDP 性能。您可以看到 FSDP 完全分片(蓝色)、部分分片(橙色)和完全复制(绿色)的不同性能数据。供参考,DDP 性能显示为红色。对于第一个 611 百万参数和 2.28 十亿参数的 T5 模型,FSDP 和 DDP 的性能相似。现在,如果您选择超过 2.28 十亿参数的模型,例如 11.3 十亿参数的 T5,DDP 会遇到内存不足错误。另一方面,FSDP 可以轻松处理这种大小的模型,并在将模型精度降低到 16 位时实现更高的 teraflops。第二个图显示了当增加 GPU 数量从 8 到 512 时,每个 GPU 的 teraflops 减少了 7%,其中使用批次大小为 16(橙色)和批次大小为 8(蓝色)绘制了 11 十亿的 T5 模型。随着模型大小的增加并在越来越多的 GPU 之间分布,芯片之间通信量的增加开始影响性能,减慢计算速度。总而言之,这表明您可以将 FSDP 用于小型和大型模型,并无缝地在多个 GPU 之间扩展模型训练。

参考资料:
Coursera 课程 Generative AI with Large Language Models

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

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

相关文章

在浏览器中运行 Puppeteer:解锁新能力

Puppeteer,这个强大的浏览器自动化工具,通常在Node.js环境中运行。但你有没有想过,在浏览器本身中运行Puppeteer会是什么样子?这不仅能让我们利用Puppeteer的功能完成更多任务,还能避开Node.js特定的限制。 支持的功…

【Canvas与桌面】文山甲密铺桌面壁纸 1920*1080

【成图】 不加蒙版的部分截图&#xff1a; 加上蒙版的桌面壁纸图&#xff1a; 不加蒙版的桌面壁纸图&#xff1a; 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8&qu…

ts:对象数组的简单使用

ts中对象数组的简单使用 一、主要内容说明二、例子1、源码12、源码1运行效果 三、结语四、定位日期 一、主要内容说明 平常ts创建数组的格式如下&#xff1a; let array:string[]["元素1","元素2","元素3","元素3","元素4"…

Java语言-异常

目录 1.异常的概念与体系结构 1.1 异常的概念 1.2 异常的体系结构 1.3 异常的分类 1.3.1 编译时异常(受查异常) 1.3.2 运行时异常(非受查异常) 2.异常的处理 2.1 防御式编程 2.1.1 LBYL 2.1.2 EAFP 2.2 异常的抛出 2.3 异常的捕获 2.3.1 异常声明throws 2.3.2 …

Spring IoC DI

博主主页: 码农派大星. 数据结构专栏:Java数据结构 数据库专栏:MySQL数据库 JavaEE专栏:JavaEE 关注博主带你了解更多数据结构知识 目录 1. 应用分层 1.1 如何分层: 1.2 MVC与三层架构区别联系 2. Spring 3.IoC & DI⼊⻔ 3.1 什么是IoC&#xff1f; 3.2 DI 介绍 …

ctfshow——web(持续更新)

文章目录 1、web签到题——base64编码特征2、web2——登录框测试&sqlmap使用3、web3——php伪协议 1、web签到题——base64编码特征 查看源代码&#xff1a; base64编码特征&#xff1a;大小写数字&#xff0c;偶尔最后几位是。 2、web2——登录框测试&sqlmap使用 …

合约门合同全生命周期管理系统:企业智能合同管理的新时代

合约门合同全生命周期管理系统&#xff1a;企业智能合同管理的新时代 1. 引言 随着现代企业的快速发展&#xff0c;合同管理的复杂性日益增加。无论是采购合同、销售合同还是合作协议&#xff0c;合同管理已成为企业运营中至关重要的一环。传统的手工合同管理方式往往效率低下…

解读AVL树:平衡二叉搜索树的奥秘

✨✨小新课堂开课了&#xff0c;欢迎欢迎~✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;C&#xff1a;由浅入深篇 小新的主页&#xff1a;编程版小新-CSDN博客 前言&#xff1a; 前面我们已经介绍了二叉搜…

交易逆序对的总数 ---- 分治-归并

题目链接 题目: 分析: 解法一: 暴力解法, 遍历所有的数对, 找到逆序对, 需要两重for循环, 一定会超时解法二: 归并排序的思想如果我们将数组分成两半, 我们在每一半中各找一个数字, 判断是否为逆序对, 再根据归并的思想, 再将一半数组分半, 判断是否为逆序对, 直到数组只有一…

【论文笔记】xGen-MM (BLIP-3): A Family of Open Large Multimodal Models

&#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&#xff0c;为生民立命&#xff0c;为往圣继绝学&#xff0c;为万世开太平。 基本信息 标题: xGen-MM (BLIP-3): A Fami…

网络编程_day3

#1024程序员节 #三次握手四次挥手#四次挥手#udp#recvfrom#sendto#服务器模型#客户端模型#Linux IO模型#阻塞式IO#非阻塞IO#设置非阻塞的方式 目录 【0】复习 【1】三次握手四次挥手 四次挥手 四次挥手既可以由客户端发起&#xff0c;也可以由服务器发起 【2】udp 1. 通信流程 2…

实验:使用Oxygen发布大型手册到Word格式

此前&#xff0c;我曾发表过一篇文章《结构化文档发布的故事和性能调优》&#xff0c;文中讨论了在将大型DITA手册转换为PDF格式时可能遇到的性能挑战及相应的优化策略。 近日&#xff0c;有朋友咨询&#xff0c;若将同样的大型手册输出为MS Word格式&#xff0c;是否也会面临…

Linux复习-C++

参考博客&#xff1a; https://blog.csdn.net/qq_45254369/article/details/126023482?ops_request_misc%257B%2522request%255Fid%2522%253A%252277629891-A0F3-4EFC-B1AC-410093596085%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&req…

[JAVAEE] 多线程的案例(一)-单例模式

目录 一. 单例模式 二. 单例模式的使用时机 三. 单例模式的关键代码 四. 单例模式的几种实现方式 4.1 饿汉方式(急) 4.2 懒汉模式(缓) a. 解决原子性的问题 b. 解决程序运行效率低下的问题 c. 解决指令重排序的问题(其次是为了解决内存可见性的问题) 五. 总结 一. …

HCIP-HarmonyOS Application Developer 习题(十七)

&#xff08;判断&#xff09;1、对于用户创建的一些临时卡片在遇到卡片服务框架死亡重启&#xff0c;此时临时卡片数据在卡片管理服务中已经删除&#xff0c;且对应的卡片ID不会通知到提供方&#xff0c;所以卡片使用方需要自己负责清理长时间未刚除的临时卡片数据。 答案&…

QT:MaintenanceTool 模块安装工具

QT的MaintenanceTool 工具对已安装的 Qt 进行卸载、修复等其他操作时提示At least one valid and enabled repository required for this action to succeed 解决方式&#xff1a;在设置中添加一个临时的仓库 https://mirrors.tuna.tsinghua.edu.cn/qt/online/qtsdkrepositor…

6,000 个网站上的假 WordPress 插件提示用户安装恶意软件

黑客使用窃取的凭证感染 WordPress 网站&#xff0c;并向其发送虚假插件&#xff0c;通过虚假的浏览器更新提示向最终用户发送恶意软件和信息窃取程序。 该恶意活动基于ClickFix假浏览器更新恶意软件的新变种&#xff0c;自 2024 年 6 月以来已使用假 WordPress 插件感染了超过…

放大器和基本运放电路的公式推导

放大器和基本运放电路的公式推导 放大器全家谱运放的渊源和数学分析基本运放电路的公式推导预备知识基本特性跟随器特性比较器特性 基本运放电路反相放大器&#xff08;反比例运算放大器&#xff09;同相放大器&#xff08;正比例运算放大器&#xff09;反相加法器同相加法器减…

Python条形图 | 指标(特征)重要性图的绘制

在数据科学和机器学习的工作流程中&#xff0c;特征选择是一个关键步骤。通过评估每个特征对模型预测能力的影响&#xff0c;我们可以选择最有意义的特征&#xff08;指标&#xff09;&#xff0c;从而提高模型的性能并减少过拟合。本文将介绍如何使用 Python 的 Seaborn 和 Ma…

go 使用fyne实现桌面程序的计算器例子

使用Fyne工具包构建跨平台应用是非常简单的&#xff0c;在此之前我们需要做一些准备功能做&#xff0c;比如安装一些gcc基础图形依赖库&#xff0c;还有go语言本身的运行开发环境都是必要的。 在此之前我们希望你是go语言的已入门用户&#xff0c;掌握go的协程&#xff0c;管道…