本地跑大模型最扫兴的事,莫过于CUDA error: out of memory一闪而过,或者模型加载到一半直接卡死。Ollama 把部署简化到一条命令,但硬件天花板还在,8 GB 显存硬塞 70B 模型不现实。下面这套方法我按「先止损、再调优、最后换思路」的顺序整理,目标是用现有硬件把模型跑起来。
第一步:确认到底是哪一层不够
报错不一定真是显存不够。先开两个窗口看资源:
ollama ps nvidia-smi
ollama ps 的 PROCESSOR 列会显示模型是 100% GPU、100% CPU 还是混合加载。如果已经显示 CPU,说明模型本就没完全进显存,继续调小才有意义。nvidia-smi 则能看到真实剩余显存和是否有其他进程抢占。
第二步:换小模型或更低量化
这是最直接的解法。7B 模型在 Q4_K_M 量化下大概占 4–5 GB 显存,14B 翻倍,32B 再翻倍。常见选择:
| 模型规模 | Q4_K_M 显存占用 | 建议显存 |
|---|---|---|
| 3B | 约 2 GB | 4 GB+ |
| 7B | 约 4–5 GB | 8 GB+ |
| 14B | 约 8–10 GB | 12 GB+ |
| 32B | 约 18 GB | 24 GB+ |
如果 7B 还爆,可以降到 3B 或 1.5B 的小模型,速度会快很多,日常问答够用。
第三步:缩短上下文长度
上下文越长,KV cache 占的显存越多。Ollama 默认上下文可能是 4096 或更高,把它砍到 2048 甚至 1024,常常能省出 1–2 GB。
OLLAMA_CONTEXT_LENGTH=2048 ollama run qwen2.5:7b
长期固定可以在 Modelfile 里写:
PARAMETER num_ctx 2048
第四步:限制并发和驻留模型
Ollama 默认会同时驻留多个模型,方便快速切换,但小显存机器吃不消。加两个环境变量:
export OLLAMA_MAX_LOADED_MODELS=1 export OLLAMA_NUM_PARALLEL=1 export OLLAMA_KEEP_ALIVE=0
OLLAMA_KEEP_ALIVE=0 会在每次推理后释放模型,下一次请求会慢几秒,但显存不会长期被占。
第五步:CPU 兜底或云端 API
如果所有招都用完还是跑不动,强制走 CPU:
CUDA_VISIBLE_DEVICES=-1 ollama serve
速度会掉到个位数 token/s,但至少能跑。真要日常高频使用,还是租一块云 GPU 更划算。
常见问题
Q:为什么 nvidia-smi 显示还有 3 GB 空闲,Ollama 还是报 OOM?
A:显存碎片。模型加载需要连续大块显存,空闲但不连续就会失败。重启 Ollama 服务可以整理:pkill ollama && ollama serve。
Q:量化会不会让模型变笨?
A:Q4_K_M 对 7B/14B 模型影响很小,日常使用几乎感觉不到。如果要做数学或代码推理,可以用 Q5_K_M 平衡一下。
Q:Ollama 支持多卡吗?
A:支持,但默认只用一个 GPU。多卡需要环境变量或手动指定,消费级机器通常单卡更稳。
你在本地跑大模型还踩过哪些坑?欢迎在 fenij.com 下方留言,我们一起把配置调顺。