【NLP高频面题 - 分布式训练】ZeRO1、ZeRO2、ZeRO3分别做了哪些优化?

【NLP高频面题 - 分布式训练】ZeRO1、ZeRO2、ZeRO3分别做了哪些优化?

重要性:★★


NLP Github 项目:

  • NLP 项目实践:fasterai/nlp-project-practice

    介绍:该仓库围绕着 NLP 任务模型的设计、训练、优化、部署和应用,分享大模型算法工程师的日常工作和实战经验

  • AI 藏经阁:https://gitee.com/fasterai/ai-e-book

    介绍:该仓库主要分享了数百本 AI 领域电子书

  • AI 算法面经:fasterai/nlp-interview-handbook#面经

    介绍:该仓库一网打尽互联网大厂NLP算法面经,算法求职必备神器

  • NLP 剑指Offer:https://gitee.com/fasterai/nlp-interview-handbook

    介绍:该仓库汇总了 NLP 算法工程师高频面题


ZeRO被分为了三个级别:

  1. ZeRO1:对优化器状态进行拆分。显存消耗减少 4 倍,通信量与数据并行相同。
  2. ZeRO2:在ZeRO1的基础上,对梯度进行拆分。显存消耗减少 8 倍,通信量与数据并行相同。
  3. ZeRO3:在ZeRO2的基础上,对模型参数进行拆分。模型占用的显存被平均分配到每个 GPU 中,显存消耗量与数据并行的并行度成线性反比关系,但通信量会有些许增加。

论文中给出了三个阶段的显存消耗分布情况:

ZeRO1

模型训练中,正向传播和反向传播并不会用到优化器状态,只有在梯度更新的时候才会使用梯度和优化器状态计算新参数。因此每个进程单独使用一段优化器状态,对各自进程的参数更新完之后,再把各个进程的模型参数合并形成完整的模型。

假设我们有 𝑁𝑑 个并行的进程,ZeRO-1 会将完整优化器的状态等分成 𝑁𝑑 份并储存在各个进程中。当反向传播完成之后,每个进程的优化器会对自己储存的优化器状态(包括Momentum、Variance 与 FP32 Master Parameters)进行计算与更新。更新过后的Partitioned FP32 Master Parameters会通过All-gather传回到各个进程中。完成一次完整的参数更新。

通过 ZeRO-1 对优化器状态的分段化储存,7.5B 参数量的模型内存占用将由原始数据并行下的 120GB 缩减到 31.4GB

ZeRO2

第二阶段中对梯度进行了拆分,在一个Layer的梯度都被计算出来后: 梯度通过All-reduce进行聚合, 聚合后的梯度只会被某一个进程用来更新参数,因此其它进程上的这段梯度不再被需要,可以立马释放掉。

通过 ZeRO-2 对梯度和优化器状态的分段化储存,7.5B 参数量的模型内存占用将由 ZeRO-1 中 31.4GB 进一步下降到 16.6GB

ZeRO3

第三阶段就是对模型参数进行分割。在ZeRO3中,模型的每一层都被切片,每个进程存储权重张量的一部分。在前向和后向传播过程中(每个进程仍然看到不同的微批次数据),不同的进程交换它们所拥有的部分(按需进行参数通信),并计算激活函数和梯度。

初始化的时候。ZeRO3将一个模型中每个子层中的参数分片放到不同进程中,训练过程中,每个进程进行正常的正向/反向传播,然后通过All-gather进行汇总,构建成完整的模型。


NLP 大模型高频面题汇总

NLP基础篇
BERT 模型面
LLMs 微调面

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

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

相关文章

C#基础控制台程序

11.有一个54的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号。 12.从键盘输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。 13.输入一个数,判断它是奇数还是偶数,如果…

三六零[601360]行情数据接口

1、三六零:实时行情 Restful API # 测试接口:可以复制到浏览器打开 https://tsanghi.com/api/fin/stock/XSHG/realtime?tokendemo&ticker601360获取股票实时行情(开、高、低、收、量)。 请求方式:GET。 Python示例…

SSM--SpringMVC复习(二)

请求 URL匹配: RequestMapping RequestMapping 负责将请求映射到对应的控制器方法上。 RequestMapping 注解可用于类或方法上。用于类上,表示类中的所有响应请求的方法都以该地址作为父路径。 在整个 Web 项目中,RequestMapping 映射的请求…

Pydantic 数据验证

Pydantic 验证 from datetime import datetime from typing import List, Optional from pydantic import BaseModel, EmailStr, field_validator, ValidationErrordef check_name(v: str) -> str:"""Validator to be used throughout"""if …

LangChain——管道提示词 缓存

管道提示词 管道提示词可以将多个提示组合在一起。当我们想要使用部分提示时,这会很有用。这里可以通过PipelinePrompt来完成。 PipelinePrompt由两部分组成: 最终提示:返回的最终提示;管道提示:元组列表&#xff0c…

eclipse-git项目提示NO-HEAD

1、出现该问题的过程 本人在用eclipse拉取git代码,刚拉取完,可能还没来得及跟本地的分支合并,电脑就卡动了。无奈只能重启电脑,打开eclipse,maven项目后面就出现了xxx NO-HEAD的提示。 2、问题解决 根据错误提示&am…

使用OpenSSL创建CA,并基于CA创建证书

生成CA证书 生成CA证书的私钥 openssl genrsa -out ca.key 4096生成CA证书 openssl req -x509 -new -nodes -sha512 -days 3650 \-subj "/CCN/STBeijing/LBeijing/Oexample/OUPersonal/CNMyPersonal Root CA" \-key ca.key \-out ca.crt生成Server证书 证书通常包…

WPF异步UI交互功能的实现方法

前面的文章我们提及过,异步UI的基础实现。基本思路主要是开启新的UI线程,并通过VisualTarget将UI线程上的Visual(即RootVisual)连接到主线程上的UI上即可渲染显示。 但是,之前的实现访问是没有交互能力的,视觉树上的UI并不能实现…

Cross-Site Scripting(XSS)攻击

简介 XSS(跨站脚本攻击)是一种常见的 Web 安全漏洞,攻击者通过在目标网站的输入框中注入恶意脚本,当其他用户(如管理员)查看包含恶意脚本的页面时,脚本会在他们的浏览器中执行。XSS 攻击可以分…

linux mount nfs开机自动挂载远程目录

要在Linux系统中实现开机自动挂载NFS共享目录,你需要编辑/etc/fstab文件。以下是具体步骤和示例: 确保你的系统已经安装了NFS客户端。如果没有安装,可以使用以下命令安装: sudo apt-install nfs-common 编辑/etc/fstab文件&#…

基于学习的实例匹配方法

文章目录 基于学习的实例匹配方法基于学习的实例匹配方法 大规模知识图谱的实例匹配可视为机器学习的一个二分类问题,因此可以利用知识图谱中丰富的网络结构信息和实例相关的信息来训练一个分类模型,从而实现实例匹配。同时,由于实例的规模较大,在分类之前需要对实例进行分…

uniapp中使用uni-forms实现表单管理,验证表单

前言 uni-forms 是一个用于表单管理的组件。它提供了一种简化和统一的方式来处理表单数据,包括表单验证、字段绑定和提交逻辑等。使用 uni-forms可以方便地创建各种类型的表单,支持数据双向绑定,可以与其他组件及API进行良好的集成。开发者可…

PHP 8.4 重磅发布了

文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons:JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram,自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 ? 5 IDEA必装的插件&…

android 11添加切换分屏功能

引言 自Android 7开始官方就支持分屏显示,但没有切换分屏的功能,即交换上下屏幕。直到Android 13开始才支持切换分屏,操作方式是:分屏模式下双击中间分割线就会交换上下屏位置。本文的目的就是在Android 11上实现切换分屏的功能。 下图是Android13切换分屏演示 切换分屏…

springboot项目使用maven打包,第三方jar问题

springboot项目使用maven package打包为可执行jar后,第三方jar会被打包进去吗? 答案是肯定的。做了实验如下: 第三方jar的项目结构及jar包结构如下:(该第三方jar采用的是maven工程,打包为普通jar&#xf…

从零开始:NetBox 4.1 Docker 部署和升级

前言 由于Netbox 官方的中文语言日渐完善,所以新出一个使用官方Docker源部署和升级的教程。 Netbox 系列文章:https://songxwn.com/categories/NetBox/ 环境介绍 Rocky Linux 9.5 (理论上也适用于RHEL系列的7-9版本) 南京大学…

Java爬虫:深入探索1688接口的奥秘

在数字化时代,数据成为了企业最宝贵的资产之一。对于电商企业来说,获取和分析数据的能力直接关系到其市场竞争力。阿里巴巴旗下的1688平台,作为中国领先的批发贸易平台,拥有海量的商家和商品信息,成为了众多企业获取数…

13 —— 开发环境调错-source map

问题:代码被压缩后,无法正确定位源代码的位置(行数和列数) source map:准确追踪error和warning在原始代码的位置 —— webpack.config.js配置devtool选项 module.exports { devtool: inline-source-map }; inline-s…

Flink解决延迟数据问题

总结: 水印:对于迟到数据不长 allowedLateness: 迟到时间很长 侧道输出:对于迟到时间特别长 对于延迟数据的理解: 水印机制(水位线、watermark)机制可以帮助我们在短期延迟下,允许乱序数据的到来。 这个机制很好的…

数据结构(ArrayList顺序表)

一、引言 1.什么是顺序表 定义: 顺序表是一种基于阵列实现的线性表结构,用连续的存储空间保存表中的数据元素,并按顺序排列。 底层依赖阵列,支持随机访问。元素之间没有额外的连接信息,如指针或链表节点。通过动态扩容…