经常有人抱着一张显卡来问我:这张卡到底能跑多大的模型?我一般不会直接回答“能”或者“不能”,而是先反问一句:你说的“跑得动”,指的是能加载起来出文字,还是能稳定生成、速度还凑合?这两个答案之间,差的可能不是一星半点。
很多朋友只看显存大小,觉得“8GB显存就能跑8GB的模型”,或者“16GB显存怎么也能跑个13B的模型吧”。实际一运行,要么直接报显存不足,要么速度慢得让人怀疑人生。真正的问题在于:显存占用不是简单等于模型文件大小,也不是只跟参数规模挂钩。模型精度、量化方式、上下文长度、推理框架的开销,每一项都在“抢”你的显存。
这篇文章我就把“显存计算”这件事完整拆开讲透,从模型权重怎么估算,到KV Cache这些隐形开销怎么算,再到你手里的显卡到底适合哪个规模的模型,最后附上我实际跑模型时踩过的一堆坑和排查方法。看完之后,你不用再到处问人,套着公式自己就能判断七八分。
1. 先搞明白显存到底被什么吃掉了
1.1 第一笔账:模型权重的大小
模型文件在你的硬盘里占多少GB,和它在显存里占多少GB,是两个概念。推理时,模型参数必须被加载到计算设备里,这笔开销是显存占用的绝对大头。
核心公式其实特别简单:
权重显存占用 ≈ 参数量 × 每个参数占用的字节数
关键在于“每个参数占用多少字节”,这取决于你用的是哪种精度格式:
| 精度格式 | 每个参数占用 | 10B模型权重预估 |
|---|---|---|
| FP32(单精度) | 4字节 | 约40GB |
| FP16 / BF16(半精度) | 2字节 | 约20GB |
| INT8(8位量化) | 1字节 | 约10GB |
| INT4(4位量化) | 约0.5字节 | 约5GB |
看到这个表,你就能理解为什么同一个模型,有的显存版本只要5GB,有的却要20GB。参数数量没变,只是每个参数用更“省”的方式存放而已。
举个例子:一个7B参数量的模型,用FP16格式,权重就需要约14GB显存。你拿一张16GB显存的显卡去跑,好像刚好放得下,但因为还有一堆隐形开销,实际大概率会爆。这就是为什么很多人发现“理论够了,一跑就崩”。
1.2 第二笔账:运行时的一堆隐形开销
权重只是基础开销,真正让显存超支的,是下面这几项:
第一,KV Cache。这是自回归模型特有的缓存。模型在生成每一个新Token时,需要反复读取历史Token的Key和Value信息,为了不重复计算,推理框架会把它们缓存下来。这个缓存的大小跟模型结构、上下文长度直接相关,上下文越长,KV Cache越大。一个7B模型在4096上下文下,KV Cache可能占几百MB;如果你把上下文拉长到几万Token,它也能轻松占满好几个GB。
第二,底层加速组件的初始化开销。加载模型时,加速库会预先申请一块固定大小的显存,通常要占500MB到1GB左右。越是功能完整的框架,这块基础占用越大。
第三,计算过程中产生的中间变量和临时缓冲区。数学计算的中间结果需要临时存放,批量推理时这个缓冲区还会成倍放大。
这三块加在一起,我用一个经验性的结论:运行一个大模型,实际显存需求 ≈ 权重显存 + 2GB左右的基础开销,上下文特别长的时候还要额外再加KV Cache的大小。
1.3 一个能直接用的估算公式
把上面所有东西压成一句话:
所需显存 ≈ 参数量(单位B) × 每参数字节数 + 上下文长度相关缓存 + 1.5GB~2GB框架开销
如果不想算得太细,我日常用的粗糙版本更简单:
显存需求 ≈ 权重大小 + 2GB
比如13B模型的Q4量化版本,权重约7GB,加上2GB开销,至少要9GB显存才能跑。用这个公式看,8GB显卡去跑13B就是在悬崖边上跳舞,12GB显卡才踏实。
2. 量化等级怎么选:同一个模型,显存能差出好几倍
2.1 什么是量化,精度损失从哪来
量化本质上是一种“压缩”技术,把原来用16位浮点数存储的参数,拆成8位整数或者4位整数来存。
用一个生活中的类比:把一张百万像素的照片压缩成JPG,肉眼可能看不出差别,但细节放大后一定会有损失。模型量化同理,但关键是这个损失对最终效果的影响通常比想象中小得多,因为模型参数本身存在大量冗余,训练过程也天然耐噪。
4位量化并不是简单地把数据砍掉一半,而是会做分组缩放。常见方案会把参数按小块分组,每组一个缩放系数,尽量保留数值分布的特征。所以同样是4位量化,有的方案效果好,有的方案就差一些。
这里我想强调一件事:模型体积缩小带来的不只是显存容量方面的好处,推理速度一般也会更快。因为每一步生成都要把全部权重从显存里读一遍交给计算单元,权重越小,每次搬运的数据量越少,带宽压力越低,生成速度自然就上来了。
2.2 命名里那些数字和字母是什么意思
你下载模型的时候,会看到Q4_K_M、Q5_K_S、Q8_0之类的后缀。第一次接触的人很容易懵。
其实拆开看不复杂:
- Q后面的数字代表每个参数平均用多少位存储,Q4就是4位,Q8就是8位。
- 数字后面的_K_M或者_K_S代表分组和混合策略。M是中等体积,S是更小体积,L更大。它们主要影响不同层采用的具体量化粒度,最终表现为文件大小和质量的细微差别。
- 同一模型下,文件体积排序大致是:Q2 < Q3 < Q4 < Q5 < Q6 < Q8 < FP16。
实际使用中,我很少去纠结_K_M和_K_S的具体差别,更多是看Q后面那个数字。它们是同一份模型的不同压缩版本,文件大小差异是主要判断依据。
2.3 按场景选择量化位数的经验
不同场景对量化精度的敏感度完全不一样。我自己跑下来得出的经验是:
- 纯代码生成,对格式和符号要求高,建议至少Q5,条件允许直接Q8。
- 日常对话、文案写作、翻译,Q4_K_M是好选择,质量和体积平衡得非常好。
- 数学推理、逻辑判断这类任务,Q4和Q5的差距可能不明显,但Q8更稳。
- 如果你手里有32GB以上的显存,我会建议优先上Q8,基本能还原模型大部分能力。
- 2位、3位量化我一般不推荐,质量下降肉眼可见,只有显存实在不够时才拿来救急。
在处理中文内容的时候,量化损失可能更容易暴露,尤其是成语、长句、专业术语这些场景。我的习惯是:同一个模型,至少准备Q4_K_M和Q6_K两个版本,先用Q4快速验证功能,如果效果不达预期再换高精度版本。
3. 三步估算你的显卡能跑什么模型
3.1 先查显存的大小和带宽
第一步是搞清楚你的显卡到底有多少显存,以及有多快。显存大小决定你能“塞下”什么,显存带宽决定你跑得多快。
大小这个参数很好查。在系统任务管理器里就能看到,或者找显卡厂商提供的监控工具,都能直接读到总显存。这里提醒一句:系统面板显示的是“总显存”,不是“空闲显存”,而且你的显示器画面、游戏进程、桌面特效都在占显存,所以实际能给模型用的,永远比总显存少一些。
带宽这个参数容易被忽略,但很重要。同代显卡里,大显存版本通常带宽也更高;跨代对比时,新版中端卡可能比旧版旗舰卡带宽还高。带宽数据只能靠产品规格书查,或者用底层监控工具读取。
3.2 照着一份显存速查表挑尺寸
结合上面的估算方法,我整理了一份“显存容量—模型参数量”速查表,按4位量化估算,上下文按4096左右算:
| 显存大小 | 安全推荐范围 | 可以尝试的极限 | 备注 |
|---|---|---|---|
| 8GB | 7B~9B的Q4量化 | 13B的Q4+短上下文 | 记得关掉其他占显存的应用 |
| 12GB | 9B~14B的Q4,7B~8B的Q5 | 14B的Q5 | 日常已经比较从容 |
| 16GB | 13B~14B的Q5/Q6,8B的Q8 | 32B的Q4(部分层卸载) | 16GB是甜点容量 |
| 24GB | 32B级模型的Q4 | 34B的Q5,14B的Q8 | 本地跑中大型模型的起步线 |
| 32GB+ | 32B~34B的Q6/Q8 | 70B级Q4(需要卸载部分层) | 已进入半专业领域 |
| 48GB+ | 70B级Q4全量进显卡 | 70B级Q5/Q8 | 基本可以流畅跑大参数模型 |
这个表不是绝对标准,不同模型架构会有偏差,但用来确定大致方向已经足够。
3.3 三个真实算例演示完整过程
第一个场景:8GB显存,想跑一个8B参数模型。先选Q4量化版本,权重约5GB,加上KV Cache 0.5GB,再加上框架开销1.5GB,合计约7GB。还有1GB余量,结论是可以跑,但上下文长度控制在4K以内比较稳妥。如果换成Q5量化,权重到6GB出头,合计约8GB出头,就很悬了。
第二个场景:16GB显存,目标13B模型。Q4版本权重约7.5GB,加2GB开销,总共9.5GB,非常从容,甚至可以开长上下文。Q5版本权重约9GB,总需求约11GB,也能跑。Q8版本权重约13GB,加开销合计15GB,比较极限,但短上下文下可以一试。所以16GB显存玩13B,空间很充足。
第三个场景:24GB显存,想上32B模型。Q4版本权重约19GB,加KV Cache和框架开销约2.5GB,总计约21.5GB。可以跑,但余量不多。如果上下文拉太长,依然有爆显存的风险。这时候可以考虑给这32B模型选Q5版本,如果放不下,就退回上下文短一点的Q4。
跑完这些例子你会发现,显存越大,你的选择面越宽;显存越小,每一个参数选择都像在做取舍。
4. 选模型时容易被忽略的速度问题
4.1 显存带宽才是速度瓶颈
很多人只关心“能不能加载”,忽略了“加载后跑多快”。一个模型能塞进显存,不代表生成速度能接受。
生成一个Token的流程,可以粗略理解为:把模型的所有参数从显存里读一遍,交给计算单元处理,然后产生一个Token。所以每一步生成都要“全量读一遍模型权重”。这时候,显存带宽成为决定性因素。
用一个具体算式理解:
理论极限生成速度(每秒Token数) ≈ 显存带宽 ÷ 模型权重体积
比如一个10GB的模型,跑在带宽为500GB/s的显卡上,理论极限大约是50 Token每秒;如果显卡带宽只有300GB/s,就只能到30 Token每秒。如果你的模型因为量化不彻底,权重从10GB膨胀到15GB,速度还会再掉三分之一。
这就是为什么同一张显卡上,Q4模型通常比Q8模型生成速度快一截:计算量基本相同,但每次搬运的字节数少了很多。显存带宽越低的显卡,越应该重视量化等级。
4.2 计算单元不足时信号的识别
有些显卡显存很大,但计算单元数量一般,跑小模型可能感觉不出来,跑大模型时每一步运算时间明显拉长。这时候你会看到显存占用率很高,但速度依然上不去。
我的判断经验是:如果显存占用率高,但生成速度连理论带宽推算出的上限的一半都没达到,说明计算单元已经撑不住了。这种情况光靠降低量化等级解决不了,因为降低量化等级减少的是搬运时间,计算单元满负荷依然是瓶颈。唯一能做的就是换更小的模型,或者降低输出长度、减少复杂解码的负担。
反过来,如果显存占用率低,速度也不快,那大概率是部分模型被卸载到内存里去了,这才是更需要警惕的场景。
4.3 显存不够时的CPU卸载策略
当显存实在装不下整个模型时,很多推理框架支持把一部分层放到内存里,让CPU参与计算,这就是“卸载”。听起来很完美,但代价非常明显。
内存带宽和显存带宽完全不在一个量级。哪怕是最新的内存,带宽通常也只有几十GB每秒,而显存动辄几百GB每秒。模型每多卸载十个百分点,速度可能下降一半以上。当你把大半个模型塞进内存里,生成速度可能掉到每秒几个Token,基本上只适合跑非常短的文本。
实际操作中,我会把卸载当作“能用”的兜底方案,而不是日常方案。与其硬上一个大模型然后忍受蜗牛速度,不如换一个小一档的模型全量放进显存,体验反而好得多。
5. 实操中我遇到过的问题和排查记录
5.1 一加载就报显存不足
这个问题出现频繁,原因通常是只算了模型权重,没算框架开销和KV Cache。
我遇到过一次特别典型的:8GB显存,跑一个权重只有5.5GB的量化模型,理论上够,结果加载就崩。后来排查发现,问题出在上下文长度设置过高,KV Cache预留了好几个GB,再加上框架初始化的显存,瞬间就超了。把上下文从32K降到4K,问题立刻消失。
所以排查思路很明确:先用公式算一遍总需求,再检查上下文长度。如果上下文已经最短了还是报错,就换更低精度的量化版本,或者把部分层卸载到内存。
5.2 显存占用比估算高出一大截
估算显示应该占8GB左右,任务管理器却显示显存几乎打满。这种事情很常见,因为任务管理器看到的是整个显卡的占用,包括桌面、浏览器、后台渲染,全部加起来当然比模型单一项高。
推理框架自己的日志或系统级别的监控工具才能看到模型具体的显存占用。所以我建议:
- 估算时主动留出1GB~1.5GB的系统余量。
- 跑模型前把不必要的浏览器后台标签页关掉。
- 用框架自带的状态输出查看实际占用,不要只看任务管理器。
另外,有些框架默认会开启多批次并行缓存,在后台预分配一大块显存。查一下启动参数里的批处理配置,把它调小,显存占用立刻能降下来。
5.3 加载成功但速度让人崩溃
模型能正常对话,但生成速度慢到每个字要等好几秒。这种情况十有八九是发生了卸载,也就是说部分层放在内存里,被CPU处理了。
排查方法很简单:加载时看框架输出的设备信息,它会列出来哪些层放在显卡上、哪些放在CPU上。如果显卡层数量不够,适当减少上下文长度,或者换更小量化版本,争取让全部或绝大部分层装进显存。
还有一个让人容易忽略的坑:如果你在后台开着其他用到显卡的程序,比如视频渲染或者直播推流,显存的空闲部分会被压得很小,推理框架宁可卸载也不愿意跟你抢显存。
5.4 生成的文字质量明显变差
同一个模型,之前跑得好好的,换了一个更小的量化版本之后,开始出现答非所问、逻辑混乱、中文错别字变多的问题。
我遇到过几次,基本都指向同一个原因:量化等级压得太低,或者选了一个效果很差的量化策略。尤其是2位和3位量化,质量损失非常明显。如果这个模型是你拿来做正经事的,建议直接换Q5以上的版本。
另外需要注意的是:有些量化版本是在更大模型上套壳产生的,质量本身不可控。看到模型源文件比较小、但宣称参数很大时,要多留个心眼。
5.5 一张速查表排查常见故障
| 现象 | 可能原因 | 优先排查项 |
|---|---|---|
| 直接加载失败 | 总需求超过显存 | 减少上下文长度,降低量化等级 |
| 显存占用异常高 | 框架预分配、批量缓存过大 | 调小批处理尺寸,关掉多余后台进程 |
| 生成极慢 | 部分层被卸载到内存 | 查看层分配日志,减少CPU承担比例 |
| 生成乱码、答非所问 | 量化过度或策略不佳 | 换Q5或Q8版本,检查源文件来源 |
| 温度、风扇起飞 | 计算单元满载 | 换更小模型,或降低上下文长度 |
这些坑我自己基本都踩过一轮,好在每一条的排查路径都相对固定,对着表来一遍,基本上能找到问题。
根据我个人的习惯,每次拿到新显卡或者新模型,我都会先跑一遍“三件套”:算权重、查上下文、看加载日志。确认了基础数字之后,再决定用哪个量化版本。这种流程看起来繁琐,但能帮你省下大量反复重启试错的时间。最后补一句:下载模型时不管多着急,先选好对应显存的量化版本再动手,这个顺序不能反过来。