大模型显存占用对比:参数量、精度和上下文各占多少
显存占用到底由什么决定
同样标注 7B 的模型,有人 16GB 显卡跑得很稳,有人 24GB 还报显存不足,差异通常不在参数量本身,而在精度、上下文长度和并发数这三项条件。
做大模型显存占用对比时,必须先固定这些条件,否则数字没有可比性。
推理阶段的显存大致由四部分组成:模型权重、KV Cache、激活值和框架预留开销。
下面逐项说明怎么估算。
权重占用:参数量乘以每参数字节数
权重是最容易算的部分。
每个参数占几个字节,取决于加载精度:
- FP16 / BF16:每参数 2 字节
- INT8:每参数约 1 字节
- INT4:每参数约 0.5 字节
以 7B 模型为例,FP16 下权重约 14GB,INT8 约 7GB,INT4 约 3.5GB。
注意这是理论值,实际加载时还会有少量额外开销,所以 7B FP16 在 16GB 卡上剩余空间已经很紧张,几乎没有余量给长上下文。
一个常见误区是把量化后的权重当作全部占用。
量化只压缩权重,KV Cache 仍然按推理精度计算,长上下文场景下这部分可能反超权重。
KV Cache:最容易被低估的部分
KV Cache 缓存的是注意力计算中的键值对,避免每生成一个 token 都重算历史。
它的占用随上下文长度和并发请求数线性增长。
估算公式可以简化为:
KV Cache ≈ 2 × 层数 × 隐藏维度 × 序列长度 × 并发数 × 每元素字节数
以常见的 7B 模型(约 32 层、隐藏维度 4096)为例,FP16 下单个请求 4096 token 的 KV Cache 大约在 1GB 量级;
如果并发 8 个请求、上下文拉到 32K,这部分会放大到十几 GB。
这就是为什么同一个模型短对话正常、长文档处理就爆显存。
对比不同模型时,要同时看层数和隐藏维度,不能只看参数量。
有些模型参数量相近,但层数更深或用了分组查询注意力(GQA),KV Cache 差距明显。
激活值与框架开销
激活值是前向计算中的中间结果,通常在推理时占比不大,但在长序列和大 batch 下会上升。
框架开销包括 CUDA 上下文、推理引擎的预分配显存池等,一般预留 1-2GB 比较稳妥。
实际部署时,常见推理框架会预先占用一部分显存做内存池。
如果启动后 nvidia-smi 显示的占用比理论估算高不少,多数是这部分预分配,不代表模型本身超了。
怎样做一次有意义的对比
要让大模型显存占用对比的结论可用,建议按以下条件对齐:
- 固定精度:FP16 和 INT4 不能直接比,先明确目标精度
- 固定上下文长度:按业务真实的最大输入输出长度估算,而不是默认 2K
- 固定并发数:单请求和 8 并发是两种完全不同的显存需求
- 留出余量:按估算值的 1.2 倍左右规划显卡,避免临界运行
验证方法很直接:部署后运行 nvidia-smi 观察稳定状态下的占用,再用压测工具模拟目标并发和上下文长度,看峰值是否触及显存上限。
几个容易踩的坑
- 只看权重估算,忽略长上下文下的 KV Cache 增长
- 把量化模型的显存需求按权重同比缩小,实际压缩比例达不到
- 多卡部署时忘记算通信和并行带来的额外开销
- 用短 prompt 测试通过就认为生产环境没问题
如果显存确实不够,优先考虑缩短上下文、限制并发、启用量化或换用支持 GQA 的模型结构,而不是盲目加卡。
常见疑问
7B 模型 16GB 显卡够用吗?
FP16 权重约 14GB,短上下文单请求勉强能跑,但几乎没有余量;INT8 或 INT4 量化后余量明显更充裕,长上下文场景更现实。
为什么量化后显存没降多少?
量化主要压缩权重,KV Cache 和框架开销不变。上下文越长、并发越高,权重在总占用中的占比越小,量化收益越不明显。
参数量相同的两个模型显存一样吗?
不一定。层数、隐藏维度、注意力机制(是否用 GQA)不同,KV Cache 大小会差不少,需要按结构参数分别估算。