显存容量与模型参数规模匹配,不能只看模型有多少参数:同一个模型,推理还是训练、采用何种精度、一次处理多少文本,都会改变实际需求。下面按四步估算,并用 Llama 3 8B 举例说明。
第一步:算出模型权重占用
先确认参数量和权重精度。基础公式是:参数量 × 每个参数的位数 ÷ 8 = 权重字节数。常见精度中,FP32 每参数约 4 字节,FP16 或 BF16 约 2 字节,8 位量化约 1 字节,4 位量化约 0.5 字节。量化后的比例是理论值,实际文件还可能包含缩放因子等额外信息。
以 8B(约 80 亿参数)模型为例,BF16 权重理论上约需 16GB,4 位权重约需 4GB。这里的 GB 按十进制估算;系统显示的 GiB 数值会略小。显存容量与模型参数规模匹配的第一道判断,就是比较权重占用与设备可用显存,而不是只看包装或规格上的总容量。

第二步:区分推理与训练
推理:再加缓存和工作空间
模型生成文本时,除了权重,还要为 KV 缓存及算子临时空间留位置。KV 缓存用于保存已处理文本的注意力信息,通常会随上下文长度和并发请求数增加;因此,短文本单次生成与长上下文、多用户同时生成,显存需求可能差别很大。用 4 位权重也不代表整套推理只占权重理论值。
训练:额外状态更多
全参数训练除了权重,还需要梯度、优化器状态和中间激活值。以 Adam 类优化器配合混合精度为例,粗略估算常达到每参数约 12 至 20 字节,具体取决于实现、精度和是否使用分片。激活值则受批次大小、序列长度、网络结构影响。微调时若只训练少量适配参数,需求通常低于全参数训练,但仍要计入激活值与基础模型权重。
第三步:按实际输入调整
把模型参数量、精度和使用方式写下来,再补上输入条件。推理场景重点记录上下文长度、batch size(批次大小)和并发数;训练场景重点记录序列长度、批次大小及训练参数范围。上下文翻倍会增加缓存压力,但不意味着总显存必定翻倍,因为权重占用相对固定。能降低缓存压力的做法包括缩短上下文、减少并发或选择支持缓存优化的推理设置。
- 查明模型参数量,注意“8B”代表约 80 亿参数。
- 按目标精度计算权重:8B 模型采用 FP16/BF16,权重约 16GB;采用 4 位量化,理论权重约 4GB。
- 根据推理或训练,补估 KV 缓存、激活值及运行时空间;不确定时先采用保守估计。
- 将估算总量与实际可用显存比较,并用目标上下文和批次做小规模验证。
第四步:留出运行余量再选设备
不要把显存算到刚好用满。作为初步规划,可额外预留约 10% 至 20% 给框架、驱动、临时张量及波动;这只是估算余量,长上下文或高并发任务可能需要更多。还要注意,多张显卡的显存通常不会自动合并成一块可供任意模型使用的连续空间;模型拆分还会带来配置和通信要求。
最后用实际工作负载核验:加载模型后逐步增加上下文或批次,观察显存是否接近上限,并检查是否出现分配失败。若余量不足,先尝试量化、缩短上下文、减小批次;若仍不满足,再考虑显存更大的设备或模型分片。这样判断显存容量与模型参数规模匹配,能避免只按参数量作出过于乐观的选择。
常见问题
参数量相同,显存需求一定相同吗?
不一定。精度、模型结构、上下文长度、批次大小和推理框架都会影响占用。
4 位量化后,8B 模型是否只要约 4GB 显存?
不是。约 4GB 是权重的理论估算,还要为缓存、运行时空间及其他开销留显存。
训练能否用推理公式估算?
不宜直接套用。训练还要存储梯度、优化器状态和激活值,通常明显高于只加载权重的推理。


