显存不够别急着换卡:本地大模型量化(GGUF/GPTQ/AWQ)避坑指南
总有朋友来问大叔:显卡只有 8GB、12GB…
总有朋友来问大叔:显卡只有 8GB、12GB,跑个 7B 模型都喘,13B、32B 更是不敢想,是不是只能咬牙上 4090?其实未必。今天聊一条省钱又立竿见影的路子——模型量化。搞懂了它,很多”跑不动”的模型,其实都能塞进你的机器里。这篇文章不讲纯理论,直接带你上手,顺便把大叔踩过的坑一次性说清楚。
量化到底是什么
模型在训练时,权重通常用 16 位浮点(FP16)或 32 位浮点(FP32)存储。推理的时候,这些权重里其实藏着大量冗余精度——把 3.1415926 记成 3.14,对很多任务来说几乎没差别。量化干的就是这件事:把权重从高精度浮点,压缩成低精度整数。
常见的量化位宽有 INT8(8 位)和 INT4(4 位)两档。拿 7B 模型举例:FP16 版本大约占 14GB,压到 INT8 只剩 7GB 左右,压到 INT4 就只有 4GB 出头了——8GB 显存的卡直接就能塞下,还能留出空间给上下文缓存。体积小了,显存占用降了,内存带宽的压力也小了,推理速度往往还能变快。
那精度会不会掉得很惨?大多数场景下,Q4 级别的量化损失很小,日常问答、写作、翻译几乎无感。真正吃精度的是代码、数学、长链推理这类任务,后面避坑环节细说。
三种主流格式怎么分
量化格式五花八门,但主流的就三种,认清楚它们的生态归属,能少走很多弯路:
- GGUF:llama.cpp 生态的格式,最灵活,支持 CPU/GPU 混合推理,Ollama 默认就靠它。想省事、想跨平台,无脑选 GGUF。
- GPTQ:老牌 GPU 量化方案,用校准数据集做分组量化,质量稳,但基本只能跑在 NVIDIA GPU 上,走 vLLM / Transformers 生态。
- AWQ:GPTQ 的改进版,通过”激活感知”保护重要权重,同样位数下质量通常更好,速度也快,同样需要 GPU。
记住一条线:GGUF 配 llama.cpp / Ollama,GPTQ / AWQ 配 vLLM / Transformers,两边生态别混着用,否则加载直接报错。
实操一:用 Ollama 直接跑量化模型
对新手来说,最省心的路径就是 Ollama——官方仓库里默认就是 GGUF 量化版,省去自己转格式的麻烦。以 Qwen2.5 7B 的 Q4_K_M 量化版为例:
# 拉取并运行 Q4_K_M 量化版,显存占用约 5GB
ollama run qwen2.5:7b-instruct-q4_K_M
# 查看某个模型所有可用的量化标签
ollama show qwen2.5:7b --modelfile
模型标签里带 q4_K_M、q5_K_M 这种后缀,就是不同的量化等级。选完 tag,其余交给 Ollama 自动处理即可。如果你只想用 Ollama 但没找到想要的量化版本,还可以自己写一个 Modelfile 指向本地的 GGUF 文件:
# Modelfile 示例
FROM ./qwen2.5-7b-instruct-q5_k_m.gguf
# 导入并创建自定义模型
ollama create my-qwen-7b -f Modelfile
实操二:llama.cpp 自己动手量化
想折腾、或拿到的是原始 FP16 权重,可以用 llama.cpp 自己转。先转成 GGUF,再量化:
# 1. 把 Hugging Face 的 FP16 权重转成 GGUF
python convert_hf_to_gguf.py /path/to/model \
--outtype f16 --outfile model-f16.gguf
# 2. 量化到 Q4_K_M
./quantize model-f16.gguf model-q4_k_m.gguf Q4_K_M
# 3. 起服务验证
./llama-server -m model-q4_k_m.gguf --port 8080
转换是 CPU 密集操作,内存要留足,7B 模型建议至少 32GB 内存。嫌麻烦的话,直接去 Hugging Face 搜现成的 GGUF 量化版,TheBloke、bartowski 等作者都整理好了,下载即用。
量化等级怎么选
GGUF 的量化等级里,K-quants 系列是现在的主流。常见的有 Q4_K_M、Q5_K_M、Q6_K、Q8_0 等。它们的差别在于位数和混合精度策略:
- Q4_K_M:甜点档,体积小、质量够用,日常聊天写作首选。
- Q5_K_M:质量明显更好,体积略大,性价比极高。
- Q6_K / Q8_0:接近无损,适合代码、数学这类吃精度的任务。
- Q2_K / Q3_K:极限压缩,逻辑能力会明显退化,能不碰就不碰。
一个实用的判断标准:对话闲聊用 Q4,写代码、做推理、跑长文档用 Q5 起步。别为了省那 1GB 显存,把模型的脑子给压坏了。
四个避坑点
- 生态别搞混:GGUF 模型塞给 vLLM,或者 GPTQ 模型丢给 Ollama,都跑不起来。下载前看清楚文件名后缀,`.gguf` 走 llama.cpp 系,`gptq`、`awq` 走 vLLM / Transformers 系。
- 量化不是免费午餐:数学、代码生成、长文档推理,低位数损失肉眼可见,还会出现”一本正经胡说”的情况。这类任务建议上 Q5 甚至 Q6。
- 自己量化 GPTQ/AWQ 需谨慎:这俩需要校准数据集,参数调不好质量还不如社区现成的。新手直接用发布者量化好的版本更稳。
- 别忽视上下文开销:显存不只是权重占的,KV 缓存也会随上下文长度暴涨。量化权重省下的空间,正好能喂给更长的上下文。
不同显存怎么选模型
给还在纠结的朋友一个参考,按显存大小对号入座(都按 Q4 量化粗略估算):
- 8GB:7B 稳跑,13B 需要强 CPU 卸载,体验一般。
- 12GB:13B 可行,14B / 32B 吃力。
- 16GB:14B / 32B 能跑得比较从容。
- 24GB:32B 上 Q5 / Q6,甚至 70B 的 Q4 也能试试。
跑之前可以用 nvidia-smi 盯一眼显存占用,确认权重和 KV 缓存都没把卡塞爆。如果实在吃紧,Ollama 和 llama.cpp 都支持把部分层卸载到 CPU,代价是速度变慢,但至少能跑起来。
量化之外,还有两条路
量化虽好,但不是万能药。如果你的场景对精度极度敏感,或者手头有闲置资源,还有两个补充手段可以组合着用:一是 CPU 卸载,把放不进显存的层丢给内存和 CPU 跑,速度慢但能救急,llama.cpp 的 --n-gpu-layers 参数就能控制卸载比例;二是 多卡并联,把模型拆到两张甚至更多卡上,vLLM 的 tensor parallel 支持得最好。这俩都能和量化叠加使用,比如”Q4 量化 + 部分 CPU 卸载”,12GB 的卡跑 32B 也不再是天方夜谭。
哪里找现成的量化模型
自己转格式费时费力,绝大多数时候直接找现成的更省心。Hugging Face 上搜模型名加 GGUF、AWQ、GPTQ 关键词,就能找到社区量化好的版本。下载后记得核对文件里附带的哈希值,防止传输损坏导致推理时报权重不匹配的错。Ollama 用户直接看官方模型库的 tag 列表就行,几乎所有主流模型都内置了从 Q2 到 Q8 的全套量化档位。
小结
显存不够,量化是最划算的解法,没有之一。但别盲目追求低位数——能跑就多留一点精度,质量优先选 Q5 以上。先把 GGUF + Ollama 这条最省心的路走通,等你熟悉了,再根据任务类型去挑 GPTQ / AWQ 和更精细的等级。省钱这事,也得讲究个稳。下一期大叔可以聊聊多卡并联和 CPU 卸载的实战,感兴趣的朋友评论区扣个 1。
