极智AI | 算一算大模型显存占用

196 阅读3分钟

欢迎关注我的公众号 [极智视界],获取我的更多经验分享

大家好,我是极智视界,本文来介绍一下 算一算大模型显存占用。

邀您加入我的知识星球「极智视界」,星球内有超多好玩的项目实战源码下载,链接:t.zsxq.com/0aiNxERDq

大模型现在很火热,有一种比较有趣的称法是叫 百模大战。

说到大模型,很多人会称呼为百万参数级大模型、百亿参数级大模型等。

大模型在部署的时候,肯定离不开一个概念,叫显存占用。部署大模型,很多时候难点就在于它的大,之因为大,所以要么就根本跑不起来 (显存溢出),要么就推理很慢 (模型太大了)。所以对于大模型的推理优化,它跟 "小模型" CNN 的推理优化存在明显的不同之处,当然这里重要不是说这个,这里主要来看怎么计算大模型的显存占用。

比如对于目前比较流行的大模型 LLama2 来说,它就有 7B、13B、70B 三个版本。B 这个单位是十亿的意思,而 M 这个单位是百万的意思。所以像 LLama2 这种大模型,就可以称之为十亿、百亿级的大模型了。

然后还要清楚一个概念是模型精度,对于深度学习模型来说,一般有的精度就是 float32、float16、int8、int4 这些,后面的 int8、int4 这些低精度基本就是专门给部署的时候推理加速用的。如一个 float32 会占用 4 个字节 32 个比特,往后就减半减半,如 int8 是 1 字节占用 8 比特,int4 的占用空间会更加小。

这样有了参数量和模型精度,就可以计算出模型的显存占用了。

比如以 LLama2-13B 为例:

  • 对于 float32 精度:

13 * 10^9 * 4 / 1024^3 ~= 48.42 G

  • 对于 float16 精度:

13 * 10^9 * 2 / 1024^3 ~= 24.21 G

比如来算一下 LLama2-7B 模型的显存占用:

  • 对于 float32 精度:

7 * 10^9 *4 / 1024^3 ~= 26.08 G

  • 对于 float16 精度显存降一半:~= 13 G
  • 对于 int8 精度显存再降一半:~=6.5 G
  • 对于 int4 精度显存再降一半:~=3.2 G

看上面的数据,对于 LLama2-7B 的量化模型来说,像 int8 6G、int4 3G 这种,在普通的显卡上也是错错有余的,这也足可以看出,低比特量化对于大模型部署显存管理的重要性。

当然,上面的显存计算只是适用于模型前向推理,不适用于模型训练,因为训练过程中还会受梯度、优化器参数、bs 等影响,一般经验来说,训练时的显存占用会是推理时的好多倍,甚至十几倍。

当然,上述的推理显存占用是理论值,实际肯定会更加多一些的,所以需要预留一些余量。打个比方,比如实测 LLama2-13B,上面计算出来差不多是要 48.21G,实测就需要 52G 的样子。当然,这种计算方式也适用于 CNN 模型前向推理的显存占用。

好了,以上分享了算一算大模型显存占用。希望我的分享能对你的学习有一点帮助。



 【公众号传送】

《极智AI | 算一算大模型显存占用》


畅享人工智能的科技魅力,让好玩的AI项目不难玩。邀请您加入我的知识星球, 星球内我精心整备了大量好玩的AI项目,皆以工程源码形式开放使用,涵盖人脸、检测、分割、多模态、AIGC、自动驾驶、工业等。不敢说会对你学习有所帮助,但一定非常好玩,并持续更新更加有趣的项目。 t.zsxq.com/0aiNxERDq

logo_show.gif