本地大模型显存估算指南:多少GB显卡能跑什么模型
最近总有朋友拿着显卡配置单来问我8G显存到底能不能跑本地大模型模型文件都40G了是不是要买40G显存的卡这类问题问得多了我意识到很多人卡在同一个地方——把“文件大小”和“显卡能装多少”划等号。我这两年从8GB入门卡一路折腾到24GB大显存卡踩过的坑不少但搞清楚显存计算这套逻辑之后基本上一眼就能判断手里的显卡能跑什么档位。今天这篇就把显存计算的逻辑、不同精度模型的换算、以及具体怎么选模型一次讲清楚不讲虚的全是能直接抄作业的货。1. 显存到底被谁吃掉了1.1 模型的权重文件才是显存第一大户初看一个模型能跑多大先看“参数量”和“精度”。参数量是指模型里有多少个数字要存比如70B就是700亿个参数。每个数字按不同精度存储占用的字节数完全不同。精度每参数占用说明FP324字节训练常用最耗显存FP16/BF162字节推理常用高精度兼容性好INT81字节量化后精度损失不大显存减半INT4约0.5字节量化后显存最低日常推理主流所以同一个70B模型如果FP16存权重本身就要 70e9 × 2 ≈ 140GB这还没算运行时。而如果换成4bit量化权重大概只占 70e9 × 0.56 ≈ 39GB。显存需求差了三倍多。这也是为什么现在大家跑大模型都要用4bit量化档位。很多人以为“显存占用 模型文件大小”其实文件大小是压缩存放的模型加载进显存后还会膨胀一些后面我专门会讲这个坑。1.2 生成过程中KV Cache是隐形大户除了固定权重参数外模型在生成回答时还要维护一份叫KV Cache的东西。你可以把KV Cache理解为模型做阅读理解时的“临时笔记”它把之前已经看过的上下文写成键值对缓存起来避免每生成一个字都重算一遍。这份笔记会随着上下文长度增长而线性膨胀。对于常见的Transformer解码器架构KV Cache大小可以粗略换算成KV显存 ≈ 2K和V两个矩阵× 层数 × 上下文长度 × 单头维度 × 头数 × 精度字节数具体值因模型而异但以7B模型为例4K上下文下KV Cache占用大概0.5到1GB32K上下文下可能冲到4GB以上。所以哪怕权重只占5GB你开了超长上下文照样能把显存挤爆。这也是为什么很多框架默认不开启超长上下文要用长文得先算这笔账。1.3 训练和微调时显存需求会成倍增加上面说的都是推理也就是模型只用来应答。如果你还想自己做微调那显存账单完全不是一回事。除了权重和中间激活值优化器状态才是最大开销。以Adam优化器为例每个参数通常要额外存一份一阶动量、二阶动量和主副本FP32下光是优化器状态就占 12 字节/参数左右。举个直观的例子7B模型用FP16做全参数微调光是权重加优化器状态就要约 56GB 显存起步再加上中间激活值消费级显卡基本不用想全量微调。所以现在社区常用的LoRA等参数高效微调本质就是把需要更新的参数缩减到极小一部分才能把整块训练塞进24GB甚至8GB显卡。如果你只是想把模型跑起来聊天不用关心这块但至少要知道为什么微调总是“爆显存”。1.4 别忽略CUDA上下文与框架自身的开销即使模型权重、KV Cache都算好了还有一笔固定开销很容易被漏算CUDA context、图形驱动预分配、推理框架的临时缓冲以及显存碎片。这些一般在几百MB到1GB不等如果你还开着浏览器或者其他应用可能吃掉的显存更多。所以我的习惯是所有估算结果最后再加10%冗余。比如估算下来刚好占7.2GB那么8GB的卡实际可用的余量可能只有几百MB稍不留神就爆。预留冗余不是可选项是必选项。2. 显存上限的快速估算法与懒人脚本2.1 推理时代的最简公式如果你只跑推理用下面这个公式就够了所需显存GB ≈ 模型参数量B× 每参数字节数 KV CacheGB 框架固定开销GB举例7B模型 FP167 × 2 14GB光权重就14GB加上KV和固定开销16GB显存才比较稳8GB卡直接放弃。7B模型 INT47 × 0.56 ≈ 3.92GB加上KV8GB显卡非常轻松。13B模型 INT413 × 0.56 ≈ 7.28GB加上KV和开销8GB卡会非常紧张16GB更舒服。30B模型 INT430 × 0.56 ≈ 16.8GB加上KV和开销24GB卡的适合区间。注意这个公式给的是“最小能加载”的近似不一定流畅。真正要跑得舒服还得留足冗余。2.2 不同量化档位的折算关系现在模型量化格式琳琅满目最常见的GGUF格式会把权重量化为不同bit档位。不要只看一个“4bit”实际上有Q2_K、Q3_K、Q4_K_M、Q5_K_M、Q6_K、Q8_0等等。按实际经验量化档位平均每参数字节数约说明Q2_K0.34损失很大一般不推荐Q3_K_M0.42勉强能用细节损失多Q4_K_M0.56质量/体积均衡我最常用Q5_K_M0.70比Q4更准一点显存需求高约25%Q6_K0.80接近原始精度Q8_00.90几乎无损文件也大FP162.00精度最高显存需求最大同样一个13B模型Q4_K_M权重约 13 × 0.56 ≈ 7.3GBQ8_0就变成 13 × 0.90 ≈ 11.7GB差距接近5GB。在显存紧巴巴的情况下量化档位选错直接决定你能不能跑。2.3 一个开箱即用的显存估算脚本我知道手算太麻烦而且每次都要记参数很烦。这里直接给一个实用脚本我平时选模型前就会先跑一遍。def estimate_vram(params_b, bits, kv_gb1.0, overhead_gb1.0): # params_b以B为单位比如7B填770B填70 # bits模型量化位数2/4/5/6/8/16 # kv_gb预计的KV Cache占用根据上下文长度估算 # overhead_gb框架与系统预留 bytes_per_param bits / 8 weight_gb params_b * bytes_per_param # 4bit量化实际每参数约0.56字节这里用系数修正 if bits 4: weight_gb params_b * 0.56 elif bits 5: weight_gb params_b * 0.70 elif bits 8: weight_gb params_b * 0.90 total weight_gb kv_gb overhead_gb print(f模型参数量: {params_b}B, 精度: {bits}bit) print(f权重估算: {weight_gb:.1f} GB) print(fKV Cache: {kv_gb:.1f} GB) print(f固定开销: {overhead_gb:.1f} GB) print(f推荐显存: {total:.1f} GB 以上) return total estimate_vram(7, 4, kv_gb1.0, overhead_gb1.0) estimate_vram(13, 4, kv_gb1.5, overhead_gb1.0) estimate_vram(30, 4, kv_gb2.0, overhead_gb1.5)运行结果大致是7B量化约5.5GB13B约9.8GB30B约20.3GB。这跟我在实际使用中看到的显存占用很接近。脚本里特意对4/5/8bit做了修正因为你直接用bits/8会低估4bit和5bit的实际占用。我用这个脚本判断一块显卡能不能跑心里基本有底。注意这只是估算不同框架、不同上下文长度会有浮动但方向不会错。3. 模型选择的三个优先原则3.1 先看能不能跑按显存倒推参数量上限当你手里有块显卡时第一步是倒推模型参数量范围。结合表格里的经验值可以直接映射显卡显存推荐模型范围8GB7B及以下模型优先用4bit量化12GB7B可跑8bit13B可跑4bit但紧16GB13B及以下4bit很稳7B可以FP1624GB30B左右4bit或13B高精度或7B FP3248GB以上70B量化后有机会塞满这个表格是纯推理场景微调另说。另外还要看模型架构同样参数量MoE架构的模型实际激活参数量少显存占用和推理速度会比同等参数量的稠密模型友好一些。3.2 再看内存带宽和算力显存够不一定流畅很多人有一个误区只要显存能装下就能用。其实体验差很多。Transformer推理是典型的内存带宽密集型任务生成每个token都需要把模型权重从显存里读一遍。所以推理速度的上限大致是生成速度 ≈ 显卡内存带宽 / 模型权重大小假设一块卡带宽是200GB/s跑一个权重14GB的FP16 7B模型理论最高速度约 200/14 ≈ 14 token/s。而换成一个4bit量化后权重只有4GB理论最高速度能到 200/4 ≈ 50 token/s。实际上还有KV Cache读取和计算开销但量化为什么能提速核心就在这里。这也解释了为什么老卡就算显存够跑起来依然吭哧吭哧慢。比如老平台显卡带宽只有100多GB/s跑小模型尚且可以跑大一点的量化模型就会掉到几个token/s体验很差。所以选卡不能只看显存还要看带宽。3.3 最后一个原则别只看“能跑”还得看上下文多长即便同一张卡同一个模型你开启的上下文长度context length直接决定可用性。长上下文意味着KV Cache占显存更多同时预填充阶段计算量更大。为了把模型塞进显存有人会把上下文压到2K那聊几句就满了实用性大打折扣。我的建议是至少保证4K上下文最好支持8K。如果8K跑不动宁可换更小参数的模型也不要牺牲上下文到2K以下。因为大模型对话往往需要多轮历史上下文太短会频繁丢内容用起来非常憋屈。4. 三档显卡的实操配置方案4.1 8GB入门卡7B四比特是甜点8GB是入门级显存能完整放下的最大流畅档位基本就是7B模型的4bit量化。具体操作上可以先下载一个Q4_K_M格式的7B模型然后用支持GPU卸载的开源推理框架加载。我通常会把显卡层数GPU Layers设置成能放多少放多少比如7B模型有32层左右可以把28层以上放进GPU剩下几个层留在CPU做缓冲。这样显存占用能控制住同时还能获得不错的加速。命令大概长这样不同框架略有差异# 以某个命令行推理框架为例用一半参数示意 run_model -m ./model_7b_q4_k_m.gguf --gpu-layers 28 --context-size 4096跑起来之后建议观察一下显存占用如果接近上限就把上下文降到3072或者把GPU层数减少两层让CPU分担更多。CPU分担换取更低显存但速度会有所下降鱼和熊掌要自己权衡。4.2 16GB主流卡13B四比特很舒服7B能跑高精度16GB是现在最主流区间能做的就是13B或14B的4bit量化。这个组合权重约7-8GB加上KV和开销显存余量很大上下文甚至可以开到16K。如果你更看重生成本把模型换成7B的FP16或者8bit同样能在16GB里跑而且因为权重精度提高输出质量通常比7B四比特要好。我个人在这个档位的经验优先追求13B Q4_K_M并在显存有余量时把上下文拉长。如果发现显存还剩4GB以上可以尝试把模型换成Q5_K_M或Q6_K用更多显存换取更好质量。要记住16GB不是无上限开上下文前先用前面脚本算算。4.3 24GB大显存卡30B四比特刚好70B别太乐观24GB是目前能在合理速度内跑本地大模型的一个重要拐点。30B级别模型Q4_K_M权重约17GB加上KV Cache和固定开销大概需要20GB以上24GB显卡能塞下但已经很紧。所以我建议把上下文控制在4K到8K不要盲目开32K否则照样爆。如果只是想体验更强能力70B模型也可以尝试4bit量化加上GPU与CPU混合卸载。但说实话70B 4bit权重约39GB24GB显存只能放一半多剩下的层跑到内存里内存带宽远低于显存生成速度很可能降到2-3 token/s。除非你是“挂着跑、不着急等答案”的类型否则体验很痛苦。我的建议是70B留给48GB以上显存或者纯CPU慢慢啃24GB老老实实玩30B档位。4.4 更进阶的玩法共享显存与自动卸载不少新用户不知道现在很多推理框架支持把模型层自动卸载到内存RAM。如果你的机器内存够大显存不够时可以开启“部分卸载”让模型占不满也能跑。这种方式的好处是能跑大得多的模型代价就是慢。实测下来显存内层数和内存内层数的比例直接影响速度能放下的话尽量全进GPU卸载层数越多速度掉得越厉害。另外一个容易被忽略的策略是启用共享显存或调整显存分配策略但这往往需要驱动和操作系统支持实际提升有限还容易导致帧数卡顿。如果是游戏卡和非专业场景我不建议依赖共享内存来跑大模型老老实实用量化模型更实际。5. 常见问题与排查手册5.1 估算显存没问题加载时却OOM这是最常见的问题。通常有四个原因你的KV Cache峰值比预想大。很多人按上下文长度输入算KV但预填充阶段会一次性处理整段输入峰值更高。框架固定开销比你留的多。比如CUDA context本身、运行时库甚至驱动默认预留。显存里还有别的程序占着。浏览器、剪辑软件、桌面特效都可能吃几百MB。显存碎片化严重即使总量有剩余但没有连续大块显存。排查方式把上下文长度减小一半看能否加载关闭其他占显存的应用用显存监控工具查看剩余量再不行就换更小量化档位。5.2 模型文件大小和显存占用对不上号很多人下载了一个Q4_K_M模型看到文件体积只有4GB但加载后显存占了6GB于是怀疑框架有毛病。其实GGUF格式的文件体积是压缩后的权重大小加载进显存后还要建立推理所需的临时缓冲、KV Cache、计算图这些都会额外占空间。另外不同版本量化的文件体积也有差异比如带嵌入头的模型通常多几个GB都算正常。我的建议是不要拿着模型文件大小来判断显存直接看框架日志里打印的实际显存占用或者用显卡监控工具观察满载值。脚本估算是用来提前判断“能不能跑”实际观测才是最终答案。5.3 速度很慢怎么判断是显存不够还是带宽不够我收到过很多“8GB显存跑7B模型只有3 token/s”的求助。其实如果模型权重全部在显存里这个速度大概率是带宽瓶颈。你可以用显卡监控工具看两个指标显存占用如果接近满说明显存确实紧但速度慢不一定是因为满。GPU利用率如果GPU计算单元利用率很高而显存没满可能模型还在计算如果GPU利用率低但显存带宽已接近满可以通过工具看内存控制器负载那基本就是带宽瓶颈。更简单的判断法换一个更小参数量的模型试试如果速度线性提升说明你的瓶颈就在权重复读这一环。比如从13B换到7B速度提升接近一倍那就是带宽决定的了。5.4 避坑速查表坑如何避直接下载最大模型先用脚本估算留10%余量上下文开到最大按需设置4K起步8K够用忽略固定开销估算时至少加1GB买卡只看显存还要看带宽与算力支撑迷信文件体积文件大小不等同于显存占用这块内容很实用我每次换卡或换模型都要先过一遍这个清单避免重复踩坑。最后分享一个我自己总结的小习惯拿到一张新显卡第一件事不是去下什么几十GB的模型而是先查一下它的内存带宽和显存再用估算脚本把三个候选档位跑一遍。优先选择量化位、能完整塞进显存且留出10%余量、上下文还能开到4K以上的那个组合。现在很多人纠结“XXGB显卡能跑多大模型”把问题想复杂了。其实就是权重加KV再加固定开销这么回事把账算明白选择自然就出来了。希望这篇能帮你少走点弯路。