先说明一个问题:很多人看到"我的显卡能跑多大的模型"时,第一反应是看参数数量。比如7B模型、13B模型、70B模型,好像量和显存直接划等号。实际跑起来完全不是这么回事——同一个7B模型,有人在8GB显存上流畅跑,有人16GB却爆显存;同一张24GB显卡,有人能跑32B量化版,有人连14B都开不了长上下文。核心原因在于,你真正需要算的不是"模型有多大",而是"模型跑起来时到底会占多少显存"。
这篇文章就围绕显存计算这事展开,把选型逻辑讲透。内容包括:显存里那笔账到底由哪几块构成、不同显存档位适合哪些模型、二十多GB显存的单卡在日常部署中能做到什么程度、以及显存之外哪些指标同样卡脖子。目标读者是手里有一张或多张显卡、想跑本地大模型或个人推理服务的人,也包括准备买卡、租卡但不知道选多大规模才不浪费的朋友。
1. 显存需求的真实构成:为什么模型参数不是唯一标准
1.1 四笔必须算清的账
把一个模型加载到显卡里准备推理时,显存里不是只放权重文件那么简单。以一张24GB显卡为例,你在nvidia-smi里看到的占用峰值,通常包含下面四块:
第一块是模型权重本身。这个最基础,根据保存精度不同,每参数字节数也不同,FP32占4字节,FP16/BF16占2字节,INT8占1字节,INT4约0.5字节。一个70亿参数模型,用FP16保存就是约14GB权重,但它加载后实际占用还会更高,因为推理框架往往会在显存里保留额外的工作副本。
第二块是KV Cache。Transformer结构推理时,每生成一个token都要根据之前所有token的Key和Value去算注意力,所以框架会把历史token对应的K、V缓存留在显存里。KV Cache大小和上下文长度直接相关,计算公式可以粗略表达为:
KV Cache字节数 ≈ 2(K与V两组)× 层数 × 每层KV维度 × 序列长度 × 批次数 × 单值字节数
不同模型差距很大。以某8B模型为例,32层、KV维度1024,FP16精度下跑8K上下文,KV Cache差不多在1GB量级;但一些没有用GQA分组查询注意力、KV维度很高的模型,同样8K上下文能吃下4GB以上显存。模型文件明明只有5GB,上下文一拉长,显存占用翻倍就是这个原因。
第三块是激活值。推理场景下batch为1时,激活值通常只占几百MB到1GB;但如果开了大batch提升吞吐,批量请求多、序列又长,激活值可能冲到3GB以上,不能直接忽略。
第四块是框架与驱动的固定开销。CUDA context、PyTorch的缓存预留、推理引擎的显存池,一般固定吃掉500MB到1GB。这个属于"不管跑什么都得先交的钱"。
1.2 把公式落到自己显卡上
把上面四块加起来,可以写一个足够做选型判断的估算式:
总显存需求 ≈ 参数量 × 每参数精度字节数 + KV Cache + 激活值 + 0.5~1GB框架开销
拿几个典型搭配来算:
- 7B模型、Q4量化(约4GB权重),4K上下文下KV Cache约0.5GB,加1GB开销,总需求约6GB,8GB显卡可以跑,但要关掉其他占显存程序。
- 13B模型、Q4量化(约7.5GB权重),8K上下文下KV Cache约1.5GB,加1GB开销,总需求约10GB,16GB显卡比较舒服,8GB显卡只能把上下文压到2K以下勉强跑。
- 32B模型、Q4量化(约19.5GB权重),16K上下文下KV Cache和激活值加起来可能要5GB以上,24GB显卡刚好卡在临界点,这也是很多人抱怨"32B量化版放在24GB卡上总是崩"的根因。
- 70B模型、Q4量化(约40GB权重),哪怕只给2K上下文,加上开销也要43GB以上,单卡能跑的企业卡至少得48GB,24GB显卡基本无望。
建议你在做任何选型决定前,都先按这个公式预估算一笔,别只看模型页面上写的"文件大小7.8GB"就觉得谁都能跑。
2. 按显存档位选模型:8GB、16GB、24GB、48GB分别该跑什么
2.1 8GB档位:别碰10B以上的中高量化模型
8GB显存是消费级甜品卡的常见配置,3060Ti、4060、3070这些。此前群里不少人问"8GB能不能跑14B Q4",直接给结论:能跑,但体验很糟糕。14B Q4量化权重约8GB,加载权重后基本没有KV Cache空间,推理时会大量触发offload,把计算拿到内存和CPU上做,生成速度会降到每秒钟几个token,几乎没有实用价值。
8GB显卡的甜点区间在7B~9B模型加Q4量化,上下文控制在4K~8K。日常聊天、写代码补齐、做文档摘要,这个组合是够用的。如果一定要跑更大模型,优先做三件事:第一把上下文压到2K,第二关掉框架的显存自适应扩展,第三清理后台所有吃显存进程,比如浏览器硬件加速。
2.2 16GB档位:消费级性价比之王
4070Ti Super、4080、5070Ti这类的16GB显卡是我认为最实用的本地推理门槛。它可以把14B模型在Q4/Q5量化下跑得很从容,7B模型甚至可以尝试FP16精度,视觉语言模型也能在图生文场景下保留足够显存给图像编码器。
如果你手头是16GB显卡,选型优先级建议是这样:
- 首选14B~16B的Q4_K_M或Q5量化版,上下文给到16K都没压力。
- 想追求效果可以上14B的Q6/Q8,代价是占用逼近11~12GB,开着长上下文会有点险。
- 32B模型用Q3甚至Q2超低量化能在16GB卡上"点亮",但输出质量明显劣化,我认为没有长期使用价值,当技术实验可以。
2.3 24GB档位:单卡跑32B的临界点
24GB是很特殊的一个容量,既有3090、4090这种消费级旗舰,也有P40、L20等企业加速卡。它的核心价值在于能装下32B模型的Q4量化权重,或者34B级别模型的中低量化版。建议配置为32B Q4量化加8K~16K上下文,这是单卡24GB能做到"既跑得动又有点质量"的组合。
但要泼一盆冷水:24GB跑70B Q4基本不现实,除非接受极低上下文和重度offload。70B Q4光权重就超过40GB,24GB差得太远了。有些玩家会用多卡张量并行拼容量,这个后面会讲,但消费级平台拼多卡跑的代价很大。
同样的24GB,不同卡用途差异也很大。P40这块卡经常被新手盯上,原因很简单:二手便宜、24GB显存量大。但它不适合打游戏,原因不只是没有显示输出接口,Pascal架构的指令集覆盖、驱动支持、显存带宽都跟不上现代游戏的需求,与其说它是"显卡",不如说它是一张AI推理计算卡,适合跑长时间任务而不是交互式体验。L20则是企业推理定位,显存48GB,适合部署中大规模模型的高并发推理服务,个人玩家单卡用L20有些浪费。
2.4 48GB及以上:服务性部署的入场券
48GB档位(L20、A6000等)可以正式部署70B级别模型的Q4量化,或者做34B模型的高精度版本。但需要注意,70B Q4约40GB权重,加上KV Cache和开销,48GB显存能给的上下文余量并不多。如果目标是稳定的长对话服务,建议直接看80GB(A100/H100)或通过多卡方案扩展。
多卡拼显存也不是把容量简单相加。张量并行会把每层的权重切到多张卡上,显存需求按卡数近似均摊,但卡与卡之间要频繁同步中间结果,NVLink或高速互联是必须的,纯PCIe互联时通信开销会严重拖慢推理速度。我实际对比过:两张PCIe直连的消费卡拼70B,速度经常不如一张48G企业卡跑同样的模型,日常折腾成本还更高。
3. 一次完整的选型验证:从查卡到确认能跑的实操路径
3.1 拿到机器后先做三件事
无论新配机器还是租了云服务器,第一步不是急着下模型,而是确认显卡到底被系统正确认出来了。命令行是最直接的:
# NVIDIA显卡,查看型号、驱动版本、显存总量和当前占用 nvidia-smi # 实时刷新,每秒一次,看波动 watch -n 1 nvidia-smi # AMD显卡 rocm-smi # 更直观的终端监控面板 nvtop这里有个特别容易踩的坑:nvidia-smi里显示的CUDA Version只是驱动所支持的CUDA最大版本,不代表你当前运行时的CUDA版本。驱动支持12.4,但PyTorch可能用的是CUDA 12.1运行时,这个概念别搞混。检查PyTorch是否识别显卡,用这个直接确认:
import torch print(torch.cuda.is_available()) print(torch.cuda.get_device_properties(0))如果是Intel显卡,比如Arc系列或核显,就不能装NVIDIA CUDA那一套,需要安装Intel Extension for PyTorch(IPEX)并配置SYCL环境,PyTorch才会把GPU当计算设备用。AMD显卡同理,走ROCm或第三方翻译层,框架认可之后才谈得上显存计算。
3.2 从OOM报错反推显存缺口
如果模型已经下载好了,跑起来爆显存,报错通常是:
CUDA out of memory. Tried to allocate 512.00 MiB这种报错只会告诉你"还差512MB",不会告诉你是哪一块缺了。我的排查顺序是固定的一套:
- 先把上下文长度改到最小(比如512),batch设为1,再启动模型观察峰值显存。如果这时显存占用接近权重加1GB开销,说明权重放得下。
- 在最小配置能跑通的基础上,逐步拉长上下文,每加一档记录一次峰值显存。如果显存增长斜率突然变大,说明KV Cache在吃显存,需要控制长度。
- 如果最小配置都放不下权重,说明量化档位还不够低,或者并发进程占了显存。先看是不是有僵尸进程占着显存,用
nvidia-smi查看进程列表,必要时直接清理。 - 清理不掉考虑换更低量化,比如Q8换Q4,而不是硬开offload,硬开offload经常会让你误判"模型能跑",实际上速度已经到了不能用的地步。
3.3 实测数据的参考意义
贴一份我实际跑过的经验值,供参考,具体数值因模型架构和框架不同会浮动,但比例关系是稳定的:
| 模型档位 | 量化 | 权重体积 | 8K上下文KV Cache | 预估峰值占用 | 建议最低显存 |
|---|---|---|---|---|---|
| 7B | Q4_K_M | 约4.5GB | 约0.8GB | 约6.5GB | 8GB |
| 14B | Q4_K_M | 约8GB | 约1.2GB | 约10.5GB | 16GB |
| 32B | Q4_K_M | 约19.5GB | 约2.5GB | 约23.5GB | 24GB |
| 70B | Q4_K_M | 约40GB | 约5GB | 约46GB | 48GB |
注意这些值都是以单并发推理估算的,如果做并发服务,kv cache和激活值都会翻倍甚至三倍增长,这也是为什么企业场景常常选择大显存企业卡而不是消费级大显存卡——算力足够但显存容量才是并发吞吐的上限瓶颈。
4. 显存之外的关键约束:带宽、算力与混合显卡选型误区
4.1 显存带宽决定"出字速度"
很多人在30系、40系显卡之间纠结时只看显存容量,却忽略了另一个关键指标:显存带宽。大模型推理属于典型的"带宽敏感型"负载,每生成一个token都要把权重从显存搬运到计算单元,带宽越高,生成速度越快。
举一个例子:同样是24GB显存,P40的带宽约346GB/s,而4090超过1000GB/s,跑同一个14B量化模型,4090的token生成速度可能是P40的2到3倍。P40能跑不代表跑得舒服,就是这个原因。选卡时不能只对着显存容量选,建议把带宽、FP16算力、显存容量三个维度一起看。
网上常有人晒"显卡AI算力TOPS排行"或"显卡天梯图",这类排行可以作为初步参考,但天梯图通常反映游戏帧率,AI推理场景下带宽和容量往往比单纯的FP32/FP16算力更先碰到瓶颈。正确姿势是:先按容量筛卡,再按带宽挑型号,最后看算力是否够任务用。
4.2 PCIe带宽和多卡互联的真实代价
单卡放不下模型时,最自然的想法是再加一张卡。但显存计算完成后,还有一个通信账要算。典型的PCIe 4.0 x16单向带宽约32GB/s,而多卡张量并行中每计算一层都要做一次全规约通信,模型越大、层数越多,通信占用的时间越明显。结果就是双卡拼起来的有效算力往往只有单卡的60%~80%,具体取决于互联方式。
我个人经验是:如果一张48GB企业卡能解决容量问题,优先选单卡方案,省掉多卡调试的麻烦;如果必须多卡,至少保证卡间有NVLink/NVSwitch级别的互联。消费级平台组多卡跑70B模型,不是不能跑,而是你花在调优上的时间,也许早够租一台高显存云GPU跑几十次实验了。
4.3 混合显卡场景下的显存判断逻辑
还有一种常见情况:机器上既有核显又有独显,或者同时插了A卡和N卡,模型默认跑到了核显上,显存计算全部失真。判断方法很简单,跑模型时看任务管理器或nvidia-smi里哪块GPU的显存占用在涨。如果模型没走独立显卡,需要显式指定设备:
CUDA_VISIBLE_DEVICES=0 python run_model.py在PyTorch里也可以强制指定:
torch.cuda.set_device(0)混合显卡平台还有个隐蔽问题:显卡型号被魔改或刷过BIOS后,系统识别的显存和实际物理显存可能不一致。用MATS这类NVIDIA显存检测工具可以排查硬件级故障,但它需要对应驱动版本和测试环境,普通用户先用GPU-Z看传感器信息更实际。如果识别显存和标注容量对不上,优先怀疑显存虚标或颗粒故障,而不是去调软件参数。
5. 显存看着够却跑不动,以及驱动报错背后的排查路径
5.1 显存够用但速度极慢,先做这三步
显存计算都验证过了,剩余容量也足够,但实际跑起来还是卡顿,我遇到的情况基本就三类:
第一,显存碎片化。跑了半天模型又关掉,显存里到处是小的空闲块,新的模型不一定能利用角落碎片,框架会显式报OOM。先把所有显存进程清干净,再看空闲显存是不是恢复了。
第二,共享显存与专用显存混淆。Windows任务管理器里显示的"GPU内存"经常包含共享系统内存,这部分带宽极低,看起来显存够用,实际计算全部命中慢速路径。要看"专用GPU内存"这个数值,而不是总内存。
第三,功耗和散热限制。消费级显卡满载跑大模型时功耗会拉满,小机箱或笔记本散热跟不上就会降频,表现就是显存余量充足但token生成速度忽快忽慢。用watch nvidia-smi观察温度是否到90度以上,是的话先解决散热。
5.2 驱动层报错的边界判断
热搜里常看到"显卡代码43""事件ID 0""nvlddmkm153"这类问题,很多人第一反应是显卡坏了。根据我处理几十次类似问题的经验,驱动报错的概率远高于硬件损坏。
代码43在Windows设备管理器里是"设备已停止或报告错误",常见原因包括驱动不匹配、显存超频过度、供电不足。处理顺序是:查看系统事件日志中显卡相关来源的详细信息;在设备管理器里禁用再启用设备;用DDU工具在安全模式下彻底清除旧驱动后重装官方驱动;最后才考虑硬件问题。
nvlddmkm相关事件频繁出现时,先检查是不是驱动新版本与系统组件冲突,回退上一版驱动往往能解决。真的需要确认显存硬件有没有损伤,再上MATS或专业检测卡,那是售后级别的操作,普通排查不需要走到那一步。
5.3 判断该优化还是该换卡的三条线
当你已经做完整轮排查,发现现有显卡确实不够跑目标模型时,用三条线来判断方向:
- 缺口小于3GB:优先优化,比如降低量化档位、控制上下文长度、限制并发数,通常能挤出来。
- 缺口在3~10GB:视投入产出决定,如果是租卡就换更大规格的实例,如果是自有卡且经常要跑大模型,可以考虑出掉换卡。
- 缺口超过10GB:别折腾了。硬凑量化会让效果劣化到没法用,offload又会把速度拖到不可接受,直接换卡或租云GPU是更理性的选择。
租卡时也记得用前面的显存公式估算实例规格,别盲目选最大显存。比如你只需要70B Q4加4K上下文,48GB实例就够,选中80GB实例多出来的成本是纯浪费。云平台高峰期经常显示无空闲高显存实例,与其干等,不如用显存公式往下找一个容量恰好满足需求的档位,排队概率会低很多。
落到最后,我会把估算公式和实测表格放在手边,每次拿到一张新卡、要部署一个新模型前先算一遍,省掉无数"试试看"的时间。显卡选型这事,本质上是容量、带宽、算力、互联和预算之间的平衡,显存计算只是第一步,但通常是最关键的一步——算明白了,后面少走弯路。