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
摘 要 过去使用手工的管理方式对乡镇小区进行管理,造成了管理繁琐、难以维护等问题,如今使用计算机对停车场停车的各项基本信息进行管理,比起手工管理来说既方便又简单,而且具有易于管理、搜索速度快、存储量大等多个优点。将其使…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...
Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...
使用LangGraph和LangSmith构建多智能体人工智能系统
现在,通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战,比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...
mac 安装homebrew (nvm 及git)
mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用: 方法一:使用 Homebrew 安装 Git(推荐) 步骤如下:打开终端(Terminal.app) 1.安装 Homebrew…...
