大模型LLM训练显存消耗详解

参考论文:ZeRO: Memory Optimizations Toward Training Trillion Parameter Models

大模型的显存消耗一直都是面试常见的问题,这次我就彻彻底底的根据论文ZeRO中的调研和分析做一次分析

显存消耗的两个部分:Model States(跟模型的参数量和优化器相关)Residual Memory Consumption(跟训练时的batchsize,序列长度有关)

接下来,我就从这两个部分详细分析:


Model States

在这里插入图片描述

一个模型在显存消耗上,分为三个部分

  1. Optimizer States
  2. Gradients States
  3. Parameters States

更加具体的说,对于一个模型参数(Parameters)我们需要维护维护三个不同方面的参数
我们假设:模型的参数量大小为ModelSize

Parameters States

故名思义就是模型本身的权重参数,对于一个使用Float32存储的参数,我们需要32/8=4byte进行存储。

Gradients States

记录参数的梯度,对于一个使用Float32存储的参数,我们同样需要一个相同大小的梯度(4byte)保存它的梯度。

Optimizer States

对于最常用的Adam优化器以及其变体,对于一个使用Float32存储的参数需要维护两个额外的参数momentumvariance,也就是需要2*4=8byte进行保存


总的来说,对于Float32保存的模型来说,我们显存消耗是16(4+4+8)* ModelSize byte

但是对于半精度保存的模型(Float16),每个参数Parameters StatesGradients States的显存消耗都是2byte。在训练时,我们仍然需要保存其Float32的Parameters States用以加速运算,同时Adam优化器的两个参数momentumvariance同样也是Float32形式保存的,每个参数消耗的即为4+4+4=12 byte。所以半精度保存的模型,计算时的显存消耗仍然为16(2+2+12)* ModelSize byte


Residual Memory Consumption

剩下的显存消耗跟我们训练时的配置有关
主要有三个部分

  1. Activations
  2. Temporary buffers
  3. Memory Fragmentation

Activations

对于一个transformer based的模型来说,Activations的显存消耗和如下公式是成比例的:

number of transformer layers × hidden dimensions × sequence length × batch size

对于GPT2来说,这个比例大约为12

Temporary buffers 和 Memory Fragmentation

这两个参数不容易具体量化,Temporary buffers是多卡训练过程中为了提升梯度计算的效率,通常会执行一些类似于gradient all-reducegradient norm computation等操作,把数据集合到一个临时的缓存区中,这个临时区也会占用相当数量的显存

Memory Fragmentation,内存碎片的产生会导致内存空间的利用效率低下,即使有空余空间但是不足以分配给一个新的内存请求。

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

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

相关文章

离线数仓(三)【业务日志采集平台搭建】

前言 上一篇我们搭建完了用户行为日志数据的采集平台,其实也就是用两个 flume 采集数据到Kafka 中(这种结构只有 source 和 channel 没有 sink) 。离线数仓中的数据除了用户日志,还有就是业务数据了。 1、电商业务简介 1.1 电商…

Mac软件打开提示:已损坏,无法打开。您应该将它移到废纸娄 怎么解决?

新入手的苹果电脑打开软件出现:“已损坏,无法打开。您应该将它移到废纸娄” 或 “已损坏,打不开。推出磁盘映像”。这个怎么解决? 第一部分:(注意:任何来源打开过了的,就直接去看下…

第三百五十三回

文章目录 1. 概念介绍2. 使用方法2.1 获取所有时区2.2 转换时区时间 3. 示例代码4. 内容总结 我们在上一章回中介绍了"分享一些好的Flutter站点"相关的内容,本章回中将介绍timezone包.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在…

宠物赛道都卷出了哪些花样?媒介盒子分享

如今的宠物市场,已经从让宠物吃饱喝足的基本生理需求,拓展到五花八门的精神需求,与“马斯洛需求定理”高度一致。商家们看到宠物经济的潜力,不再满足于给人类造节,给毛孩子造节也是重中之重,今天媒介盒子就…

AJAX——HTTP协议

1 HTTP协议-请求报文 HTTP协议:规定了浏览器发送及服务器返回内容的格式 请求报文:浏览器按照HTTP协议要求的格式,发送给服务器的内容 1.1 请求报文的格式 请求报文的组成部分有: 请求行:请求方法,URL…

巨量广告测素材方法分享,如何拿到起量参考数据

测素材,测的是什么? 测素材只有两个目的: 1:测出跑量素材—方向 2:测出跑量素材—数据 方向对投手来说不是核心,从系统和投放的角度把结果数据给做素材的人讲到位就OK 数据是重点,投手一定…

【COMP337 LEC 5-6】

LEC 5 Perceptron &#xff1a; Binary Classification Algorithm 8 感应器是 单个神经元的模型 突触连接的强度取决于接受外部刺激的反应 X input W weights a x1*w1x2*w2....... > / < threshold Bias MaxIter is a hyperparameter 超参数 which has to be chosen…

网络防御保护——防火墙综合实验

一.实验拓扑 二.实验要求 1.办公区设备可以通过电信和移动两条链路上网(多对多的nat&#xff0c;并且需要保留一个公网ip不能用来转换)。 2.分公司设备可以通过移动链路和电信链路访问到dmz区域的http服务器。 3.分公司内部客户端可以通过公网地址访问到内部服务器。 4.FW1和FW…

C 语言 ConsoleRogueLike 控制台肉鸽游戏 DEVC++ VS2022都可用

使用 C 语言和 windows 的键盘检测函数和延迟函数&#xff0c;开发的控制台 roguelike 游戏 点开 .exe 文件立即进入游戏 AWSD 移动 J 攻击 K 加成buff 没有结束条件&#xff0c;除非碰到敌人。 其他模块功能还没来得及开发 author : 民用级脑的研发记录 DEVC 项目工程代码副本…

【Gitea】配置 Push To Create

引 在 Git 代码管理工具使用过程中&#xff0c;经常需要将一个文件夹作为仓库上传到一个未创建的代码仓库。如果 Git 服务端使用的是 Gitea&#xff0c;通常会推送失败。 PS D:\tmp\git-test> git remote add origin http://192.1.1.1:3000/root/git-test.git PS D:\tmp\g…

OpenHarmony—UIAbility组件与UI的数据同步

基于HarmonyOS的应用模型&#xff0c;可以通过以下两种方式来实现UIAbility组件与UI之间的数据同步。 使用EventHub进行数据通信&#xff1a;基于发布订阅模式来实现&#xff0c;事件需要先订阅后发布&#xff0c;订阅者收到消息后进行处理。使用globalThis进行数据同步&#…

【数据结构与算法】递归、回溯、八皇后 一文打尽!

&#x1f389;&#x1f389;欢迎光临&#x1f389;&#x1f389; &#x1f3c5;我是苏泽&#xff0c;一位对技术充满热情的探索者和分享者。&#x1f680;&#x1f680; &#x1f31f;特别推荐给大家我的最新专栏《数据结构与算法&#xff1a;初学者入门指南》&#x1f4d8;&am…

Vue3+Vite+TS+Pinia+ElementPlus+Router+Axios创建项目

目录 初始项目组成1. 创建项目1.1 下载项目依赖1.2 项目自动启动1.3 src 别名设置vite.config.ts配置文件tsconfig.json配置若新创项目ts提示 1.4 运行测试 2. 清除默认样式2.1 样式清除代码下载2.2 src下创建公共样式文件夹style2.3 main.js中引入样式2.4 安装sass解析插件 2.…

SNAT 与 DNAT

1.SNAT 1.1 SNAT 定义 SNAT 又称源地址转换。源地址转换是内网地址向外访问时&#xff0c;发起访问的内网ip地址转换为指定的ip地址&#xff08;可指定具体的服务以及相应的端口或端口范围&#xff09;&#xff0c;这可以使内网中使用保留ip地址的主机访问外部网络&#xff…

Leetcode 145.二叉树的后序遍历

题目 给你一棵二叉树的根节点 root &#xff0c;返回其节点值的 后序遍历 。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[3,2,1] 示例 2&#xff1a; 输入&#xff1a;root [] 输出&#xff1a;[]示例 3&#xff1a; 输入&#xff1a;root…

应用回归分析:岭回归

岭回归&#xff0c;也称为Tikhonov正则化&#xff0c;是一种专门用于处理多重共线性问题的回归分析技术。多重共线性是指模型中的自变量高度相关&#xff0c;这种高度的相关性会导致普通最小二乘法&#xff08;OLS&#xff09;估计的回归系数变得非常不稳定&#xff0c;甚至无法…

32、IO/对文件读写操作相关练习20240218

一、使用fgets统计给定文件的行数 代码&#xff1a; #include<stdlib.h> #include<string.h> #include<stdio.h>int main(int argc, const char *argv[]) {FILE *fpNULL;if((fpfopen("./1.txt","r"))NULL)//只读形式打开1.txt文件{per…

【C++】类与对象【定义、访问限定符、this指针】

&#x1f308;个人主页&#xff1a;秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343&#x1f525; 系列专栏&#xff1a;http://t.csdnimg.cn/eCa5z 目录 面向过程和面向对象初步认识 类的引入 类的定义 成员变量命名规则的建议&#xff1a; 类的访问限定符及…

见智未来:数据可视化引领智慧城市之潮

在数字时代的浪潮中&#xff0c;数据可视化崭露头角&#xff0c;为打造智慧城市注入了强大的活力。不再被深奥的数据所束缚&#xff0c;我们通过数据可视化这一工具&#xff0c;可以更加接近智慧城市的未来。下面我就以可视化从业者的角度来简单聊聊这个话题。 数据可视化首先为…

模型超参数寻优

参考某篇QSAR的sci论文设置 根据上图&#xff0c;我设置我的XGBoost模型&#xff1a; # 定义要搜索的超参数的候选值 param_grid {model__learning_rate: [0.1, 0.01, 0.001], # 调整学习率model__n_estimators: [50, 100, 200, 300,400,500], # 调整树的数量model__max_de…