“我这显卡能跑 32B 吗?“这是本地部署问得最多的问题。答案不用背表格——显存需求由三块组成:模型权重、上下文的 KV cache、运行开销,每块都能算出来。这篇把这笔账拆开算清楚,再给出买卡和下模型前的决策规则。

场景与需求

显存测算服务三类场景:

  1. 买卡前:预算定了,想知道 12GB 和 16GB 的分界线能换来哪档模型;
  2. 下模型前:卡已在手,判断某个模型是”流畅跑”还是”勉强跑”;
  3. 跑起来不对劲:速度突然变慢、报错显存不足,定位是权重、KV cache 还是系统占用出了问题。

对应的产出是一张测算表加一套决策规则,照着对号即可。

候选方案

显存不够时,本质只有四条路,按代价从小到大排:

路线做法代价
压上下文调小 num_ctx,少喂长文长对话、长文档能力下降
量化 KV cache开 q8_0 KV cache,KV 体积减半精度损失极小,最便宜的省显存手段
降量化等级模型从 Q8 换 Q4(默认已是 Q4)同参数量下体积近似减半,质量轻微下滑
换小参数量模型32B 换 14B能力台阶式下降,但换来成倍余量

Ollama 还有一条”自动兜底”:显存放不下的层自动卸载到 CPU 内存,模型照样能跑,只是速度明显变慢【待补:本机全显存与部分卸载的实测速度对比】。所以”能不能跑”和”跑得爽不爽”是两道门槛,测算时分开看。

测算模型与假设

权重显存:参数量 × 每参数字节数

显存大头是模型权重,近似公式:权重显存 ≈ 参数量(B) × 每参数字节数。常见量化等级的换算结果:

参数量fp16(2 字节/参数)Q8_0(约 1 字节/参数)Q4_K_M(约 0.57 字节/参数)
3B约 6GB约 3GB约 2GB
7B约 14GB约 7.5GB约 4.5GB
14B约 28GB约 15GB约 9GB
32B约 64GB约 34GB约 20GB
70B约 140GB约 75GB约 42GB

Ollama 库默认分发的就是 4bit 量化(Q4_K_M 一类),这正是消费级显卡能跑 7B 以上模型的全部前提——一张 8GB 卡当然装不下 14GB 的 fp16 权重,但装得下 4.5GB 的 Q4。

KV cache:随上下文长度线性涨

权重之外的第二大头。近似公式:KV cache 字节数 ≈ 2 × 层数 × KV维度 × 上下文长度 × 每元素字节数(2 是 K 和 V 两份)。以 7B 级模型(采用 GQA 分组注意力)为例:上下文 4K 时约 0.20.5GB,32K 时涨到约 24GB。参数量越大层数越多,同一上下文下 KV cache 也越大。

两个可以直接抄的省显存开关:开启 flash attention,并把 KV cache 量化到 q8_0(体积减半、精度损失可忽略):

# Windows(设完重启 Ollama 生效)
setx OLLAMA_FLASH_ATTENTION "1"
setx OLLAMA_KV_CACHE_TYPE "q8_0"
# macOS
launchctl setenv OLLAMA_FLASH_ATTENTION 1
launchctl setenv OLLAMA_KV_CACHE_TYPE q8_0
# Linux(服务版):systemctl edit ollama.service 加 Environment= 后 daemon-reload 重启

运行开销与总账

框架与运行时开销约 0.30.8GB;显卡如果同时在渲染桌面,再留 0.51.5GB 给系统。总账公式:

所需显存 ≈ 权重 + KV cache + 开销 + 系统占用

注意 Ollama 默认上下文只有 2048,要长上下文必须显式调大 num_ctx,KV cache 的账要按调大后的值算。交互里临时调:

ollama run qwen2.5:7b
>>> /set parameter num_ctx 8192

两个容易误判的点

  • “共享显存”救不了速度。 Windows 上 NVIDIA 驱动允许把部分内存借作显存(任务管理器里的”共享 GPU 内存”),看似上限翻了倍,实际带宽差一个量级,一借就开始明显掉速——测算时只认专用显存【待补:本机触发共享显存后的实测掉速幅度】。
  • Mac 的统一内存是另一套账。 Apple Silicon 没有独立显存,GPU 与 CPU 共用统一内存,GPU 默认可用上限约为物理内存的七成上下;16GB 内存的 MacBook 实际能伺候 7B~8B 级的 Q4 模型【待补:实测上限与速度】。

显存占用构成:权重 + KV cache + 开销

测算结果表

把三块加总,得到 Q4 量化下”流畅跑”的显存档位(按常用 4K 上下文估算):

参数量权重(Q4)4K 上下文 KV总需求量级32K 上下文再 + KV
3B约 2GB约 0.1~0.2GB2~3GB约 +1~2GB
7B约 4.5GB0.2~0.5GB5~8GB约 +2~4GB
14B约 9GB约 0.5~1GB9~12GB约 +3~6GB
32B约 20GB约 1~2GB20~24GB约 +6~12GB
70B约 42GB约 2~4GB44GB 以上建议直接双卡

读表规则:显存 ≥ 总需求约 1.1 倍算”流畅”档;显存低于总需求但超过权重大半,Ollama 会自动卸载部分层,属于”勉强”档;显存连权重都装不下一半,直接换小参数量模型。

决策框架

  1. 先算权重账,再算上下文账。 权重装不下一切免谈;权重装得下,上下文不够就压 num_ctx。
  2. 长上下文需求先开两个开关:OLLAMA_FLASH_ATTENTION 与 q8_0 KV cache,零成本省一半 KV 显存。
  3. 缺口 1~2GB 以内:压上下文或量化 KV cache 就能解决;缺口更大:换小一档参数量,不要硬扛部分卸载——能跑和流畅是两回事。
  4. 同参数量下换量化:默认 Q4 想提质量可试 Q8,代价是体积近似翻倍,8GB 卡跑 7B 的 Q8 已经贴线。
  5. 无独显也能跑:CPU + 内存路线,内存需求 ≈ 模型文件体积的 1.2 倍左右,速度比独显慢一个量级【待补:本机 CPU 路线的实测速度】,只适合不赶时间的批处理场景。
  6. 多卡不叠加显存跑同一个模型?会拆分。 Ollama 支持把模型分层拆到多块 GPU 上,两张 24GB 卡能伺候 70B 级的 Q4,但单卡能装下的模型没有必要拆,拆分本身有通信开销。

一句话记忆:Q4 权重体积 ×1.2 加上 KV cache,就是你要的显存。7B≈58GB、14B≈912GB、32B≈20~24GB 这三档背下来,能覆盖九成问答场景。

我的最终选择

我自己的配置与实测:【待补:显卡型号、实际运行模型档位、显卡驱动版本、实测 tokens/s 与显存占用截图】。通用建议:个人开发机 12GB 显存是入门甜点位(流畅跑 14B),24GB 是一步到位的选择(流畅跑 32B),16GB 适合长上下文重度用户。

显存测算完了就该挑具体型号,清单见按显存选型的模型推荐;模型装在哪、怎么搬家,见模型目录迁移

相关阅读