手头有块 4G 显存的老显卡,好几年前买的,平时就看看视频。今年想在家跑个本地大模型,一开始图省事装 Ollama,拉了个 7B 的模型,一跑就报 CUDA out of memory,显存直接爆掉。后来换 llama.cpp 配 GGUF 量化模型,才算在这张卡上把模型跑起来。这篇把配置和踩的坑写下来。

先说我为什么换到 llama.cpp
Ollama 用起来确实省事,但它默认把整个模型往显存里塞,4G 显存根本装不下 7B 的模型。llama.cpp 不一样,它有个参数能控制模型前多少层放显卡、剩下的层放内存让 CPU 算,这一下就把显存门槛降下来了。这个思路叫层卸载,是我这次能跑起来的关键。
模型格式也得换。Ollama 拉的是它自己封装好的包,llama.cpp 只认 GGUF 格式。GGUF 是一种量化格式,把模型权重按精度压一压,体积小很多,牺牲一点效果换能跑。
GGUF 去哪下
Hugging Face 上搜模型名加 GGUF 就行,比如 Qwen2.5-7B-Instruct-GGUF。挑文件看名字里的量化档位,Q4_K_M 是 4bit 量化里比较平衡的一档,一般先拿它。7B 的 Q4_K_M 文件大概 4.4G 左右,光文件就快顶满显存了,所以层卸载必须用上。
我最后用的是 3B 的模型,Q4_K_M 文件 1.9G 左右,能整段塞进显存,速度也顺。7B 的留着在更强的机器上跑。

关键参数 -ngl
llama.cpp 跑模型的命令长这样:
llama-cli -m qwen2.5-3b-instruct-q4_k_m.gguf -ngl 20
-m 指模型文件,-ngl 是 gpu layers 的缩写,意思是把模型前 20 层放到显卡上算。这个数字没有标准答案,得看模型总层数和你的显存。我的土办法是先给个大值,跑一下看任务管理器里显存占用,爆了就减半,稳定了再往上加。
3B 的模型 4G 显存能全放下,我把 -ngl 给到 99,让它能放多少放多少。7B 的话 -ngl 给 10 到 15 之间,剩下的层 CPU 扛。
CPU 和 GPU 混着跑的速度
层卸载以后,显卡算一部分,CPU 算一部分,速度肯定不如全显存,但比全 CPU 强太多。3B 模型在这张卡上每秒大概能出十几个字,日常问答够用。7B 的只能放几层进显存,大部分靠 CPU,出字慢不少,我试了一次就换回 3B 了。

哪些模型别碰
我踩完坑的结论是,4G 显存这张卡:
- 14B 以上的别想,量化完也好几个 G,显存放不下
- 7B 的能跑但吃力,适合不急的场合
- 3B 和更小的模型是主力,Q4 量化档就够
- 别开太长的上下文,显存会跟着涨
还有个坑是编译。llama.cpp 官网给的是源码,Windows 上要自己编译,命令是 cmake -B build -DGGML_CUDA=ON 然后 cmake --build build --config Release -j。嫌麻烦就去 GitHub releases 页面下现成的 Windows 包,里面带 CUDA 支持,解压就能用,我最后就是用的现成包。
这篇是本地大模型系列里讲低配显卡怎么跑的一篇。前面写过怎么给模型套网页界面、怎么按显存选模型,后面打算写量化档位 Q4 和 Q8 的差别、还有 Ollama 部署报错的排查,都是自己踩过的。想看后续的可以关注账号。