首页 > Technology > 正文

Ollama 本地跑大模型显存不足怎么办?五步把 OOM 压下去

fenij 2026-08-11 58 Technology

本地跑大模型最扫兴的事,莫过于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 会在每次推理后释放模型,下一次请求会慢几秒,但显存不会长期被占。

🧠
4096
默认上下文 token 数
1–2 GB
缩短上下文可省显存
🔧
Q4_K_M
推荐量化格式

第五步: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 下方留言,我们一起把配置调顺。

排错自查清单

  • ☐ 第一步:确认到底是哪一层不够:报错不一定真是显存不够。先开两个窗口看资源:
  • ☐ 第二步:换小模型或更低量化:这是最直接的解法。7B 模型在 Q4_K_M 量化下大概占 4–5 GB 显存,14B 翻倍,32B 再翻倍。
  • ☐ 第三步:缩短上下文长度:上下文越长,KV cache 占的显存越多。Ollama 默认上下文可能是 4096 或更高,把它砍到 204
  • ☐ 第四步:限制并发和驻留模型:Ollama 默认会同时驻留多个模型,方便快速切换,但小显存机器吃不消。加两个环境变量:
  • ☐ 第五步:CPU 兜底或云端 API:如果所有招都用完还是跑不动,强制走 CPU:
  • ☐ 常见问题:Q:为什么 nvidia-smi 显示还有 3 GB 空闲,Ollama 还是报 OOM? A:显存碎片。模型

关键命令速查

  • ollama ps nvidia-smi
  • OLLAMA_CONTEXT_LENGTH=2048 ollama run qwen2.5:7b
  • PARAMETER num_ctx 2048
  • export OLLAMA_MAX_LOADED_MODELS=1 export OLLAMA_NUM_PARALLEL=1 export OLLAMA_KEEP_ALIVE=0
  • CUDA_VISIBLE_DEVICES=-1 ollama serve

相关延伸

更系统的排查思路,见 Technology 分类归档

相关完整手册

系统化的排查与配置思路,建议顺手收藏这几篇完整手册: