首页 > 其他分享 >AI大模型的推理显存占用分析

AI大模型的推理显存占用分析

时间:2024-05-30 10:57:53浏览次数:19  
标签:显存 AI text 占用 times 参数 推理 size

了解Transformer架构的AI大模型显存占用是非常重要的,特别是在训练和推理过程中。以下是详细解释和分析这些组成部分及其影响的专业描述:

1 显存占用

1.1 模型本身参数

模型的参数包括所有的权重和偏置项,这些参数需要存储在显存中,以便在训练和推理过程中进行计算。

  • 占用字节:每个FP32参数占用4个字节,每个FP16参数占用2个字节。
  • 计算:模型参数数量(例如,BERT-base模型大约有110M参数)。如果使用FP32表示,则总显存占用为 110M * 4 bytes

1.2 模型的梯度动态值

在训练过程中,每个模型参数都有对应的梯度值,这些梯度用于更新模型参数。梯度存储同样需要显存。

  • 占用字节:梯度和模型参数类型相同,所以FP32梯度占用4个字节,FP16梯度占用2个字节。
  • 计算:梯度存储显存占用与模型参数相同,例如,如果模型参数使用FP32,则梯度显存占用为 参数数量 * 4 bytes

1.3 优化器参数

优化器(如Adam)在训练过程中需要存储额外的参数,如一阶动量和二阶动量。这些参数也需要显存来存储。

  • Adam优化器:存储m和v两个参数,即需要2倍的模型参数量。
  • 占用字节:每个FP32参数占用4个字节,每个FP16参数占用2个字节。
  • 计算:例如,使用Adam优化器和FP32表示,则优化器参数显存占用为 2 * 参数数量 * 4 bytes

1.4 模型的中间计算结果

在前向传播和反向传播过程中,需要存储每一层的中间计算结果,这些结果用于反向传播的求导。这些中间结果的显存占用与批量大小(batch size)、序列长度(sequence length)和每层的输出维度(hidden size)有关。

  • 前向传播:每一层的输入x和输出都需要存储。
  • 反向传播:中间结果的计算图不会被释放,以便计算梯度。
  • 占用字节:这部分的显存占用难以精确计算,但可以通过调整batch size和sequence length来估算显存差值。
  • 计算方法:常用的方法是实验性地调整batch size和sequence length,观察显存变化来估算中间结果的显存占用。

1.5 KV Cache

在推理过程中,尤其是在自回归模型(如GPT)中,需要缓存先前计算的键和值(Key和Value)以加速计算。这些缓存需要显存来存储。

  • 占用字节:这部分的显存占用与输入的序列长度、批量大小和注意力头数有关。
  • 计算方法:具体计算公式取决于模型的架构和缓存策略。

不同的参数类型所占的字节对比表

类型所占字节
FP324
FP162
INT81

2 具体示例

假设我们有一个Transformer模型,其架构和超参数如下:

层数(layers):12
隐藏层大小(hidden_size):768
注意力头数(num_heads):12
词汇表大小(vocab_size):30522
最大序列长度(sequence_length):512
批量大小(batch_size):1
数据类型:FP32(每个参数4字节)

为了具体计算一个具有上述参数的Transformer模型在推理时的显存占用,我们需要考虑以下几个部分:

  1. 模型本身的参数
  2. 输入和输出激活值
  3. 中间计算结果
  4. KV Cache

2.1 模型本身的参数

嵌入层
  • 词嵌入矩阵vocab_size * hidden_size
    [
    30522 \times 768 = 23440896 \text{ 个参数}
    ]
  • 位置嵌入矩阵sequence_length * hidden_size
    [
    512 \times 768 = 393216 \text{ 个参数}
    ]

嵌入层总参数:
[
23440896 + 393216 = 23834112 \text{ 个参数}
]

Transformer 层

每层的主要参数包括:

  • 注意力层的 Q, K, V 权重和偏置
    [
    3 \times (hidden_size \times hidden_size) = 3 \times (768 \times 768) = 1769472 \text{ 个参数}
    ]
  • 输出权重和偏置
    [
    hidden_size \times hidden_size = 768 \times 768 = 589824 \text{ 个参数}
    ]
  • 前馈网络(两层)
    [
    2 \times (hidden_size \times 4 \times hidden_size) = 2 \times (768 \times 4 \times 768) = 4718592 \text{ 个参数}
    ]

每层总参数:
[
1769472 + 589824 + 4718592 = 7077888 \text{ 个参数}
]

12层总参数:
[
12 \times 7077888 = 84934656 \text{ 个参数}
]

总参数数量

模型总参数数量:
[
23834112 + 84934656 = 108768768 \text{ 个参数}
]

每个FP32参数占用4个字节:
[
108768768 \times 4 = 435075072 \text{ 字节} = 435.08 \text{ MB}
]

2.2 输入和输出激活值

假设模型在推理时的输入和输出激活值为 batch_size * sequence_length * hidden_size,对于每个层的激活值也相同。

每层激活值:
[
batch_size \times sequence_length \times hidden_size = 1 \times 512 \times 768 = 393216 \text{ 个元素}
]

每个FP32激活值占用4个字节:
[
393216 \times 4 = 1572864 \text{ 字节} = 1.57 \text{ MB}
]

2.3 中间计算结果

由于反向传播不需要考虑推理时的显存占用,我们可以忽略这部分。

2.4 KV Cache

在推理过程中,需要缓存每一层的键和值(Key和Value):

每层的KV Cache占用:
[
2 \times batch_size \times sequence_length \times hidden_size = 2 \times 1 \times 512 \times 768 = 786432 \text{ 个元素}
]

每个FP32值占用4个字节:
[
786432 \times 4 = 3145728 \text{ 字节} = 3.14 \text{ MB}
]

12层的KV Cache总占用:
[
12 \times 3.14 \text{ MB} = 37.68 \text{ MB}
]

2.5 总显存占用

[
\text{模型参数} + \text{输入和输出激活值} + \text{KV Cache}
]

显存占用计算:

  • 模型参数:435.08 MB
  • 激活值:1.57 MB(每层)× 12层 = 18.84 MB
  • KV Cache:37.68 MB

[
\text{总显存占用} = 435.08 \text{ MB} + 18.84 \text{ MB} + 37.68 \text{ MB} = 491.60 \text{ MB}
]

在推理过程中,一个具有上述配置的Transformer模型大约需要491.60 MB的显存。这一估算没有包括额外的显存开销,例如模型加载时的一些临时数据结构和框架本身的开销。实际使用中,可能还需要一些额外的显存来处理这些开销。

标签:显存,AI,text,占用,times,参数,推理,size
From: https://blog.csdn.net/jiaxin576/article/details/139276270

相关文章

  • 一键生成,效率翻倍,用AI赋能PPT制作
    PPT已经渗透到我们的日常工作中,无论是工作汇报、商务报告、学术演讲、培训材料都常常要求编写一个正式的PPT,协助完成一次汇报或一次演讲。PPT相比于传统文本的有点就是有布局、图片、动画效果等,可以给到观众更好的感受和体验。同样ChatGPT也可以做到自动生成PPT。实践演练......
  • 关于mysql explain中key_len
    key_len只指示了where中用于条件过滤时被选中的索引列,是不包含orderby、groupby这一部分被选中的索引列的。索引字段:没有设置NOTNULL,则需要加1个字节。定长字段:tinyint 占 1 个字节、int 占 4个字节、bitint 占 8 个字节、date 占 3个字节、datetime 占 5 ......
  • AI实用技巧 | 5分钟将coze集成到微信群机器人
    细心的小伙伴已经注意到,国内的Coze平台已经开放了API,这一发现让他们感到兴奋不已。因此,他们迫切地想要掌握这一机会,将API应用到实际中,让Coze成为他们的得力助手。这样一来,他们就可以避免每次都需要登录网页才能使用Coze的情况。在这一章节中,我将简要地分享一下如何将Coze平台成功......
  • RAID配置实战
    概念raid磁盘阵列:可以用不同的硬盘分区,组成一个逻辑上的硬盘。具有高可用raid级别:raid0:条带化存储:数据分散在多个物理硬盘上的存储方式。利用多个磁盘并行读取和写入。存储性能和读写性能是最好的。没有冗余能力(高可用),坏一块盘数据就会丢失。raid0使用场景高吞吐和低延......
  • 多企业AI智能名片商城系统小程序在品牌塑造与流量管理中的应用研究
    摘要:在数字化浪潮中,品牌塑造与流量管理成为企业发展的重要驱动力。本文将通过具体案例,探讨多企业AI智能名片商城系统小程序在品牌塑造与流量管理中的应用,分析其在企业成功转型中的关键作用。一、引言假设有一家高端时尚品牌“悦尚”,在市场竞争日益激烈的环境下,它面临着品牌......
  • 开源AI智能名片商城系统小程序:构建企业敏捷性与创新力的新引擎
    摘要:在数字化时代,企业正面临前所未有的市场变革。客户需求日新月异,市场竞争日趋激烈。为了在这场变革中立足,企业必须寻求新的解决方案,以提升自身的敏捷性和创新力。开源AI智能名片商城系统小程序,作为一种新兴的技术工具,正以其独特的优势,助力企业迅速响应市场变化,推动产品和服......
  • 基于企业定制开发AI智能名片S2B2C商城系统小程序的新零售闭环生态构建研究
    摘要:随着新零售时代的到来,线上线下融合成为零售企业转型升级的重要方向。本文通过分析新零售闭环生态的三大基本要素——基础系统底层服务设施、实体门店和线上商城、智能设备,并结合某知名零售企业定制开发的AI智能名片S2B2C商城系统小程序案例,探讨了如何构建高效、便捷的新零......
  • Ai+姓氏头像壁纸项目,含直播搭建教程
    1.前言小伙伴们大家好,欢迎来到天夏Ai,这里专注于分享人工智能精品资源:Ai副业项目、Ai效率神器!和你一起共享Ai信息,分享Ai副业项目资源,开启智能副业赚钱新时代!今天为大家带来Ai+姓氏头像壁纸项目,拒绝割韭菜,只讲干货!下方数据可以看到,人们对头像壁纸的需求量还是很大的......
  • 【OrangePi AIpro】香橙派 AIpro 为AI而生
    产品简介OrangePiAIpro(8T):定义边缘智能新纪元的全能开发板在当今人工智能与物联网技术融合发展的浪潮中,OrangePiAIpro(8T)凭借其强大的硬件配置与全面的接口设计,正逐步成为开发者手中的创新利器。这款开发板不仅代表了香橙派与华为昇腾AI技术路线的深度合作,更是为构建......
  • Dify vs Langchain:AI应用开发的全面分析
    1.探索AI应用开发的基础在AI应用开发的世界里,选择一个合适的平台是至关重要的。Dify和Langchain作为这个领域中的佼佼者,各自提供了独特的功能和能力,满足了各种开发者的需求。1.1.平台在AI开发中的作用深入研究AI应用开发时,选择合适的平台对成功至关重要。选对平台非常关键,因......