首页 > 其他分享 >大模型推理和训练所占用的显存怎么估算?

大模型推理和训练所占用的显存怎么估算?

时间:2024-11-30 22:32:41浏览次数:10  
标签:显存 训练 部署 占用 显卡 推理 模型

大模型推理和训练所占用的显存怎么估算?

原创 安泰Rolling AI有温度 2024年11月14日 00:00 上海

AI因你而升温,记得加个星标哦!

在当前开源大模型中,我们可以观察到一个普遍的现象:开源可下载模型的参数规模都集中在7B、13B、65B等特定的数值上,那这种现象背后有着怎样的原因呢?

匹配显卡显存

开源模型是为了让大家易部署易传播,所以模型参数量的设计主要是为了能匹配大众使用显卡的显存,让大家在消费级显卡上就可以把模型跑起来。

我们大众消费级显卡的显存一般为4/8/16/24G,那么大模型参数量和占用显存怎么换算?可分为两部分,大模型推理部署和大模型训练。

大模型推理部署所需显存

目前模型的参数绝大多数都是float32类型,即1个参数占用4个字节。所以一个粗略的计算方法就是,每10亿(1B)个参数,约占用4G显存(其中1G=1024M,1M=1024K,1K=1024字节。除了参数外,在推理时比如输入输出数据、计算图等还需消耗一定的显存):

所以1个7B的大模型部署,大约需要28G,两张16G显卡为32G,刚好可以满足。

如果想用1张显卡部署,就可以用半精度(FP16)来加载模型,这样每个参数只占2个字节,所需显存就降为一半,只需要14G显存,那么一张16G的显卡就可以部署了。

如果有块3070显卡,一般是8G显存,还能部署吗?当然可以!资本会为你考虑的。可以采用int8精度,显存再降一半,仅需7G显存。但是相对应的,随着精度越低,模型效果也会更差一些。

同理,如果使用目前int4的最低精度,有3.5G显存就能跑起来7B模型。

dtype每10亿(1B)参数需要占用内存
float324G
fp16/bf162G
int81G
int40.5G

根据上表,就可以推算出大模型部署所需要的显存。比如:

  • 13B模型使用全精度部署至少需要52G显存,一块80G显卡可以满足

  • 13B模型使用半精度部署至少需要26G显存,一块40G显卡可以满足

  • 65B模型使用全精度部署至少需要260G显存,四块80G显卡可以满足

所以说,模型参数量的设计和我们显卡的显存紧密相关。

大模型训练所需显存

模型训练的实质就是反向传播,公式如下:

  • 为原始模型权重

  • 为梯度值,若优化器为Adam,就由一阶动量和二阶动量计算得出

所以模型训练时候的显存使用主要包括如下几部分:

模型权重。这是最基本的,训练模型肯定得先把模型加载进来吧,模型权重所需的显存和模型部署所需的权重是一样的。

优化器。我们训练最常用的优化是Adam,而Adam需要同时维护参数的一阶动量和二阶动量两个状态的变量,也就说优化器使用显存是模型权重的2倍。如果采用梯度下降法(SGD),则优化器占用显存就和模型权重一样,因SGD只需维护参数的一阶动量。

梯度值。梯度占用显存空间与模型权重相同。

所以说,如果模型想要训练,只看这3部分,需要的显存是至少推理的3或4倍。除此之外,还有以下部分:

  • 模型每层的激活值需要保存,具体看模型的层数与设计

  • batch_size越大,每次需要导入的数据就越多,所需显存就越大。同理,seq_len设计的约长,所需的显存也就越大

  • pytorch/tensorflow等框架采用图结构来计算,图节点也需要存储,所以也需要占用一定的显存

  • 还有一些缓存和驱动等等也需要占用一部分显存

以上就是根据模型参数估计显存的大概方法,实际影响显存占用的因素还有很多,所以只能粗略估计个数量级。

如何优化?

目前很多工程师都在为降低显存做着优化工作,比如:

Flash Attention是怎么做到又快又省显存的?

KV Cache:图解大模型推理加速方法

原理与代码:混合精度训练详解

随着模型的变大,主要训练方法还是分布式计算:

图解大模型分布式训练:数据并行

图解大模型分布式训练:流水线并行

图解大模型分布式训练:张量并行Megatron-LM方法

图解大模型分布式训练:ZeRO系列方法

标签:显存,训练,部署,占用,显卡,推理,模型
From: https://blog.csdn.net/zengxiaojian3/article/details/144161743

相关文章