当前位置: 首页 > news >正文

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

时间

2024613

作者

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 AccelerateFSDP 引入了"混合精度"模式,与DeepSpeed 行为一致,在FP32上进行优化。

因此AccelerateFSDP 有两种模式:

>> 默认低精度模式,参数保持载入精度(如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 后端。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【C++第十三章】Stack、Queue和Priority_Queue
  • Scikit-learn:用于数据挖掘和数据分析的简单而有效的工具,建立在 NumPy, SciPy 和 Matplotlib 上。
  • 【数学分析笔记】第2章第2节数列极限(2)
  • 《深入浅出算法竞赛》-递推与递归(笔记版)
  • Python之函数的使用
  • ChatGLM-6B 主要代码分析 RotaryEmbedding
  • vulnhub靶机 DC-9(渗透测试详解)
  • 顺丰科技25届秋季校园招聘常见问题答疑及校招网申测评笔试题型分析SHL题库Verify测评
  • IO器件性能评估
  • 刷刷前端手写题
  • 理解JavaScript的基本概念和语法:让网页动起来
  • 【笔记】Android 多用户模式和用户类型
  • Codeforces Round 965 (Div. 2)
  • 如何对 GitLab 中文版进行升级?
  • 鸿蒙内核源码分析(进程管理篇) | 谁在管理内核资源?
  • 《剑指offer》分解让复杂问题更简单
  • Angularjs之国际化
  • Laravel5.4 Queues队列学习
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • Python 反序列化安全问题(二)
  • TypeScript实现数据结构(一)栈,队列,链表
  • 对象引论
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 配置 PM2 实现代码自动发布
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 首页查询功能的一次实现过程
  • 想写好前端,先练好内功
  • 学习HTTP相关知识笔记
  • 怎么将电脑中的声音录制成WAV格式
  • ​学习一下,什么是预包装食品?​
  • # MySQL server 层和存储引擎层是怎么交互数据的?
  • #职场发展#其他
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (02)vite环境变量配置
  • (1)(1.13) SiK无线电高级配置(六)
  • (175)FPGA门控时钟技术
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (十一)图像的罗伯特梯度锐化
  • (贪心) LeetCode 45. 跳跃游戏 II
  • (转)h264中avc和flv数据的解析
  • (转)Sublime Text3配置Lua运行环境
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • .NET Core使用NPOI导出复杂,美观的Excel详解
  • .net web项目 调用webService
  • .net 反编译_.net反编译的相关问题
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证
  • .net流程开发平台的一些难点(1)
  • .NET下的多线程编程—1-线程机制概述
  • .net中我喜欢的两种验证码
  • .pop ----remove 删除
  • ::before和::after 常见的用法