llama.cpp显存不足

CUDA error: out of memory 怎么解决

报错原文

CUDA error: out of memory

是什么意思

llama.cpp 向显卡申请显存时已经没有剩余:权重、你设定的上下文所需的 KV 缓存和计算缓冲区加起来,超过了显卡的空闲显存。

为什么会出现

  • 这个量化档位加上这个上下文长度,显卡本来就装不下。最容易被忽略的是上下文:KV 缓存会随 -c 的每个 token 增长。
  • 你传了 -ngl all(或很大的 -ngl)或很大的 -c。llama.cpp 默认开启的自动适配(--fit)只会调整你没设定的参数,强制指定的值可能让它超出显存。
  • 别的程序占着显存:另一个模型服务、游戏、或同一张卡上的桌面。nvidia-smi 会列出每个进程占用多少。
  • AMD(HIP)版本出现同样的问题时打印的是 ROCm error: out of memory,原因和解决办法相同。

怎么解决

  1. 先核对大小:把模型、量化档位、上下文和你的显卡填进显存计算器。如果是红色,什么参数都没法让它装下 —— 换更小的档位或更短的上下文。
  2. 缩短上下文:用 -c 8192,不要开满模型的整个窗口。不加 -c 时会从模型训练时的上下文长度开始。
  3. 量化 KV 缓存:-ctk q8_0 -ctv q8_0 大约把缓存减半,质量损失很小。
  4. 少放几层到显卡:去掉 -ngl(或设成小于总层数的值),剩下的层放在内存里跑。能加载,但生成速度会明显下降。MoE 模型用 --n-cpu-moe N 只把专家权重放到 CPU,速度损失更小。

改参数之前,先核对大小

大多数显存报错其实是大小问题。把模型、量化档位、上下文和你的显卡填进显存计算器:如果那里是红色,什么参数都没法让它装下。

相关指南

相关报错

核对来源

报错原文于 2026-10-26 从源码中读取核对。