当前位置:   article > 正文

【小白入门篇6】常识|怎么计算模型需要的资源_大模型的70b什么意思啊

大模型的70b什么意思啊

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羊毛可以薅?

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号