大模型GPU显存算力需求计算

一、显存占用核心组成部分

大语言模型在GPU上运行时的显存占用主要包括以下几个部分:

1. 模型参数

在模型推理时首先需要存储模型本身的参数,其占用的显存计算公式为:参数量 x 参数精度。常用的参数精度有FP32(4字节)、FP16(2字节)、BF16 (2字节)。对于大语言模型,模型参数通常采用FP16BF16。因此,以参数精度为FP16,参数量为7B的模型为例,其所需显存为:7B × 2B = 14 GB

每个参数根据精度占用不同字节数:

  • FP32(单精度浮点数):4字节/参数

  • FP16(半精度浮点数)/BF16:2字节/参数

  • INT8(8位整数):1字节/参数

  • INT44位整数):0.5字节/参数

2. 梯度

  • 通常与参数精度相同

  • 训练时需要,推理时不需要

3. 优化器状态

  • Adam优化器需要保存动量和方差

  • 通常每个参数占用8-12字节(根据优化器类型)

4. 激活值

在大语言模型推理过程中,需要计算每层神经元的激活值,其占用显存与批量大小、序列长度和模型架构(层数、隐藏层大小)正相关,关系式可以表示为:激活值显存b×s×h×L×param_bytes

其中:

  • b(batch size)单次请求批量大小,在作为在线服务时通常为1,作为批处理接口时不为1。

  • s(sequence length):整个序列长度,包括输入输出(token数量)。

  • h(hidden size):模型隐藏层维度。

  • L(Layers):模型Transformer层数。

  • param_bytes:激活值存储的精度,一般为2字节。

结合以上因素和实践经验,为简化显存估算,且留有一定余量,以一个7B模型为例,b1,s2048,param_bytes2字节时,激活值所占显存可以大致按照10%的模型所占显存进行估算,即:14GB×0.1=1.4GB

5. KV Cache(推理时)

为加速大语言模型的推理效率,通常会缓存每层Transformer已经计算完成的键K(Key)和值V(Value),避免每个时间步重新计算所有历史token的注意力机制参数。引入KV缓存后,其计算量从降低至,大幅提升推理速度。与激活值类似,KV缓存占用显存也与批量大小、序列长度、并发度和模型架构(层数、隐藏层大小)正相关,关系式可以表示为:

其中:

  • 2:表示需要存储K(Key)和V(Value)两个矩阵。

  • b(batch size):单次请求批量大小,在作为在线服务时通常为1,作为批处理接口时不为1。

  • s(sequence length):整个序列长度,包括输入输出(token数量)。

  • h(hidden size):模型隐藏层维度。

  • L(Layers):模型Transformer层数。

  • C(Concurrent):服务接口请求的并发度。

  • param_bytes:激活值存储的精度,一般为2字节 。

结合以上因素和实践经验,为简化显存估算,且留有一定余量,以一个7B模型为例,当C1,b1,s2048,param_bytes2字节时,KV缓存所占显存也大致按照10%的模型所占显存进行估算,即:

6. 其他

除了以上影响因素外,当前批次的输入数据、CUDA核心、PyTorch/TensorFlow深度学习框架本身等也会占用一些显存,通常为1~2GB。

根据以上因素分析,对于7B大模型,通常情况下模型推理部署最低需要的显存约为:

二、资源需求核心计算公式

1. 推理场景显存公式

总显存 ≈ 模型参数 + KV Cache + 激活值 + 其他开销(1-2GB)

模型参数 = 参数量 × 精度字节数
KV Cache = 2 × Batch Size × 序列长度 × 层数 × 隐层维度 × 精度字节数
激活值 ≈ 参数显存的10-20%(简化估算)

2. 训练场景显存公式

总显存 ≈ 模型参数 + 梯度 + 优化器状态 + 激活值 + 其他开销

模型参数 = 参数量 × 2字节(FP16)
梯度 = 参数量 × 2字节(FP16)
优化器状态(AdamW)= 参数量 × 12字节(FP32参数副本+动量+方差)
激活值 = 与Batch Size、序列长度正相关,通常占参数显存的20-50%

3. CPU与内存需求原则

  • CPU核心数:训练场景建议为GPU数量的2-4倍,推理场景可适当降低

  • 系统内存:训练时建议≥ GPU显存总量,推理时需容纳完整模型权重(特别是CPU卸载场景)

三、实际计算示例

示例1:推理场景 - 加载Llama 2 7B模型 (FP16)

模型信息

  • 参数量:7B = 7 × 10⁹

  • 精度:FP16 (2字节/参数)

  • 假设batch size = 1,序列长度 = 2048

  • 层数 = 32,注意力头数 = 32,隐层维度 = 4096

计算步骤

1.模型参数显存

7B × 2字节 = 14GB

2.KV Cache显存

每层KV Cache大小 = 2(Key和Value) × 序列长度 × 隐层维度 × 2字节
= 2 × 2048 × 4096 × 2 = 33.55MB

总KV Cache = 33.55MB × 32层 ≈ 1.07GB

中间激活值(估算)≈ 0.5GB

总显存需求

14GB + 1.07GB + 0.5GB = 15.57GB
加上10%预留 ≈ 17.13GB

结论:至少需要24GB显存的GPU(如RTX 3090/4090)

示例2:训练场景 - 微调Llama 2 7B (混合精度训练)

模型信息

  • 参数量:7B

  • 使用混合精度训练(参数存FP16,优化器状态FP32)

  • batch size = 4,序列长度 = 512

计算步骤

  1. 模型参数(FP16):7B × 2 = 14GB

  2. 梯度(FP16):7B × 2 = 14GB

  3. 优化器状态(Adam):

    • FP32参数副本:7B × 4 = 28GB

    • 动量:7B × 4 = 28GB

    • 方差:7B × 4 = 28GB

    • 小计:84GB

  4. 激活值(估算):

    • 与batch size、序列长度相关

    • 粗略估算 ≈ 参数量的20-30% ≈ 2GB

  5. 总显存

14GB + 14GB + 84GB + 2GB = 114GB
加上10%预留 ≈ 125.4GB

结论:需要多卡训练,如4×A100 (80GB)或8×A100

示例3:常见模型的推理显存需求

模型参数量精度理论参数显存实际推理显存
BERT-base110MFP16220MB约1-2GB
BERT-large340MFP16680MB约2-3GB
GPT-2 1.5B1.5BFP163GB约6-8GB
Llama 2 7B7BFP1614GB约16-20GB
Llama 2 13B13BFP1626GB约28-32GB
Llama 2 70B70BFP16140GB约150-160GB
GPT-3 175B175BFP16350GB约380-400GB

四、降低显存占用的技巧

1. 量化技术

  • INT8量化:显存减少50%

  • INT4量化:显存减少75%

  • 示例:Llama 2 7B INT8版本 ≈ 7GB

2. 参数高效微调

  • LoRA:只训练少量参数

  • 显存需求可降低60-70%

3. 梯度检查点

  • 用计算换显存

  • 可减少30-50%激活值显存

4. 分布式策略

  • 模型并行

  • 张量并行

  • 流水线并行

五、实用工具推荐

1.LLM 推理: 显存与性能计算器

2.Hugging Face 显存计算器

3.大模型训练计算器

4.LLM显存占用计算器

5.简易显存估算器

六、快速估算口诀

  • 推理:参数量(GB) × 1.2 ≈ 实际需求

  • 全参数训练:参数量(GB) × 8-12 ≈ 实际需求

  • LoRA微调:参数量(GB) × 4-6 ≈ 实际需求

例如:7B模型FP16 = 14GB

  • 推理:14 × 1.2 ≈ 16.8GB

  • 全参数训练:14 × 10 ≈ 140GB

  • LoRA微调:14 × 5 ≈ 70GB


参考:

anzhihe 安志合个人博客,版权所有 丨 如未注明,均为原创 丨 转载请注明转自:https://chegva.com/6623.html | ☆★★每天进步一点点,加油!★★☆ | 

您可能还感兴趣的文章!

发表评论

电子邮件地址不会被公开。 必填项已用*标注