详解大模型推理训练占用的显存

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

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

匹配显卡显存

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

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

大模型推理部署所需显存

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

1 0 9 ∗ 4 102 4 3 = 3.725 G ≈ 4 G \frac{10^9*4}{1024^3}=3.725G\approx4G 102431094=3.725G4G

所以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显卡可以满足

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

大模型训练所需显存

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

θ n + 1 = θ n − η ∇ L ( θ n ) \theta_{n+1}= \theta_{n} - \eta \nabla L(\theta_{n}) θn+1=θnηL(θn)

  • θ n \theta_{n} θn为原始模型权重
  • ∇ L ( θ n ) \nabla L(\theta_{n}) L(θn)为梯度值,若优化器为Adam,就由一阶动量和二阶动量计算得出

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

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

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

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

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

  • 模型每层的激活值需要保存,具体看模型的层数与设计
  • batch_size越大,每次需要导入的数据就越多,所需显存就越大。同理,seq_len设计的约长,所需的显存也就越大
  • pytorch/tensorflow等框架采用图结构来计算,图节点也需要存储,所以也需要占用一定的显存
  • 还有一些缓存和驱动等等也需要占用一部分显存

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

如何优化?

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

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

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

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

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

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

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

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

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

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值