显存计算与模型选择:你的显卡能跑多大的模型
本篇解决本地部署里被问烂的问题:跑一个模型到底要多少显存?我这块卡能跑多大的模型? 如果你刚装好 NVIDIA 驱动或 Ollama,面对一堆 7B/14B/32B/70B 不知道选哪个,或者已经被 "CUDA out of memory" 撞过墙,这篇给你一套公式、一张各显存档位经验表,外加「24G 显存能跑什么」的直接答案。读完你能对着任意模型自己估算显存,不再靠玄学。

一、为什么需要它
「显存不足」是本地部署第一大报错,"24G 显存能跑什么模型""7B 模型要多少显存" 的搜索量非常大。多数人卡在的其实不是安装环节,而是选模型环节:选大了,加载瞬间 OOM;选小了,效果不满意。而模型页面上孤零零的 "参数量 7B" 并不能直接告诉你它实际要占多少显存——因为显存 ≠ 权重文件大小,KV Cache 和框架开销都是隐藏的。
我一般这样劝刚入坑的朋友:先花 5 分钟学会估算,再动手下载几十 GB 的文件,否则大概率是白下。两个真实场景你大概率会撞上:一是兴冲冲下了个 70B 模型,加载瞬间报 "CUDA out of memory",几十 GB 硬盘空间白占;二是保守地选了 7B Q4,结果模型能力不够用,才回头发现 24G 的卡明明能跑 32B。这两个方向的错误,本质上都是没把显存账算清楚。
本篇做三件事:
- 给核心公式(权重显存 ≈ 参数量 × 每参数字节数)加两个隐藏项(KV Cache、框架开销),让你能心算;
- 给单卡各显存档位经验表(8/12/16/24/48/96GB 各能跑什么,全部标注经验值);
- 直接回答高频问题 24G 显存能跑什么,以及单卡不够时怎么用多卡与 CPU offload。
二、环境要求
| 项目 | 要求 | 检查方式 |
|---|---|---|
| NVIDIA GPU | 任意,显存 4GB 起步,8GB+ 体验 7B Q4 才舒适 | nvidia-smi 能出表 |
| 驱动 | 较新的游戏驱动(Windows)或专有驱动(Linux) | nvidia-smi 首行驱动版本 |
| 推理框架 | Ollama(最简单)或 PyTorch + transformers / llama.cpp | ollama list / python -c "import torch" |
| 系统 | Windows 10/11、Linux 或 WSL2 | — |
| 物理内存 | 若考虑 CPU offload,建议 ≥ 模型文件大小 1.5 倍 | 任务管理器 / free -h |
先分清两个概念:显存(GPU 显存)装权重和 KV Cache,速度极快;物理内存(RAM)在显存不够时被 CPU offload 借用,速度慢得多。nvidia-smi 只显示显存占用,所以看到"装不下"时要先分清到底是显存不够还是物理内存不够(WSL2 上尤其常见,见第六节第 7 条)。
动手前先跑一次 nvidia-smi 确认三件事:显卡型号与总显存、驱动支持的最高 CUDA 版本、当前有没有进程占着显存。注意右上角那个 "CUDA Version" 是驱动支持的上限,不是已安装 Toolkit 的版本,别被它误导。如果你还没装驱动或框架,先回到《AI-01 CUDA与N卡驱动安装》和《AI-02 PyTorch安装与验证》把地基打好,本篇只负责"算账"。
三、显存估算:三步法
3.1 第一步:权重要占多少显存(核心公式)
权重显存 ≈ 参数量(B) × 每参数字节数。
精度不同,每参数字节数不同:fp16/bf16 = 2 字节、int8 = 1 字节、int4 = 0.5 字节。以 7B 模型为例:
| 精度 | 每参数字节 | 7B 权重显存 |
|---|---|---|
| fp16 / bf16 | 2 B | ≈ 14-15 GB |
| int8(Q8) | 1 B | ≈ 7-8 GB |
| int4(Q4) | 0.5 B | ≈ 4-5 GB |
在这之上还要加 10-20% 的框架/词表/优化器开销,估算时直接乘 1.1~1.2。举例:7B Q4 权重 ≈ 4.5 GB,加上开销后,光"装下权重"就要 5 GB 出头。
为什么是"≈"不是"=":量化文件里有缩放因子、块元数据等,实际文件总比纯算的大一点;不同框架开销也不同。本文统一按量级估算,以模型页面标注的文件大小为下限更稳。
3.2 第二步:KV Cache 要占多少
KV Cache 是模型生成时记下的"上下文笔记",随上下文长度和并发数增长,是很多人估算翻车的隐藏项。量级参考(随架构而异,只给量级):7B 模型 4K 上下文、单并发时 KV 约 0.5-1.5 GB,量化模型更小。这意味着:
- 短上下文(2-4K)、单人使用:预留 1-2 GB 就够;
- 长上下文(16-32K)或多并发对外服务(vLLM/Ollama):KV Cache 能轻松吃掉几个 GB,这是"我算好了 20G 怎么还 OOM"的常见原因。
一个直观的感受:同一个 7B Q4 模型,上下文从 4K 拉到 32K,KV Cache 大致翻 8 倍。所以"能装下"和"能用"之间,隔的就是这个变量。
做并发服务时 vLLM 的 PagedAttention 能把 KV 分页、减少碎片,详见《AI-13 vLLM 高吞吐推理引擎》。
3.3 第三步:写出完整预算
所需显存 ≈ 权重显存 ×1.1~1.2 + KV Cache + 0.5-1 GB 系统/框架底噪。
完整示例:7B Q4_K_M、4K 上下文:4.5×1.15 + 1 + 0.5 ≈ 7 GB——8GB 卡跑它舒适,但没有长上下文的余量了。下面第四节的经验表就是按这个公式批量推出来的。
3.4 量化位宽怎么选:Q4_K_M 是甜点
GGUF 家族位宽从低到高:Q2_K / Q3_K_M / Q4_K_M / Q5_K_M / Q6_K / Q8_0。以 7B 计,Q8_0 约 7-8 GB,Q4 约 4-5 GB。
Q4_K_M 是"精度-体积"的甜点:日常问答场景里,它与 int8 的差距多数人感觉不出来,体积却只有 Q8 的一半,Ollama 里很多模型的默认量化就是它。我的经验是:显存够就往高位宽选;不够就按 Q8 → Q6_K → Q5_K_M → Q4_K_M 逐级降;降到 Q3_K 及以下,乱码、复读的概率明显上升(排查思路见第六节第 3 条)。GPTQ/AWQ/bitsandbytes 这些非 GGUF 量化的完整对比,详见《AI-14 模型量化完全指南》。装 Ollama 拉取带量化后缀的模型(如 qwen2.5:7b),详见《AI-07 Ollama本地部署大模型》。
四、模型选择:经验表与实测验证
4.1 单卡各显存档位经验表(经验值)
下表是单卡经验值,口径是"含 KV、能跑起来的下限",不是严格承诺,长上下文请按低一档对待:
| 显存 | 舒适档 | 勉强档(短上下文) |
|---|---|---|
| 8 GB | 7B int4 | 13B int4 |
| 12 GB | 13B int4 | 14B int4 |
| 16 GB | 14B int8 | 32B int4 |
| 24 GB | 32B int4 | 70B int4(极短上下文,CPU offload 不实用) |
| 48 GB | 70B int4 | — |
| 96 GB(A6000/A100) | 70B int8 / 混合精度可玩 | — |
4.2 「24G 显存能跑什么?」——直接给答案表
| 模型 | 量化 | 权重显存 | 结论 |
|---|---|---|---|
| 7B/8B(Llama 3.1 8B、Qwen2.5 7B 等) | Q8_0 / fp16 | 8-15 GB | 非常舒适,可开长上下文 |
| 14B(Qwen2.5 14B) | Q4_K_M / int8 | 8-15 GB | 舒适 |
| 32B(Qwen2.5 32B) | Q4_K_M | 约 20 GB | 舒适(含 KV) |
| 70B(Llama 3.3 70B、Qwen2.5 72B) | Q4_K_M | 约 40 GB+ | 勉强:大量层 offload 到 CPU,速度掉到个位数 tokens/s,不实用 |
一句话总结:24G 的甜点是 32B Q4_K_M,跑 14B 开长上下文也很舒服;70B 只能靠 offload "能跑",不值得。
给其他档位的速答:8G 选 7B Q4_K_M,把上下文压在 4K 以内;12G 直接上 13B/14B Q4;16G 要么 14B int8 保质量,要么 32B Q4 保尺寸,二选一;48G(专业卡)是 70B Q4 的舒适区;96G(A6000/A100)可以直接玩 70B int8,质量接近 fp16。如果你在做 Ollama 选型,对应到模型名就是 qwen2.5:7b、qwen2.5:14b、qwen2.5:32b 这一族(具体可用规格以 ollama.com/library 页面实时为准)。
4.3 验证:把估算和实测对一遍
估算值对不对,最可靠的方式是装完模型后看实际显存:
nvidia-smi
预期:显存列 "Used" ≈ 权重文件大小 ×1.1~1.2 + KV(对话进行中时)。用 Ollama 的话还可以看模型加载详情:
ollama ps
预期:输出已加载模型一行,含显存占用与 GPU/CPU 分层情况。若实测明显大于你的估算,先怀疑两件事:你开的上下文长度、同时进行的会话数。
五、进阶技巧
- 多卡切分:PyTorch 侧用 accelerate 的
device_map="auto"可把权重自动切分到多张卡,显存加总后能跑更大的模型;vLLM 用--tensor-parallel-size做多卡张量并行(详见《AI-13 vLLM 高吞吐推理引擎》)。 - Ollama 自动层卸载:显存不够时 Ollama 会自动把装不下的层卸载到 CPU,
ollama ps里能看到 GPU/CPU 分层比例,num_gpu参数可控制放多少层进显存。注意 offload 后速度受 CPU 内存带宽限制,70B 全 offload 通常只剩个位数 tokens/s,"能跑"不等于"实用"。 判断标准很简单:如果大部分推理时间都花在 CPU 上,生成速度会比纯 GPU 慢一个数量级以上,日常对话体验会明显"卡"。所以 offload 的正确定位是体验降级方案——机器只有 16G 显存但你就是想试试 32B/70B 的效果,用它;追求流畅,老老实实选 24G 档内的模型。 - 上下文就是显存:不处理长文档就别默认开 32K 上下文;服务场景用 vLLM 的
--max-model-len把上限钉死,KV Cache 才能可控。
六、故障排查(按层定位)
| # | 症状(报错原文) | 层 | 原因 | 解决 |
|---|---|---|---|---|
| 1 | torch.cuda.OutOfMemoryError: CUDA out of memory. Tried to allocate ... |
显存 | 模型/上下文/批处理太大 | nvidia-smi 查谁占着显存;降量化位宽(Q8→Q4);降上下文长度;关掉后台占卡进程 |
| 2 | vLLM:ValueError: Free GPU memory ... less than desired GPU memory utilization |
显存 | gpu-memory-utilization 设太高或显存被占 |
降到 --gpu-memory-utilization 0.85;先 nvidia-smi 清掉占用 |
| 3 | 模型加载成功但输出乱码、重复 | 量化 | 位宽过低(Q2/Q3)或 tokenizer 不匹配 | 升到 Q4_K_M 及以上;确认权重与 tokenizer 来自同一个 repo |
| 4 | CUDA error: no kernel image is available for execution on the device |
框架/CUDA | PyTorch 编译的 CUDA 与显卡架构不匹配 | 换与显卡匹配的 PyTorch wheel(用 pytorch.org 选择器) |
| 5 | CUDA driver version is insufficient for CUDA runtime version |
驱动 | 驱动低于框架所需 CUDA | 升级 NVIDIA 驱动(只升 Toolkit 没用) |
| 6 | torch.cuda.is_available() 返回 False |
框架/驱动 | 装了 CPU 版 PyTorch,或驱动过老 | 重装对应 cuXXX 版 wheel;升级驱动 |
| 7 | Linux 上进程突然 Killed,dmesg 出现 oom-kill |
内存(RAM) | 物理内存不足(CPU offload 场景),不是显存 | WSL2 在 .wslconfig 加 swap=;降模型尺寸或并发 |
七、本篇自检清单
- [ ] 能背出核心公式:权重显存 ≈ 参数量(B) × 每参数字节数(fp16=2B、int8=1B、int4=0.5B),再加 10-20% 框架开销
- [ ] 能解释 KV Cache 随上下文长度与并发增长(7B 4K 单并发约 0.5-1.5 GB 量级)
- [ ] 记住了 24G 的答案:32B Q4_K_M 舒适,70B Q4 只能 offload 勉强跑
- [ ] 已实测核对:加载模型后
nvidia-smi实际占用 ≈ 自己的估算值 - [ ] 遇到
CUDA out of memory会按顺序处理:查占用 → 降位宽 → 降上下文 - [ ] 知道 Q4_K_M 是"精度-体积"甜点,以及低于 Q3_K 的风险
参考
- Ollama 官方仓库(模型量化与内存占用说明):https://github.com/ollama/ollama
- Hugging Face Transformers 文档(模型加载与显存):https://huggingface.co/docs/transformers
- Accelerate 文档(device_map 多卡切分):https://huggingface.co/docs/accelerate
- NVIDIA 驱动与 GPU 规格查询:https://www.nvidia.com