部署 DeepSeek 70B(即参数量约为 700 亿的 DeepSeek 模型)所需的显存取决于多个因素,包括:
- 模型参数精度(FP32、FP16/BF16、INT8、INT4)
- 是否使用模型并行(如 Tensor Parallelism、Pipeline Parallelism)
- 推理还是训练
- 批处理大小(batch size)
- 序列长度
- 是否启用 KV Cache(推理时)
下面我们来逐步估算。
🔢 一、基本显存估算公式
1. 仅存储模型参数所需显存
$$
text{显存} = text{参数量} times text{每个参数的字节数}
$$
| 精度 | 字节/参数 | 显存(70B 参数) |
|---|---|---|
| FP32 | 4 bytes | 70 × 4 = 280 GB |
| FP16 / BF16 | 2 bytes | 70 × 2 = 140 GB |
| INT8 | 1 byte | 70 × 1 = 70 GB |
| INT4 | 0.5 byte | 70 × 0.5 = 35 GB |
✅ 这是“仅参数”所需显存,不包括激活值、优化器状态、KV Cache 等。
2. 推理阶段显存估算
推理时主要消耗来自:
- 模型权重(已加载)
- KV Cache(用于自回归生成,显存随序列长度增长)
- 中间激活值(较小,但 batch 大时显著)
(1)KV Cache 显存估算
KV Cache 大小近似为:
$$
text{KV Cache 显存} approx 2 times text{层数} times text{序列长度} times text{隐藏维度} times text{batch size} times text{精度字节数}
$$
以 DeepSeek 70B 为例(类比 LLaMA 架构):
- 层数 ≈ 80
- 隐藏维度 ≈ 8192
- 注意力头数 ≈ 64
- 序列长度(max)≈ 32768(DeepSeek 支持长上下文)
- Batch size = 1
- 精度:FP16(2 bytes)
则单个 token 的 KV Cache ≈
$ 2 times 80 times 8192 times 2 = 2,621,440 $ bytes ≈ 2.6 MB/token
对于序列长度 32k(32768 tokens):
$$
2.6 , text{MB} times 32768 approx mathbf{85 , GB}
$$
📌 注意:这是最坏情况,且 batch=1。若 batch=4,则高达 340GB,不可行。
实际中可通过分页 KV Cache(如 vLLM)、量化等优化降低占用。
3. 训练阶段显存估算(远高于推理)
训练时还需存储:
- 优化器状态(Adam: FP32 梯度 + 动量 + 方差 → 12 bytes/参数)
- 梯度(FP32 或 FP16)
- 激活值(反向传播用,可能最大头)
粗略估算(ZeRO-0 情况下):
| 组件 | 每参数字节数 | 总计(70B) |
|---|---|---|
| 模型参数(FP16) | 2 | 140 GB |
| 梯度(FP16) | 2 | 140 GB |
| 优化器状态(Adam) | 8–12 | ~700 GB |
| 激活值 | 高度依赖 batch 和 seq len | 可达数百 GB |
👉 总计可能超过 1.5 TB 显存(纯单卡不可能)
因此必须使用:
- 分布式训练(ZeRO-3 + DP + TP + PP)
- 多 GPU(如 64× A100/H100)
- 梯度检查点(activation checkpointing)
🖥️ 实际部署建议
| 场景 | 所需技术 | 最低显存(每卡) | GPU 数量估算 |
|---|---|---|---|
| FP16 推理 | 单机多卡并行 | ≥ 80 GB | 2~4× A100/H100 |
| INT8 量化推理 | GPTQ/AWQ | ≥ 40 GB | 2× A100 |
| INT4 量化推理 | GPTQ/AWQ | ≥ 20 GB | 2× A6000 (48G) |
| 训练 | ZeRO-3 + TP/PP | 多节点集群 | 32~64+ H100 |
✅ 示例:使用 vLLM 部署 DeepSeek 70B(INT4)
假设使用 AWQ 4-bit 量化:
- 参数显存:~35 GB(理论),实际加载后约 40~45 GB(含开销)
- 使用 vLLM + PagedAttention 优化 KV Cache
- 单卡 48GB(如 RTX 6000 Ada / A6000)
→ 需要至少 2 张 GPU 做张量并行
命令示例:
python -m vllm.entrypoints.api_server
--model deepseek-ai/deepseek-llm-70b
--tensor-parallel-size 2
--quantization awq
--dtype half
📌 总结:70B 模型显存需求概览
| 模式 | 精度 | 显存需求 | 是否可行 |
|---|---|---|---|
| 推理 | FP16 | ~140–180 GB | 需 2~4× H100 |
| 推理 | INT8 | ~70–90 GB | 2× A100 可行 |
| 推理 | INT4 | ~35–50 GB | 2× A6000 可行 |
| 训练 | FP16 + Adam | >1.5 TB | 多节点集群必要 |
🔍 如何自行估算?
你可以用以下工具辅助:
- Hugging Face Transformers +
device_map="auto"自动分配 - vLLM / Text Generation Inference (TGI) 提供量化和并行支持
- NVIDIA Maxine Memory Calculator(或自写脚本)
- 模型卡信息:查看官方是否提供部署要求(如 DeepSeek 官网)
🔗 参考资源
- vLLM GitHub
- Text Generation Inference
- HuggingFace Memory Guide
- AWQ: Activation-aware Weight Quantization
如果你有具体部署环境(比如用什么 GPU、是否接受量化、是否做训练),我可以进一步给出配置建议。
ECLOUD博客