7、大模型GPU显存计算方法

208 阅读3分钟

一、推理显存需求的组成

在大模型推理过程中,显存主要由以下几个部分构成:

组件说明
1. 模型权重(Model Weights)模型参数本身占用的显存,是最大头
2. KV Cache(Key-Value Cache)自回归生成时缓存注意力键值,随序列长度增长
3. 激活值(Activations)中间层输出,一般在推理中可忽略(尤其是使用inference-only模式)
4. 临时缓冲区(Scratchpad)如矩阵乘法临时空间、RoPE 缓存等

其中,权重 + KV Cache 是主要显存消耗。

二、模型权重显存计算

1. 基本公式:

权重显存=参数量×每个参数的字节数

常见精度对应的字节数:

精度字节/参数说明
FP324 bytes全精度,不常用
FP16/BF162 bytes常用推理精度
INT81 byte量化后
INT40.5 bytesGPTQ/AWQ 4bit 量化

2. 示例计算:

  • DeepSeek 32B 模型(320亿参数)

    • FP16:32e9 × 2 = 64 GB
    • INT8:32e9 × 1 = 32 GB
    • INT4:32e9 × 0.5 = 16 GB
  • DeepSeek 70B 模型(700亿参数)

    • FP16:70e9 × 2 = 140 GB
    • INT8:70e9 × 1 = 70 GB
    • INT4:70e9 × 0.5 = 35 GB

三、KV Cache 显存估算

KV Cache 是生成过程中缓存每个 token 的 Key 和 Value 向量,其大小与 序列长度(sequence length)批大小(batch size) 强相关。

公式如下:

KV Cache Memory=2×num_layers×batch_size×seq_len×hidden_size×dtype_size

其中:

  • 2:K 和 V 两个矩阵
  • num_layers:模型层数(如 60 层)
  • hidden_size:每层的隐藏维度(如 8192)
  • dtype_size:数据类型大小(FP16 为 2 bytes)

估算 Deepseek-R1-70B 的结构(近似):

  • 参数量:70B
  • 通常结构:num_layers ≈ 80,hidden_size ≈ 8192,intermediate_size ≈ 28672,vocab_size ≈ 32000
  • 假设:batch_size = 1,seq_len = 32768(支持长上下文)

计算 KV Cache:

=2×80×1×32768×8192×2 bytes=2×80×32768×8192×2=85,899,345,920 bytes≈85.9GB

  • 假设:batch_size = 1,seq_len = 8192(支持长上下文)

计算 KV Cache:

=2×80×1×32768×8192×2 bytes=2×80×8192×8192×2=21,474,836,480 bytes≈21.5GB

💡 在长序列(如 32K)下,KV Cache 可能接近甚至超过模型权重!

四、总显存估算(简化)

1. Deepseek-R1-32B @ FP16

项目显存
权重32B × 2 = 64 GB
KV Cache(8K 序列,bs=1)~10–15 GB
其他(激活、缓冲)~5–10 GB
总计~80–90 GB

✅ 可在 2× A100 80GB1× H100 80GB + 张量并行 下运行(需模型并行)

2. Deepseek-R1-70B @ FP16

项目显存
权重70B × 2 = 140 GB
KV Cache(8K 序列,bs=1)~20–30 GB
其他~10 GB
总计~170–180 GB

🚫 无法在单卡运行,需 多卡张量并行(TP)或流水线并行(PP)

  • 至少需要 2× H100 80GB(使用 TP=2)
  • 4× A100 80GB(使用 TP=4)