【小白入门篇6】常识|怎么计算模型需要的资源

01 背景

各个公司相继推出大模型, 有开源和不开源,有些技术爱好者也开始心痒难耐,萌生了私有本地模型,甚至有伙伴构建大模型并进行训练的想法, 大模型不仅比拼技术, 也是比拼爹(资源)的存在, 我个人在实战经历经常问自己,到底需要什么样配置才能跑起来这个模型, 完成这个实验目标, 由此引发对估算大模型需要的GPU显存的进一步了解.

02 模型参数量

如下图(来源于网络), 我们经常会看到模型名称带70B、14B、32B等字眼,这些就是表示模型参数的个数, 反映出模型大小, b代表英文单词“billio****n”的意思, 也就是10亿. 所以70B就是700亿个参数左右, 14B就是140亿个参数左右, 32B就是320亿个参数左右. 在大模型以前的时代, 也有一些比较小模型,单位一般都是M(百万)为计算单位, LLM出现之后, 基本模型参数数量基本是以亿为基本单位.

image.png

03 参数精度

影响模型占用显存大小,除了参数量, 还有参数精度,所谓参数精度,就是参数的数据类型. 我们之前在《Transformer原理》中学到Transformer, 神经网络一般都是用具体数字表示, 所以我们这里所说的参数数据类型都是浮点数, 常见浮点数的精度类型有以下几种:

类型

描述

说明

float64

双精度浮点数 (64位)

双精度浮点数提供更高的精度,适用于需要更高数值精度的应用,但会占用更多的内存。占用8个字节(64位)

float32

单精度浮点数 (32位)

单精度浮点数用于表示实数,具有较高的精度,适用于大多数深度学习应用。4字节(32位)

float16

半精度浮点数 (16位)

半精度浮点数用于表示实数,但相对于单精度浮点数,它的位数较少,因此精度稍低。然而,它可以在某些情况下显著减少内存占用并加速计算。字节数:2字节(16位)

int32, int64

整数 (通常为32位或64位)

整数用于表示离散的数值,可以是有符号或无符号的。在某些情况下,例如分类问题中的标签,可以使用整数数据类型来表示类别。

字节数:通常为4字节(32位)或8字节(64位

int4

量化技术:int4 (4位整数)

int4使用4位二进制来表示整数。在量化过程中,浮点数参数将被映射到一个有限的范围内的整数,然后使用4位来存储这些整数。

int8

量化技术 int8(8位整数)

含义:int8使用8位二进制来表示整数。在量化过程中,浮点数参数将被映射到一个有限的范围内的整数,然后使用8位来存储这些整数。

字节数:1字节(8位)

模型参数精度的选择往往是一种权衡。使用更高精度的数据类型可以提供更高的数值精度,但会占用更多的内存并可能导致计算速度变慢。相反,使用较低精度的数据类型可以节省内存并加速计算,但可能会导致数值精度损失. 关于量化技术,等后面单独给大家仔细讲解.以下一张图可以先大概了解量化的过程:

image.png

上图来源于网络

有了参数个数和每个参数的数据类型, 我们就可以开始估算GPU显存大小, 但是推理和训练又不太一样. 推理一般相对训练需要的资源要少, 接下来我们分为2大块内容介绍一下,在推理和训练分别需要的资源是多少?

03 推理显存组成

3.1 模型权重: 主要由模型的参数个数* 参数的数据类型占用字节数

3.2 输入数据大小: 数据维度和batchsize(批次大小), 所以现在大模型api一般都用输入token和输出token进行收费

3.3 推理中间结果:在模型的推理过程中,可能会产生一些中间计算结果,这些中间结果也会占用一定的显存。

04 训练显存组成

4.1 模型权重: 主要由模型的参数个数* 参数的数据类型占用字节数。

4.2 梯度 : 计算梯度用于更新模型的参数值, 梯度数量与模型参数是相同。

4.3 优化器参数: 一般优化器需要保存一些参数状态,以便更新调整,不同的优化器占用的显存大小是不一样的,比如SGD和参数数量是一样的, 而AdamW是参数的2倍

4.4 输入数据: 数据维度和batchsize(批次大小)

4.5 训练中间结果:在模型的训练前向传播和后向传播过程中,可能会产生一些中间计算结果,这些中间结果也会占用一定的显存。

05估算LLama3-8b

假设参数精度是float32,那就是4个字节:

5.1模型参数

如果显存不够,可以用FP16精度,或者更低,一般都是2倍关系

5.2梯度大小:一般和模型一样的大小29.8GB

5.3 优化器参数: 以Adamw 为例优化器参数是模型参数的2倍, 29.8*2GB

5.4 中间激活:对于每一层,都会有一些中间的激活值。这些激活值的数量通常与模型的宽度和输入数据的大小有关。假设每层的激活需X个浮点数,那么激活的总大小为:X*4字节

5.5 输入数据的激活大小: 假设批次大小为B, B*X*4字节,

所以如果是推理的话基本是29.8GB+中间激活+输入数据激活大小即可, 差不多在30GB左右,但是如果训练的话, 那就4倍以上.

06 总结

上面所说的推理大小也是不考虑用户并发的情况,如果考虑并发的情况永不止这些. 由于训练所需要的资源是巨大,现在为了让普通人也能训练大模型, 行业内已经出现一些相关技术,比如上面所说量化,如果使用量化int8,基本是上面计算的1/4左右, 模型切分、混合精度计算、微调框架等等.

有人说,那每一次我要估算资源,都要充分了解模型结构,然后再计算, 当然不用了,现在HuggingFace的官方库Accelerate直接推出了一个在线大模型显存消耗资源估算工具Model Memory Calculator, 有在线版和官方版本,可以帮大家快速计算出来, 即使有工具,我们也要知道其中原理, 这样我们才能知其然知其所以然也.

注意: 如果有需要工具如何使用,可以关注我的公众号, 回复“大模型显存计算工具Model Memory Calculator”
在这里插入图片描述

感谢您完成阅读

推荐阅读:

【小白入门篇1】GPT到底是怎样练成?

【小白入门篇2】总有一款AI工具适合你

【小白入门篇3】还是GPT4更香

【小白入门篇4】兄弟,你还在网上盗图吗

【小白入门篇5】哪些免费GPU羊毛可以薅?

  • 19
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
ZBrush是一个数字雕刻和绘画软件,它以强大的功能和直观的工作流程改变了整个三维行业。在一个简洁的界面中,ZBrush为当代数字艺术家提供了世界上最先进的工具。它以实用的思路开发出的功能组合,在激发艺术家创作力的同时,给用户带来了非常顺畅的操作体验。ZBrush能够雕刻高达10亿多边形的模型,所以限制只取决于艺术家自身的想象力。 如果你是一个纯小白入门ZBrush的话,可以按照以下步骤开始学习: 1. 首先,你可以打开ZBrush软件,并选择一个模型进行学习。你可以通过点击"灯箱",然后在"项目"中选择你想要打开的模型。双击鼠标即可打开模型。同时,记住灯箱的快捷键是逗号键"[,]"。 2. 接下来,你可以开始学习ZBrush的基本操作。这包括使用不同的工具和笔刷进行雕刻、绘画和修改模型的形状。你可以通过探索软件界面和菜单了解各种工具的功能,也可以通过在线教程和视频学习更详细的操作技巧。 3. 了解ZBrush的基本概念和术语也是学习的关键。你可以学习关于模型的多边形、顶点、边缘和面片的概念,以及如何在ZBrush中进行选择、编辑和观察模型的方法。 4. 进一步学习ZBrush的功能。你可以学习如何使用多个子工具、描绘笔刷和纹理来添加细节和质感,以及如何使用不同的材质和渲染选项来呈现你的作品。 5. 最后,不断练习和实践是提高技能的关键。通过不断地尝试和制作不同类型的模型,你将逐渐熟悉ZBrush的工作流程,并发展出自己的创作风格和技巧。 总的来说,作为一个纯小白入门ZBrush,你可以通过学习基本的操作和概念,不断练习和实践来提高你的技能。同时,参考一些在线教程和资源也是很有帮助的。祝你在学习ZBrush的过程中取得进步!<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [ZBrush——纯小白入门篇(一)](https://blog.csdn.net/chenchen6668/article/details/104521152)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿阿三

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值