郑州网站及优化重庆软装设计公司官网

web/2025/10/8 22:12:14/文章来源:
郑州网站及优化,重庆软装设计公司官网,wordpress教程 初学者,未来最挣钱的十大行业排行榜深入解析大语言模型显存占用#xff1a;训练与推理 文章脉络 估算模型保存大小 估算模型在训练时占用显存的大小 全量参数训练 PEFT训练 估算模型在推理时占用显存的大小 总结 对于NLP领域的从业者和研究人员来说#xff0c;有没有遇到过这样一个场景#xff0c;你的… 深入解析大语言模型显存占用训练与推理 文章脉络 估算模型保存大小 估算模型在训练时占用显存的大小 全量参数训练 PEFT训练 估算模型在推理时占用显存的大小 总结 对于NLP领域的从业者和研究人员来说有没有遇到过这样一个场景你的领导或者导师突然冷不丁来一句“最近马斯克又新出了个Grok模型小王你看看怎么放到我们的业务里来” ——然而尴尬的是你只知道Grok是个3000亿参数的模型很大但是具体要用多少资源你也不知道这个时候你想拒绝你的领导但是又怕他追问一些你答不上来的问题于是只好沉默。 本篇文章将帮助你优雅又快速地拒绝老板。看完本篇《深入解析大语言模型显存占用训练与推理》你将对模型占用显存的问题有个透彻的理解。主要介绍 如何有效估算一个模型加载后的显存值 文章脉络 图1 模型显存占用分类情况图 如上面的图1所示本文将从三个方面介绍大语言模型显存占用估算方法。 第一部分是模型保存大小。以BERT模型举例BERT的预训练参数保存为.bin文件后的大小是可以用公式估算出来的。 第二部分是模型在训练时占用显存的估算。估算模型在训练时占用的显存是每个NLPer必备的能力。这部分会介绍全量参数微调时占用的显存而且由于PEFT技术LoRA、P-Tuning最近比较火还会介绍使用PEFT方法训练时的显存估算。 第三部分是模型在推理时占用显存的估算。 估算模型保存大小 话不多说先上公式 模型大小 ( G B ) 模型参数量 ∗ 参数类型所占字节数 102 4 3 模型大小(GB) \frac{模型参数量 * 参数类型所占字节数}{1024^3} 模型大小(GB)10243模型参数量∗参数类型所占字节数​ 在上面的公式中模型的参数量我们一般事先会知道参数量大概成为现在各大AI公司的吹点了如果实在不知道参数量在代码里面加载一下模型然后打印一下也能很快知道打印模型参数量的代码示例如下 from transformers import AutoModelForSeq2SeqLM# 导入模型 model AutoModelForSeq2SeqLM.from_pretrained(pretrained_path) print(fThe model has {sum(p.numel() for p in model.parameters() if p.requires_grad):,} trainable parameters) 会得到类似于这样的输出The model has 582,401,280 trainable parameters在上面的公式中不同的参数类型所占的字节有个对比表如下 类型所占字节FP324FP162INT81 不同参数类型往往代表着资源的消耗理想情况下我们用FP16训练模型可以比FP32少用整整一半的显存确实很香。但是FP16会损失一定的精度降低模型的表现与效果。而INT8就只能在推理的时候用用了而且效果也很不理想。 【注意】关于FP32、FP16、INT4、INT8这些类型其实只是对数值计数的比特位的不同而导致能表达的数值范围不同。和《计算机组成原理》最开始学的浮点数那边的知识差不多。感兴趣可以去了解一下。 所以说模型精度和模型速度是个取乎平衡的问题。虽然用FP16训练模型会更快但是所有组织都会开源FP32的模型参数甚至我们用混合精度训练模型最终保存的参数也是FP32格式的这是因为用FP32的模型效果更好。所以一般我们在计算模型保存的大小时就默认每个参数所占字节为4就好了。 同样以BERT模型举例它大概是1亿1千万个参数然后是以FP32形式保存的每个参数占4个字节那么BERT模型的参数保存下来占的大小为 0.40978 ( G B ) 419.62 ( M B ) 11000 , 0000 ∗ 4 102 4 3 0.40978(GB) 419.62(MB) \frac{11000,0000 * 4}{1024^3} 0.40978(GB)419.62(MB)1024311000,0000∗4​ 可以看到图2中BERT模型的bin文件的大小为420MB和我们预测的419.62MB是差不多的。 图2 BERT模型参数大小 同理mT5模型的参数量大概有58200,0000所以它的大小为 2.168 ( G B ) 58200 , 0000 ∗ 4 102 4 3 2.168(GB) \frac{58200,0000 * 4}{1024^3} 2.168(GB)1024358200,0000∗4​ 图3 mT5模型参数大小 图3中mT5模型的bin文件的大小为2.16GB和我们预测的2.168GB是差不多的。 估算模型在训练时占用显存的大小 这个部分我们分全量参数训练和PEFT训练两个部分来讲先讲最基本的全量参数训练。 全量参数训练 图4 模型训练时显存开销类型引自知乎kaiyuan 如图4所示通常来说模型在训练阶段显存开销主要有四个部分模型本身参数图中绿色、优化器状态图中黄色、梯度图中蓝色、正向传播的中间计算结果图中红色、黑色。 模型本身参数静态值训练时保持不变。模型参数需要加载到显存中参与计算此部分开销为1倍模型参数量。根据模型的参数类型最后在算字节的时候FP32要乘4FP16要乘2。 优化器状态静态值训练时保持不变。主要看优化器的种类通常Adamw再带一阶动量的话则需要1倍模型参数量带二阶动量则需要2倍模型参数量。默认用的Adam都是带2阶动量的。根据优化器状态的参数类型最后在算字节的时候FP32要乘4FP16要乘2。 梯度动态值训练时呈现波状。一个参数对应一个梯度值所以是1倍。根据梯度的参数类型最后在算字节的时候FP32要乘4FP16要乘2。 【注意】一般情况下是不会只用FP16训练模型的会使用混合精度。在混合精度下模型参数是FP32而梯度是FP16并且不同的方法对不同变量的类型设置也略有不同所以采用混合精度时需要大家自己看情况估算。 正向传播的中间计算结果动态值训练时呈现波状。反向传播中需要对中间层的计算图求导所以中间层的输出不会被释放。这里的占用资源显然与batch大小、seq长度有关但难以计算常用的方法是改batch、seq看显存差值然后去估算。 还有其他零零散散的部分就不纳入考虑了。 【注意】对于正向传播的中间计算结果其实也是可以估算的论文Reducing Activation Recomputation in Large Transformer Models有给出Transformer-based模型正向传播的中间计算结果的估算公式: 1、无重计算的激活内存:(s * b * h * l) * (1024/t5 * a * s/ h / t) (Byte) 2、选择性重计算的激活内存(s * b * h * l) * (1024/t) (Byte) 3、全部重计算的激活内存2 * (s * b * h * l) (Byte) ———————— s 是token 长度 b 是 每个GPU的batch size h 是 每个hidden layer的维度 l 是 模型的隐层数 a 是 transformer 模型中注意力头 (attention heads) 的个数 t 是张量并行度 (如果无张量并行则为 1) ———————— 但是既然都估算了为什么还要去套这么复杂的公式呢所以我比较喜欢直接改batch_size的大小来估算。。。 于是我们可以粗略的估算出在FP32的情况下mT5有58000,0000个参数那么光是模型本身优化器梯度就要4倍参数的显存大小也就是8.672GB。那么正常的60系显卡8GB显存就玩不动了。 8.672 ( G B ) 58200 , 0000 ∗ 4 102 4 3 ∗ 4 8.672(GB) \frac{58200,0000 * 4}{1024^3} * 4 8.672(GB)1024358200,0000∗4​∗4 然后再来看下正向传播的中间计算结果大概占用的显存参考图5我设置batch32seq10在翻译任务训练时显存保持在12.2GB那么减去8.672可以得到正向传播的中间计算结果占用3.528GB的显存。 图5 mT5模型全量参数训练时显存消耗截图batch32,seq10 PEFT训练 GPT-2、T5以及后续的语言模型都已经证明了在模型的输入中加入前缀能够让模型去适应不同的任务完成NLP界的“大一统”。 具体来说像T5模型加上前缀“translate English to German”会自动输出英德翻译的结果加上前缀“Answer the following yes/no question.”即可完成二分类任务还有其他的前缀此处不再举例。感兴趣的可以在T5模型页右侧接口API那里自己玩一下https://huggingface.co/google/flan-t5-base。 PEFT 是 “Prompt Engineering for Few-shot Tuning” 的缩写是一种做few-shot微调的技术比较火热有Prefix Tuning、P-Tuning、LoRA等。 【注意】PEFT的相关技术此处不详细介绍了现在已经有相应的peft库了完美兼容transformers库接口简单十分好用。 举个形象生动的例子拿BERT来举例常规的全量微调是在BERT最后接入一个fc层并且更新所有的参数来做文本分类但是PEFT是在BERT内部插入一些fc层再在BERT最后接入一个fc层同时冻结BERT的参数训练这些额外增加的fc层参数。 图6 传统全量微调和PEFT微调方法的简单示例 如图6所示图中红色的部分表示参与梯度更新白色表示冻结参数各种PEFT的方法都证明了图6中的方法可以达到很好的效果而且语言模型本身的参数被冻结了训练成本将极低。当然PEFT技术并不是简单的在LLM内部插入一些fc层这里只是举个例子技术细节还是推荐去看对应的论文。 OK回归正题在这种情况下模型在训练时占用显存的大小如何呢 同样的对于一次FP32全量参数微调假设使用Adam二阶动量使用了PEFT之后会增加N个可以训练的参数原始模型的K个参数会冻结住那么 模型本身参数为KN。虽然原始模型参数已经被冻结但是还是需要加载到显存中的。   优化器状态2N。只有新增的参数可以梯度更新并采用二阶动量。   梯度N。只有新增的参数有梯度。 因此与全量参数训练相比PEFT节省了3K-4N个可训练参数。 我自己实验了一下对于mT5模型来说K58200,0000使用了Lora后N884,736所以两者显存差值3K-4N 6.49GB所以PEFT对于资源的节省还是非常非常可观的。 对于正向传播的中间计算结果大概占用的显存仍然是把实验跑起来人工来计算采用与之前相同的配置用PEFT的LoRA方法实验结果如下图7所示。在翻译任务训练时显存保持在5.3GB那么减去PEFT方法占用的显存K4N 2.18GB可以得到正向传播的中间计算结果占用3.12GB的显存。 图7 mT5模型PEFT训练时显存消耗截图batch32,seq10 综合来看PEFT能显著减少优化器状态和梯度这两个方面的显存开销在正向传播的中间计算结果显存开销略微减少。 估算模型在推理时占用显存的大小 在推理时占用显存的只有模型本身参数、正向传播的中间计算结果。 我用图7中的mT5模型PEFT方法训练好的模型进行了batch1的推理观测到显存最大占用为3.3GB。 说明推理时正向传播的中间计算结果的显存3.3-2.181.12GB。所以推理时正向传播的中间计算结果的显存也不能简单的拿训练时的占用情况来除以batch_size。可能还是有缓存Flash Attention之类的、波束搜索等等其他原因这要看transformers库的具体实现代码了。 总之推理时显存占用是很少的。 总结 在这篇博客中我们深入探讨了大型语言模型在训练和推理过程中对显存的占用问题。 ⭐介绍了如何估算模型保存后的大小。   ⭐讨论了全量参数训练和PEFT训练两种情况下模型显存占用的估算方法。并且以BERT和mT5模型为例子解释了如何计算模型参数量和不同参数类型所占的字节数。   ⭐最后分析了模型在推理时占用显存的大小。

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

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

相关文章

淘宝上做的网站网站建设开发收费

文章目录一、软件介绍二、安装 Homebrew使用 Ruby 或者 Shell 脚本安装手动 clone 安装三、卸载 Homebrew四、Homebrew 安装目录五、安装包所在位置六、程序安装目录七、软件版本切换八、清除旧版本文件九、brew 命令汇总安装、升级和删除软件包查看和检验软件包参考示例服务相…

常州建站价格一个完整的网站制作流程

WebService 1. WebService基本认识 WebService最早是微软提出了一种以XML为载体网络信息传输的规范,现在几乎所有的语言与平台都支持,带有状态机制,不依赖于容器,可以发送一个xml作为其请求内容. WebService通常是基于http的远程方…

哪里有最新的网站源码本地app软件制作公司

科目编号:8 -6-6- 6 座位号 2017-2018学年度第二学期期末考试 建筑结构基础 试题 2018年 7 月 一、单选题(本大题共10小题,每小题4分,共计40分) (★请考生务必将答案填入到下面对应序号的答题框中★&#…

兰考县住房和城乡建设局网站外国购物网站设计风格

文章目录 1 自回归模型AR Model1.1 自回归模型 vs 多元线性回归模型1.1.1 线性回归1.1.2 AR(1)模型1.1.3 AR(p)模型 1.2 AR建模问题 2 移动平均模型 MA Model2.1 MA模型的数学表示2.1.1 MA(1)模型2.2.2 MA(q)模型 2.2 MA建模问题 ARIMA模型是AR模型(自回归模型&…

求西北地区网站建设专家 西安沉睡网络 官方网址?网站建设行业细分

1.Three.js 实现模型材质局部辉光效果 2.解决辉光效果影响场景背景图显示的问题 相关API的使用: 1. EffectComposer(渲染后处理的通用框架,用于将多个渲染通道(pass)组合在一起创建特定的视觉效果) 2. …

简单的网站建设步骤网站图片居中代码

文字排版--粗体 我们还可以使用css样式来改变文字的样式:粗体、斜体、下划线、删除线,可以使用下面代码实现设置文字以粗体样式显示出来。 p span{font-weight:bold;} 在这里大家可以看到,如果想为文字设置粗体是有单独的css样式来实现的&…

企业网站建设大概的费用清远市发布

深度优先搜索DFS搜索 DFS:从根节点出发,寻找子节点,到最深层返回到上一层继续递归搜索。 B3621 枚举元组 题目传送 题面 题目描述 n 元组是指由 n 个元素组成的序列。例如 (1,1,2) 是一个三元组、(233,254,277,123)是一个四元组。 给定…

网站设计论文答辩问题及答案品划做网站

反转字符串中的元音字符Given a string and we have to eliminate/ remove all vowels from the string using C program. 给定一个字符串,我们必须使用C程序从字符串中消除/删除所有元音。 To eliminate/remove the vowels 消除/删除元音 We will traverse (reac…

设计类的网站和简介怎么开通自己的微信公众号

本文非原创 可分为:交叉连接、内连接、外连接、自连接 1.使用交叉连接: 它是非限制连接,就是将两个表格不加任何条件的组合在一起, 即第一个表格的所有记录分别和第二个表格的每一条记录相连接 组合成新的记录,连接后结…

网站免费在线观看app大全免费软件下载安装

文章目录 问题举例问题分析解决办法问题举例 我们在使用ArcGIS时经常会碰到这样的问题:将地图文档(.mxd)保存到本地并拷贝到别的电脑上或改变一个路径时,出现数据丢失的现象,具体表现为图层前面出现一个红色的感叹号,如下图所示。 出现以上问题的根本原因是数据GSS.tif的…

帝国程序如何改网站标题单位门户网站功能

注意:本节主要讲React中的虚拟DOM,但是虚拟DOM并不是React中特有的内容。 1. React 中虚拟 DOM是什么? 虚拟DOM是对真实DOM的描述,虚拟DOM是JS对象,实际上就是 JSX 通过 babel 转换成 React.createElement()&#xff…

网站建设 网页设计 网站制作织梦猫html5高端网络服务机构网站模板

数组的创建和使用 奇数位于偶数之前冒泡排序两数之和只出现一次的数字多数元素存在连续三个奇数的数组 奇数位于偶数之前 调整数组顺序使得奇数位于偶数之前。调整之后,不关心大小顺序。 如数组:[1,2,3,4,5,6] 调整后可能是:[1, 5, 3, 4, 2,…

西安网站开发定制制作后台网站开发文档

六大设计原则 1、单一职责原则 一个类或者模块只负责完成一个职责或者功能。 2、开放封闭原则 规定软件中的对象、类、模块和函数对扩展应该是开放的,对于修改应该是封闭的。用抽象定义结构,用具体实现扩展细节。 3、里氏替换原则 如果S是T的子类型…

帝国cms网站名称零基础网站建设教学公司

在现代前端开发中,搭建一个高效、灵活、易用的后台管理系统并不容易。然而,Vue3 的出现为我们提供了一个备受瞩目的选择。作为一个现代化的前端框架,Vue3 具有众多优点,能够帮助开发者快速搭建企业级中后台产品原型。 今天&#…

引航科技提供网站建设深圳市宝安区石岩街道

如果这篇博客对您有用的话,可以给我点个赞吗,这对我很重要,谢谢!❤️ 2.1.4 进程通信 知识总览 2.1.4.1 什么是进程通信 顾名思义,进程通信就是指进程之间的信息交换。 进程是分配系统资源的单位(包括内…

艺术网站源码设计制作一个保温杯教学反思

真正的有钱人对金钱持非常严肃的态度,即便是拿来投机也要小心睿智,物尽其用。这里的投机并不是指非理性的赌博,而是指为了追求更高收益而采取的市场投资行为。卡西研究所资深分析师Louis James总结了富豪们投机成功的9个秘诀。 秘诀1&#…

thinkphp开发的网站wordpress 提问模板

Linux系统操作命令 一、文件管理 ls:列出当前目录下的文件和文件夹。 ls -l:以详细列表的形式显示文件的权限、所有者和大小等信息。 cd:切换当前目录。 cd ..:返回上一级目录。cd /:返回根目录。 pwd:显示…

moodle网站建设工厂采购信息网

文件描述符 fd是一个>0 的整数 每打开一个文件,就创建一个文件描述符,通过文件描述符来操作文件 预定义的文件描述符: 0:标准输入,对应于已打开的标准输入设备(键盘) 1:标准输出,对应于已打开的标准输出设备(控制台) 2.标准错误…

网站首页建设网从seo角度谈网站建设

目录 文章目录 以从备份恢复forest_resources库为例一、备份数据库二、需要还原的数据库准备1 删除掉远程的库。2 重新创建一个空的库。可以使用sql3 找到数据库存放的路径,并将备份文件上传到对应的路径下 三、 进入docker容器内部,执行数据库恢复附录…

大连网站建设详细流程中国建设教育网官方网站

堆是将一组数据按照完全二叉树的存储顺序,将数据存储在一个一维数组中的结构。 大顶堆:任意节点的值均大于等于它的左右孩子,并且最大的值位于堆顶,即根节点处。 小顶堆:任意节点的值均小于等于它的左右孩子&#xff0…