本地模型加载失败、显存溢出 (OOM) 或静默回退 CPU 掉速
排查“权重体积明明小于显存,但实际运行却严重掉速或爆显存”的根因。
在模型加载状态下执行 `ollama ps`,查看 PROCESSOR 一栏显示什么?
ollama ps
重点观察是“100% GPU”还是“xx% CPU / xx% GPU”,以及是否同时驻留了多个模型。
「本地模型加载失败、显存溢出 (OOM) 或静默回退 CPU 掉速」的全部 1 步终端探测命令与分支判据
无需逐层点击交互,以下列出本故障决策树每一层的宿主机只读探测命令、预期基线提示与输出流向。
在模型加载状态下执行 `ollama ps`,查看 PROCESSOR 一栏显示什么?
ollama ps
重点观察是“100% GPU”还是“xx% CPU / xx% GPU”,以及是否同时驻留了多个模型。
- • 显示部分层回退到了 CPU(例如 45% CPU / 55% GPU)
→ sol-kv-cache-spill - • 列表里有多个模型同时常驻,占满了显存
→ sol-multi-model-evict - • 在 NVIDIA 机器的 Docker 容器内显示 100% CPU
→ sol-nvidia-container-toolkit
「本地模型加载失败、显存溢出 (OOM) 或静默回退 CPU 掉速」包含的 3 类根因、修复代码与验收命令
修复方案:收敛上下文 num_ctx 并启用 Q8_0 KV Cache 量化
sol-kv-cache-spill客户端或知识库常默认请求 16K–32K 上下文。FP16 精度下的 KV Cache 会额外吃掉 3–8 GB 显存,迫使部分模型层溢出到低速系统内存。
- 在 Ollama 服务端开启 Flash Attention 与 Q8_0 KV Cache 量化(立省约 50% 上下文显存)。
- 将 Modelfile 或客户端请求中的 num_ctx 限制在 8192 或 16384。
# Set in environment before starting Ollama export OLLAMA_FLASH_ATTENTION=1 export OLLAMA_KV_CACHE_TYPE=q8_0 export OLLAMA_NUM_PARALLEL=1
[边界说明]可使用本站「显存与上下文预算计算器」精确测算不同 num_ctx 下的总内存占用。
ollama ps修复方案:释放驻留模型并限制最大同时加载数
sol-multi-model-evict在进行本地 RAG(同时调用 Embedding 模型与对话模型)或频繁切换模型时,旧模型默认常驻 5 分钟未释放,挤占了主模型显存。
- 执行 ollama stop <model> 立即释放不需要的常驻模型。
- 单卡紧凑显存环境下配置 OLLAMA_MAX_LOADED_MODELS=1(若跑 RAG 则确保 Embedding 模型 ≤ 0.5GB)。
ollama stop $(ollama ps | awk 'NR>1 {print $1}')
export OLLAMA_MAX_LOADED_MODELS=1
export OLLAMA_KEEP_ALIVE=5m[边界说明]若使用本地文档问答,需将 Embedding 模型的约 0.6GB 显存一并计入总预算。
ollama ps修复方案:配置 NVIDIA Container Toolkit 并声明 GPU 透传
sol-nvidia-container-toolkitDocker 默认隔离宿主机 GPU 设备;未配置 nvidia-container-toolkit 或未在 Compose 中声明 GPU 设备预留时,容器内只能回退至纯 CPU。
- 在宿主机安装 nvidia-container-toolkit 并执行 sudo nvidia-ctk runtime configure --runtime=docker。
- 重启 Docker 服务,并在 docker-compose.yml 中补充 GPU 设备映射。
services:
ollama:
image: ollama/ollama:0.5.7
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu][边界说明]注意:macOS 上的 Docker Desktop 无法将 Apple Silicon Metal GPU 透传给 Linux 容器,Mac 用户请务必在宿主机原生运行 Ollama。
docker exec tinker-ollama nvidia-smi一台现有 Mac 的本地模型实测:固定任务、模型版本、量化、上下文和速度
在同一台 Mac 上用固定任务实测 Q4_K_M、Q5_K_M 与 Q8_0 在不同上下文长度下的真实速度与内存驻留,定位触发 SSD Swap 掉速的临界点。
MacBook Pro 14"(M3 Pro · 18GB 与 36GB 统一内存对照实测)· macOS 15.3
Ollama 0.5.7 · qwen2.5:7b-instruct · qwen2.5:14b-instruct · deepseek-r1:14b
模型拉取后 100% 离线运行 — 已在断开 Wi-Fi 下实测验证;推理全程无任何外部网络请求。