大模型的训练显存 vs 推理显存,显存 vs 内存
GPU 显存深度解析:推理 vs 训练
1. 核心概念区分
在深入大模型之前,先厘清两个基础硬件概念:
- 内存 (RAM):CPU 的“工作台”,用于通用计算和系统运行。
- 显存 (VRAM):GPU 的“专用工作台”,专门用于存储深度学习模型计算所需的海量数据。显存大小直接决定了你能跑多大的模型。
图片来源于:砖一块一块搬,感谢[玫瑰][玫瑰][玫瑰]
2. 推理显存 (Inference VRAM)
定义:模型训练完成后,在实际部署使用(调用)阶段,GPU 执行前向传播所需的显存。
特点:相对轻量,不需要保存用于参数更新的中间状态。
显存主要被谁占用了?
- 模型权重 (Model Weights)
- 地位:显存占用的“基本盘”。
- 规律:参数量越大、精度越高(如 FP32 > FP16),占用越大。
- KV Cache (键值缓存)
- 作用:生成文本时,为了避免重复计算历史Token而缓存的中间状态。
- 规律:随对话长度(Context Length)和并发数(Batch Size)线性增长。这是长文本场景下的显存杀手。
- 激活值 (Activations)
- 作用:前向传播产生的临时计算结果。
- 规律:推理时这部分通常很小,可以忽略不计。
公式总结:
推理显存 ≈ 模型权重 + KV Cache + 少量激活值
3. 训练显存 (Training VRAM)
定义:在模型学习阶段(包括预训练、全量微调),GPU 进行反向传播和参数更新所需的显存。
特点:极度消耗。除了模型本身,还需要大量空间来记录“学习过程”。
显存主要被谁占用了?
- 模型权重:同推理,必须加载到显存中。
- 梯度 (Gradients)
- 作用:反向传播计算出的参数调整方向。
- 大小:通常与模型参数量1:1相等。
- 优化器状态 (Optimizer States)
- 作用:如 Adam 优化器需要存储一阶动量和二阶动量。
- 大小:通常是模型参数量的2倍(FP32格式下)。这是训练显存的大头之一。
- 大量激活值
- 作用:为了反向传播计算梯度,必须保留前向传播每一层的中间结果。
- 规律:与Batch Size和序列长度强相关,往往占据最大比例。
公式总结:
训练显存 ≈ 模型权重 + 梯度 + 优化器状态 + 大量激活值
4. 显存估算实战指南
如何快速判断你的显卡能不能跑起来?
| 场景 | 估算公式 | 备注 |
|---|---|---|
| 推理显存 | 参数量 × 精度字节数 | 需额外预留 KV Cache 空间 |
| 全量微调需要的训练显存 | ≈ 5∼7 × 推理显存 | 包含梯度、优化器状态等 |
| 高效微调 (LoRA) 需要的训练显存 | ≈ 0.1 × 全量微调显存 | 冻结主模型,只训少量参数 |
| QLoRA需要的训练显存 | ≈ 参数量 × 0.5 Bytes | 4bit 量化加载,极致省显存 |
✏️ 练习题解析
题目:一个7B (70亿参数)的模型,使用FP16 (半精度)进行全量微调,大约需要多少显存?
推导步骤:
- 计算推理显存(模型权重):
- 7B×2 Bytes (FP16)=14GB
- 计算全量微调显存:
- 根据经验系数(取 5~7 倍):14 GB × (5∼7) ≈ 70∼98 GB
结论:
需要至少80GB左右的显存才能流畅进行全量微调。
- 单张 RTX 3090/4090 (24GB)❌ 无法运行。
- 单张 A100 (80GB)⚠️ 勉强运行(需优化)。
- 多卡并联✅ 推荐方案。
