ZeRO, ZeRO-Offload, ZeRO-Infinite, ZeRO++

news/2025/2/13 14:38:06/文章来源:https://www.cnblogs.com/MTandHJ/p/18713109

目录
  • Motivation
  • ZeRO
  • ZeRO-Offload
  • ZeRO-Infinite
  • ZeRO++
  • 代码

Rajbhandari S., Rasley J., Ruwase O. and He Y. ZeRO: Memory optimizations toward training trillion parameter models. InSC, 2020.

Ren J., Rajbhandari S., Aminabadi R. Y., Ruwase O., Yang S., Zhang M., Li D., He Y. ZeRO-Offload: Democratizing billion-scale model training. USENIX ATC, 2021.

Rajbhandari S., Ruwase O., Rasley J., Smith S. and He Y. ZeRO-Infinity: Breaking the gpu memory wall for extreme scale deep learning. InSC, 2021.

Wang G., Qin H., Jacobs S. A., Holmes C., Rajbhandari S., Ruwase O., Yan F., Yang L., He Y. ZeRO++: Extremely efficient collective communication for giant model training. ICLR, 2024.

整理一下 DeepSpeed 的 ZeRO 系列.

Motivation

  • 虽然这些方法各有不同, 但是 motivation 都是尽可能降低训练模型的显存开销, 同时尽可能保持运算效率.

ZeRO

  • 对于一个 1.5 B 的 GPT2, 采用 FP-16 的混合精度训练, 需要:

    1. 本身的 32-bit weights 需要 6 GB 的显存;
    2. 16-bit 的模型需要 3 GB 的显存;
    3. 16-bit 的梯度需要 3 GB 的显存;
    4. 32-bit 的 Adam 需要 12 GB 的显存.
  • 故, 不考虑中间的激活值, 就需要 24 GB 的显存, 考虑到额外的激活值, 就需要更多.

  • ZeRO-1: 同时, 我们也注意到, 优化器 Adam 的状态缓存的消耗是非常惊人的, 所以 ZeRO-1 的策略是把 Adam 的优化器缓存均分到 GPUs 上.

  • ZeRO-2: 除了优化器的缓存, 把梯度也均分到 GPUs;

  • ZeRO-3: 则是进一步将模型参数也均分到 GPUs 上.

  • 当然了, 上面的处理会带来不菲的 communication 的消耗.

ZeRO-Offload

  • ZeRO-1/2/3 的显存消耗降低非常依赖较多的 GPUs, 所以对于只有较少的 GPUs (比如 single GPU) 的情形效果就不是那么好了.

  • ZeRO-Offload 主要就是为了解决这个问题, 他主要是讲优化器的缓存 offload 到 CPU 中. 但是, CPU-GPU 的 communication 代价是不容忽视的, 所以和一般的 CPU-offload 不同的是, 模型的更新是在 CPU 中进行, 依赖一个优化过的 CPU-Adam 优化器:

  • 此外, delayed parameter update 可以用来进一步降低 communication 代价: 它的核心是在 forward/backward 期间, 在 CPU 中更新一份模型参数, 然后新的梯度来后, 把新的模型参数复制到 GPU 中. 所以模型更新的时间可以被 overlap 掉. 不过, 容易发现, 这个时候, 其实我们不是实时更新模型, 还是延迟了一步.

  • 为了降低延迟更新的影响, 作者会在一开始的 iterations 保持正常, 后续才延迟更新.

ZeRO-Infinite

  • ZeRO-Offload 沟通了 GPU, CPU (内存), ZeRO-Infinite 更进一步, 把 NVMe 也加了进来, 所以理论上可以训练任意大的模型.

  • 显然, 此时的 communication 消耗就更大了 (多了 GPU-CPU-NVMe).

  • 作者分析了论证了各个带宽的瓶颈所在, 并提出了一些分割手段.

ZeRO++

  • 意识到之前方法所存在的 communication 消耗的问题, ZeRO++ 主要是通过一些量化方法, 在数据迁移前后进行量化和反量化, 以降低通信开销.

代码

[DeepSpeed]

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

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

相关文章

IPD流程如何推动企业数字化转型

企业数字化转型已成为当下众多企业寻求突破与发展的关键战略方向。在这一进程中,集成产品开发(IPD)流程发挥着不可忽视的重要作用。IPD流程并非简单的产品开发流程,它涵盖了从产品战略规划、概念设计、详细设计、开发、测试到上市等一系列环节,是一个系统性的、端到端的流…

清华大学:《DeepSeek从入门到精通(第二版)》- 《DeepSeek赋能职场应用--从提示语技巧到多场景应用》 - PDF免费下载

全网疯传的《DeepSeek从入门到精通》的第二弹:《DeepSeek如何赋能职场应用:从提示语技巧到多场景应用》。下载地址:https://pdfs.top/book/DeepSeek如何赋能职场应用:从提示语技巧到多场景应用.html。《DeepSeek赋能职场应用--从提示语技巧到多场景应用》 - PDF免费下载 全…

万灵齐聚,山海相遇,万灵山海手游详细图文架设教程

本文讲解万灵山海手游架设教程,万灵齐聚,山海相遇!开启你的奇幻冒险之旅吧,希望你也喜欢这款游戏~前言 这次给大家带来的是准备了好久的精品仙侠神话回合制手游,万灵山海之万物归元,安卓苹果双端,绝对是难得的精品,游戏精美绝伦,基本无 BUG,快来试试吧~本文讲解万灵山…

组件快速查找工具思路分享

前言 在日常开发中,我们经常需要查找某个组件的字段被使用的情况。如果是代码引用,借助编译器可以轻松定位所有引用。但如果组件是直接挂载在GameObject上,就难以追踪其使用情况。为了解决这个问题,我开发了一个小工具,方便快速查找资源对组件的引用详情。 这个工具目前支…

《刚刚问世》系列初窥篇-Java+Playwright自动化测试-14- iframe操作-下篇(详细教程)

1.简介 通过前边两篇的学习,想必大家已经对iframe有了一定的认识和了解,是不是感觉和Python语言中的差不了多少,大同小异,最多就是不同开发语言的一些语法差异。今天这一篇主要是对iframe做一个总结,主要从iframe的操作(输入框、点击等等)和定位两个方面进行总结。 2.if…

谷歌地图案例|利用 Google 地图平台提供美味又环保的餐食

Frichti是法国食品配送初创公司,提供健康美味实惠餐食,并注重环保。利用Google地图和大数据工具优化配送和减少浪费,实现30分钟内送达,提升顾客满意度和回头率。Frichti 的使命是在 30 分钟内送达健康、美味、实惠的餐食,并已筹集了 4600 多万美元的资金。其环保理念包括尽…

P3919 【模板】可持久化线段树 1(可持久化数组)(主席树)

这道题要注意空间不能开太小,还有我第一次是build函数忘写return了,我很奇怪,结构体数组开小后,有一个报错和tle,不知道tle是怎么来的#include<iostream> #include<set> #include<map> #include<algorithm> #include<vector> #include<c…

集装箱码头堆场计划智能优化系统

经纬恒润研发的堆场计划智能优化系统,以既有的码头操作系统为基础,建立与码头操作系统的数据接口,读取堆场结构、堆存状态、靠港船舶等信息,针对卸船、装船、集港、疏港等作业场景,围绕港口关注的箱区平衡、规避作业冲突、降低翻倒率、降低作业成本等核心指标,综合考虑各…

uniapp插件uni-upgrade-center-app升级在vue3中报错

记录使用npx @dcloudio/uvm@latest更新uniapp cli版本vite-plugin-uni报错的问题 在uniapp的vue3中,引入升级路径后提示:pnpm i @dcloudio/uni-uts-v1@3.0.0-3061420221215001 -D;用vscode终端安装后打包过程中一直提示cli升级,升级后安装对应的uts依赖包,真机模拟报错,提…

009 自定义事件组件交互

自定义事件可以在组件中反向传递数据,PROP可以将数据从父组件传递到子组件,那么反向如何操作呢,就可以利用自定义事件实现$emit<template><h3>单文件组件</h3><button @click="sendHandle">发送数据</button></teplate><s…

文本编辑器bowpad修改文件编码

bowpad下方有显示当前编码,此处为codepage 1252在【工具栏 - 其他】处可修改编码,如图“载入为” - 以xx编码重新打开本文件 “转换到” - 将当前文件转换为xx编码支持的编码挺多的

分享一款免费的微信群活码、QQ群活码平台、短链平台-畅联活码

今天发现了一款免费的微信群活码、QQ群活码平台、短链平台-畅联活码,在这里分享给大家。平台网址是ewm.kzrcw.com,只需要简单注册后既可以使用了。操作简单。平台源码已经公开,下载地址http://www.80cxy.com/Blog/ResourceView?arId=202502131143553051Oa499Z。 1、什么是微…