很多人装完环境、下载完权重,一加载就 OOM,或者跑起来只能塞几百 token 上下文。问题不在卡,在于没先算过账。这篇不讲空话,给你一套能自己套用的估算流程:从参数量换权重体积,再叠上 KV 缓存、框架开销和并发余量,最后落到该租什么卡、开多少上下文。
很多人装完环境、权重也下完了,一加载就 OOM;运气好加载起来,上下文只敢开到很小,多来两个请求就开始排队。问题通常不在卡本身,在于动手前没算过一笔账:这套模型到底要吃掉多少显存。
这篇给一套能自己套用的估算流程,从参数量换成权重体积,再叠上 KV 缓存、框架开销和并发余量,最后落到该租什么规格的卡、上下文能开多长。不谈空话,每一步都给你可验证的动作和判断标准。
为什么没人能给你一个准数
显存需求由四个变量共同决定:量化档位、上下文长度、并发数、推理框架。任意一个变了,答案就变。所以任何一句「这模型要多少显存」如果不带这四个前提,基本没法直接采信,只能当个粗略锚点。
| 变量 | 往哪变 | 显存往哪走 |
|---|---|---|
| 量化档位 | 精度越高 | 权重部分越大 |
| 上下文长度 | 开得越长 | KV 缓存线性涨 |
| 并发数 | 同时处理的请求越多 | KV 缓存成倍涨 |
| 推理框架 | 带预分配池的框架 | 启动就吃掉一大块 |
同一个模型,跑单轮短问答和跑长文档摘要,占用能差出一大截。所以正确做法不是去找一个标准答案,而是学会按自己的场景把公式套一遍。下面六步就按这个顺序来。
第一步:权重占多少,按参数量和精度算
权重体积近似等于参数量乘以每参数字节数。这个概念如果还不熟,可以先去站内把量化、精度这些名词对上,别一上来就抄别人的结论。概念没对齐,后面全算错。
- 每参数字节数
- 指每个权重参数在显存里占几个字节,精度越低占得越少
- 量化档位
- 把高精度权重压成低位宽的档位,档位越低越省显存但越伤质量
- 分片文件
- 大模型权重通常切成多个文件存放,把它们的大小加起来就是实测权重体积
不同精度档位下的实际体积,建议到站内工具页按你手上真实文件算,别照抄别人的截图,因为各家分片方式和元数据会带来偏差。最靠谱的实测值是:下载前先看权重目录里分片文件的总大小,那个数字比任何公式都准。
- 先确认你要用的量化档位,是原始精度还是已经压过的版本
- 把权重目录里所有分片文件大小相加,得到实测权重体积
- 把这个数和公式估算对一下,差异过大就回去查是不是漏了文件
- 记下这个基线,后面加 KV 缓存和框架开销都以它为起点
第二步:KV 缓存,最容易被忽略的那一半
KV 缓存随上下文长度和并发数线性增长。短上下文时它不起眼,长上下文时它能反超权重,成为显存的大头。很多人算完权重觉得「卡够了」,一开长上下文就爆,问题就出在这。
粗略估法是:按每 token 每层的缓存大小,乘层数,再乘 token 数,实际取整后留出两成余量。这个算法不用精确到小数点,目的是让你知道量级——上下文翻倍,这一项大致也跟着翻倍。
| 场景 | 上下文 | KV 缓存相对权重 |
|---|---|---|
| 短问答、单轮 | 很短 | 占比很小,可忽略 |
| 中等对话 | 中等 | 开始明显,需要算 |
| 长文档摘要 | 很长 | 可能反超权重 |
| 高并发长上下文 | 很长 + 多请求 | KV 缓存成倍膨胀 |
另外注意模型结构:分组查询注意力这类结构比传统多头注意力省得多,选模型时看一眼结构说明,能省下不少后续麻烦。你的上下文开到多长、这一项涨到多少,可以对照站内部署测算页看同类的口径。
第三步:框架和运行时开销,别按裸模型算
推理框架会额外占显存:CUDA 上下文、激活值、临时缓冲区,通常要再留出一到几个 GB。这是很多人漏掉的一块,算权重和 KV 缓存加得刚刚好,结果一启动就报显存不足。
- 带预分配显存池的框架会一次性吃掉大块显存,启动时就要预留,不能按峰值慢慢涨算
- CPU 卸载路子显存占用低,但速度掉得明显,取舍看你能不能接受延迟
- 激活值和临时缓冲区随 batch、上下文变化,别只按空载估
- 同一模型换后端,占用落差可能很大,动手前先查清楚目标框架的默认行为
框架差异导致的占用落差,可以参考站内推理后端对比页面,看同模型不同后端的规格口径。选框架不只是选速度,也是在选你的显存预算怎么花。
第四步:按预算倒推该用哪张卡
先把「权重 + KV 缓存 + 框架开销 + 两成余量」加总,算出总需求,再对显卡显存向上取整。注意是向上取整,不是向下凑合,显存刚好卡在边界上最难受:能加载但上下文开不长,并发一上来就排队。
| 你的场景 | 显存取向 | 选卡思路 |
|---|---|---|
| 单轮短问答、验证用 | 偏小 | 单卡能装下权重加少量余量即可 |
| 长上下文单请求 | 中等偏大 | 优先看单卡大显存,别急着多卡 |
| 多并发服务 | 大 | 显存要够 KV 缓存膨胀,宁可多留一档 |
| 预算紧但要长上下文 | 看取舍 | 降量化档位或接受更短上下文 |
多卡要靠张量并行拼显存,但卡间通信有损耗,小规模推理未必比单张大显存卡划算。具体卡型号的显存、带宽和当前租用行情,到站内算力页对一遍再下单,别凭印象选卡。
- 算总需求把权重、KV 缓存、框架开销、余量四项加总,得到一个数字
- 对显存向上取整拿这个数字去对可选卡的显存,选第一个装得下的档位
- 验证并发按目标并发再算一次 KV 缓存,确认峰值仍在余量内
- 核对行情到站内算力与租用页面核对当时的规格和价格数字,再决定
第五步:租卡还是自己买,先算使用时长
偶尔跑、验证性质,按量租卡摊薄成本;天天跑且任务稳定、负载可预测,才轮到考虑买卡。判断的关键不是单价,而是你的实际占用时长——买回来闲置的卡,摊到每小时未必便宜。
- 先统计一周里真正需要跑任务的小时数,别按理论峰值估
- 租卡时确认显存规格、是否独占、能不能换机型
- 被绑死在一种卡型上迁移成本很高,换卡要重新验一遍显存预算
- 把电费、闲置时长和运维精力都算进去,再和租用对比
算账方式参考站内成本测算页,那里有把这几项摊在一起的算法。自建还是调用的分界线,站内另一篇已经讲透了,这里只补显存这一层的动作:不管租还是买,都得先把显存预算算清楚,否则两边都是白花钱。
第六步:动手前的三步验证
估算只是纸面,动手前花十几分钟做三步验证,能省下后面几小时的排查。核心思路是:先跑通最小配置,再逐步加压,全程看真实数字而不是估算值。
- 最小配置跑通先把上下文和并发都压到最低,确认能加载、能出结果,证明权重和框架没问题
- 逐步加压看峰值一点点加上下文和并发,用监控看真实峰值显存,重点观察稳定态和首 token 阶段的差距
- 记录自己的基线把上下文长度、并发数、显存峰值、生成速度记成一份表,下次换卡或换框架直接对照
算出来还是不够用,按这个顺序排查
顺序很重要,别一上来就换卡,那样既费钱又可能没解决问题。先动成本最低、见效最快的,逐级往上加代价。
- 先降上下文长度,这是见效最快的一刀,代价是能处理的文本变短
- 再考虑降量化档位,但要接受可能的质量损失,跑一遍效果再定
- 关掉不必要的预分配和缓存池,看框架参数里有没有可调的显存比例
- 确认是显存不够还是带宽不够,两者症状不一样,换错卡白花钱
- 显存被占满但没跑任务,用检测工具查残留进程和碎片
前几条都试过仍不够,才轮到换卡。换卡前到站内工具页用检测工具确认一下占用来源,别把碎片和残留当成模型真实需求,那样只会越换越贵。
下一步:把数字对一遍再下单估算方法有了,剩下的就是把当时的规格和行情对一遍。到站内算力与工具页面核对显卡规格、租用行情和显存测算,确认你的预算能覆盖算出来的总需求,再动手租卡或买卡,比事后排查省太多时间。→常见问题
27B 模型 4-bit 量化后在单张消费级卡上跑得动吗?
取决于你的上下文长度和并发。短上下文单轮问答通常能塞下,但上下文一开到长文档级别就可能爆。建议先用小上下文跑通,再用监控看峰值,逐步往上加,别一上来就按最大上下文配置。
显存够加载,但一跑长文本就崩,是哪里出问题?
大概率是 KV 缓存超了。权重是固定占用,KV 缓存随上下文和并发线性涨。先把上下文砍半试,能跑说明就是这个原因,再去调并发数或换更大显存的卡。
多张卡拼起来能不能跑更大的模型?
能,但要接受通信开销。张量并行会把每层计算切开,卡间同步频繁,卡越多效率越低。小规模推理往往单张大显存卡更省心,多卡更适合有稳定吞吐需求的场景。
量化和原版精度差多少,值不值得降档?
看任务。分类、抽取、格式转换这类结构化任务对精度不敏感,降档基本无感;长链推理、代码生成对精度更敏感,可能差出可用与不可用。量化档位的取舍逻辑站内专门有篇讲,这里不重复。
估算出来的数字和实际差多少算正常?
权重部分一般很准,偏差主要来自 KV 缓存和框架开销。如果实测比估算高出很多,先查是不是并发没算进去,或者框架预分配了显存池,这两项最常见。