一、推理显存需求的组成
在大模型推理过程中,显存主要由以下几个部分构成:
| 组件 | 说明 |
|---|---|
| 1. 模型权重(Model Weights) | 模型参数本身占用的显存,是最大头 |
| 2. KV Cache(Key-Value Cache) | 自回归生成时缓存注意力键值,随序列长度增长 |
| 3. 激活值(Activations) | 中间层输出,一般在推理中可忽略(尤其是使用inference-only模式) |
| 4. 临时缓冲区(Scratchpad) | 如矩阵乘法临时空间、RoPE 缓存等 |
其中,权重 + KV Cache 是主要显存消耗。
二、模型权重显存计算
1. 基本公式:
权重显存=参数量×每个参数的字节数
常见精度对应的字节数:
| 精度 | 字节/参数 | 说明 |
|---|---|---|
| FP32 | 4 bytes | 全精度,不常用 |
| FP16/BF16 | 2 bytes | 常用推理精度 |
| INT8 | 1 byte | 量化后 |
| INT4 | 0.5 bytes | GPTQ/AWQ 4bit 量化 |
2. 示例计算:
-
DeepSeek 32B 模型(320亿参数)
- FP16:
32e9 × 2 = 64 GB - INT8:
32e9 × 1 = 32 GB - INT4:
32e9 × 0.5 = 16 GB
- FP16:
-
DeepSeek 70B 模型(700亿参数)
- FP16:
70e9 × 2 = 140 GB - INT8:
70e9 × 1 = 70 GB - INT4:
70e9 × 0.5 = 35 GB
- FP16:
三、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 80GB 或 1× 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)