LLMs之Framework:Hugging Face Accelerate后端框架之FSDP和DeepSpeed的对比与分析
LLMs之Framework:Hugging Face Accelerate后端框架之FSDP和DeepSpeed的对比与分析
导读:该文章阐述了FSDP和DeepSpeed在实现上的差异,Accelerate如何统一它们的行为,并提供指导帮助用户在两种后端之间切换。同时也讨论了低精度优化的内存与收敛权衡。
背景痛点:DeepSpeed和PyTorch FSDP是两种流行的ZeRO Redundancy Optimizer(Zero)算法实现,在模型训练过程中可能会产生不同的结果。DeepSpeed和FSDP处理混合精度的方式不同,导致在相同的学习率下收敛表现有差异。
解决方案:
>> 在Hugging Face Accelerate中同时支持DeepSpeed和FSDP后端。
>> 针对FSDP新增了"mixed-precision"模式,以与DeepSpeed保持一致,同时也保留了原有的低精度模式。
>> 新增概念指南,帮助用户在DeepSpeed和FSDP之间无缝切换。
核心思路步骤:
>> 发现问题根源在于DeepSpeed总是在内部将权重参数升级为FP32精度,而FSDP遵循PyTorch默认行为。
>> DeepSpeed由于内部升精度,会在低精度下出现不收敛的情况。
>> 新增FSDP的mixed-precision模式,在优化器步骤前也将参数升级为FP32。
>> 提供指南,介绍如何在DeepSpeed和FSDP间切换,配置分片策略、权重预取等。
优势:
>> 统一了DeepSpeed和FSDP在Accelerate中的表现,提供了可选的高低精度模式。
>> 指南让用户可以顺畅切换不同后端,充分利用两种方案的优势。
>> 为大规模对齐任务等提供了更好的性能和灵活性选择。
目录
Hugging Face Accelerate后端框架之FSDP和DeepSpeed的对比与分析
相关论文
《A Hugging Face Accelerate Story of Multiple Backends: FSDP and DeepSpeed》的翻译与解读
核心要点梳理:DeepSpeed对比FSDP
Hugging Face Accelerate后端框架之FSDP和DeepSpeed的对比与分析
相关论文
《A Hugging Face Accelerate Story of Multiple Backends: FSDP and DeepSpeed》的翻译与解读
| 地址 | 论文地址:https://huggingface.co/blog/deepspeed-to-fsdp-and-back |
| 时间 | 2024年6月13日 |
| 作者 | Yu Chin Fabian、aldo pareja、Zachary Mueller、Stas Bekman |
| 总结 | 总的来说,该文章阐述了FSDP和DeepSpeed在实现上的差异,Accelerate如何统一它们的行为,并提供指导帮助用户在两种后端之间切换。同时也讨论了低精度优化的内存与收敛权衡。 |
核心要点梳理:DeepSpeed对比FSDP
| 框架差异 | DeepSpeed 和 FSDP 是两种流行的优化器分片(ZeRO算法)实现,各自有不同的精度处理方式。DeepSpeed 默认在 fp32 精度下操作,FSDP 更灵活,可以选择更低的精度。 DeepSpeed 和 PyTorch 中的 FSDP 是社区中两种流行的 ZeRO Redundancy Optimizer (Zero) 算法实现,用于分布式训练大型模型。Hugging Face Accelerate 允同时支持这两个框架之间无缝切换。 |
| 是否可互换 | DeepSpeed 和 FSDP 在损失收敛上有明显差异,造成差异的原因在于精度处理不同。可以通过调整学习率可改善 FSDP 表现。 在实验中,使用 Mistral-7B 模型进行训练时,DeepSpeed 的损失收敛良好,而 FSDP 的损失没有减少,收敛效果较差。通过将学习率根据 GPU 数量进行调整,FSDP 的表现有所改善。 |
| 精度问题 | DeepSpeed 使用 fp32,FSDP 允许低精度操作。 DeepSpeed 内部使用全精度(fp32)进行优化,这可能导致在低精度下不收敛的问题。FSDP 不强制使用全精度,允许在低精度(如BF16)下操作,从而提供了更大的灵活性。 DeepSpeed 内部总是将参数提升到 fp32 进行计算,这在小规模 GPU 环境中可能增加内存消耗。FSDP 则允许使用低精度操作,更适合内存受限的场景,但收敛可能较慢。DeepSpeed 的upcasting方式则收敛更快,但内存开销较大。 |
| 协调改进 | FSDP 在 Accelerate 中增加了自动提升精度功能,支持混合精度和低精度模式。 为了更好协调 DeepSpeed 和 FSDP ,Hugging Face Accelerate 为 FSDP 增加了自动提升精度的功能。FSDP 现在可以在“混合精度”和“低精度”两种模式下操作。 为统一两种后端,Hugging Face Accelerate为FSDP 引入了"混合精度"模式,与DeepSpeed 行为一致,在FP32上进行优化。 因此Accelerate下FSDP 有两种模式: >> 默认低精度模式,参数保持载入精度(如BF16),内存占用少; >> 混合精度模式,参数在FP32上优化,行为与DeepSpeed 一致; |
| 性能对比 | FSDP 和 DeepSpeed 在 IBM Granite 7B 上表现相似,处理速度和效率接近。 使用 IBM Granite 7B 模型进行吞吐量比较,FSDP 和 DeepSpeed 的表现相似。 在四个 A100 GPU 上进行测试,FSDP 和 DeepSpeed 的每秒处理的 token 数量和模型 FLOP 利用率相近。 |
| 结论与思考 | 提供迁移指南,通过配置文件可在两个框架间切换。 Hugging Face Accelerate提供了帮助用户在两个框架之间迁移的概念指南。通过修改 Accelerate 配置文件,可以轻松在 FSDP 和 DeepSpeed 之间切换。 Accelerate提供了新的概念指南,帮助用户在两种后端之间迁移,包括分片策略、模型加载、权重预取等。通过Accelerate的命令行和插件类,可以轻松切换FSDP 和DeepSpeed 后端。 |
相关文章:
LLMs之Framework:Hugging Face Accelerate后端框架之FSDP和DeepSpeed的对比与分析
LLMs之Framework:Hugging Face Accelerate后端框架之FSDP和DeepSpeed的对比与分析 导读:该文章阐述了FSDP和DeepSpeed在实现上的差异,Accelerate如何统一它们的行为,并提供指导帮助用户在两种后端之间切换。同时也讨论了低精度优化…...
HarmonyOS应用开发学习-ArkTs声明式UI描述
ArkTs声明式UI描述 1 创建组件 声明式UI描述 ArKTS以声明方式组合和扩展组件来描述应用程序的UI,同时还提供了基本的属性、事件和子组件配置方法,帮助开发者实现应用交互逻辑 创建组件 根据组件构造方法的不同,创建组件包含有参数和无参…...
Redis20-通信协议
目录 RESP协议 概述 数据类型 模拟Redis客户端 RESP协议 概述 Redis是一个CS架构的软件,通信一般分两步(不包括pipeline和PubSub): 客户端(client)向服务端(server)发送一条命…...
Unity Shader变体优化与故障排除技巧
在 Unity 中编写着色器时,我们可以方便地在一个源文件中包含多个特性、通道和分支逻辑。在构建时,着色器源文件会被编译成着色器程序,这些程序包含一个或多个变体。变体是该着色器在满足一组条件后生成的版本,这通常会导致线性执行…...
数据结构——时间复杂度和空间复杂度
目录 时间复杂度 什么是时间复杂度 常见时间复杂度类型 如何计算时间复杂度 空间复杂度 什么是空间复杂度 常见的空间复杂度类型 如何计算空间复杂度 时间复杂度和空间复杂度是评估算法性能的两个重要指标。 时间复杂度 什么是时间复杂度 时间复杂度描述了算法执行所需…...
(echarts) 饼图设置滚动图例
(echarts) 饼图设置滚动图例 效果: 代码: // 图例 legend: {type: scroll,orient: vertical,right: 10,top: 20,bottom: 20,data: data.legendData},参考:官网-可滚动的图例 https://echarts.apache.org/examples/zh/editor.html?cpie-leg…...
Java spring SSM框架--mybatis
一、介绍 Spring 框架是一个资源整合的框架,可以整合一切可以整合的资源(Spring 自身和第三方),是一个庞大的生态,包含很多子框架:Spring Framework、Spring Boot、Spring Data、Spring Cloud…… 其中Spr…...
Python知识点:如何使用Arduino与Python进行物联网项目
Arduino和Python是物联网(IoT)项目中常用的两种技术。Arduino是一个开源的硬件平台,而Python是一种高级编程语言,它们可以结合使用来创建各种智能设备和系统。以下是使用Arduino和Python进行物联网项目的一般步骤: 确定项目需求: …...
论文复现_从 CONAN 中收集 TPL 数据集
1. 概述 CONAN:Conan是一个用于C项目的开源包管理工具。 它的主要目标是简化C项目的依赖关系管理过程,使开发人员能够更轻松地集成、构建和分享C库。 其中有一些比较独特的功能,例如:版本管理、第三方库管理等。 TPL 数据集&…...
使用Docker将Java项目打包并部署到CentOS服务器的详细教程。
当然,让我们将上述步骤进一步细化,以便更好地理解整个过程。 前提条件 一个Java项目CentOS服务器,并且已安装DockerJava项目可以正常在本地运行具有服务器访问权限 ———————————————————————————————————…...
嘉立创eda布线宽度
https://prodocs.lceda.cn/cn/pcb/route-routing-width/#%E5%B8%83%E7%BA%BF%E5%AE%BD%E5%BA%A6...
硬件面试经典 100 题(31~50 题)
31、多级放大电路的级间耦合方式有哪几种?哪种耦合方式的电路零点偏移最严重?哪种耦合方式可以实现阻抗变换? 有三种耦合方式:直接耦合、阻容耦合、变压器耦合。直接耦合的电路零点漂移最严重,变压器耦合的电路可以实现…...
5G:下一代无线通信技术的全面解析
随着科技的不断进步,移动通信技术也在飞速发展。从2G到4G,我们见证了无线网络的巨大变革,而现在,5G已经悄然来临。作为下一代无线通信技术,5G不仅将带来更快的速度和更低的延迟,还将开启全新的应用场景和商…...
关于refresh_token
前文介绍过jwt的一般使用场景,用户登录成功后获得jwt,其中包含用户相关信息,主要是在前端要用到的属性(比如姓名、应用角色[这个前端后都用得着]等)、在后端要用到的属性(比如登录IP、终端唯一标识…...
Linux网络:基于OS的网络架构
Linux网络:OS视角下的网络架构 网络分层模型OSI 七层模型TCP/IP 五层模型 协议操作系统与网络网络相关命令ifconfigpingnetstat 本博客将基于操作系统,讲解计算机网络的设计理念,帮助大家理解操作系统与网络之间的关系。 网络分层模型 网络…...
UEC++学习(十六)变量添加中文注释、ui设置中文文本
(一)变量添加中文注释 在C 项目中创建变量,并在蓝图中显示变量的英文名同时附带中文注释,可以使用UPROPERTY 的 ToolTip 元数据属性来实现 UPROPERTY(EditAnywhere, meta (ToolTip "弹夹最大容量"))int32 MagCapacit…...
Redis延迟双删
1、何为延时双删 Redis延迟双删是一种在数据更新操作中确保缓存与数据库数据一致性的策略,通过两次缓存删除操作间隔一段延时来减少数据不一致的问题。 在并发环境下,多个请求同时对同一数据进行读写时,如果没有妥善处理,很容易…...
WO Mic 手机变身免费麦克风
目录 一、主要特点 1.支持多种连接方式 2.应用广泛 3.低延迟 4.简易配置 5.自动连接 6.音频格式 二、软件下载 三、软件安装 四、系统连接 五、测试 直播的时候,上课的时候,会议的时候……突然发现没有麦克风或者电脑麦克风有故障,这可怎么办呢?今天给大家介绍一…...
MQ死信对列
面试题:你们是如何保证消息不丢失的? 1、什么是死信 死信就是消息在特定场景下的一种表现形式,这些场景包括: 1. 消息被拒绝访问,即消费者返回 basicNack 的信号时 或者拒绝basicReject 2. 消费者发生异常࿰…...
springboot乡镇小区管理系统-计算机毕业设计源码73685
摘 要 过去使用手工的管理方式对乡镇小区进行管理,造成了管理繁琐、难以维护等问题,如今使用计算机对停车场停车的各项基本信息进行管理,比起手工管理来说既方便又简单,而且具有易于管理、搜索速度快、存储量大等多个优点。将其使…...
C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...
