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,原因和解决办法相同。
怎么解决
- 先核对大小:把模型、量化档位、上下文和你的显卡填进显存计算器。如果是红色,什么参数都没法让它装下 —— 换更小的档位或更短的上下文。
- 缩短上下文:用
-c 8192,不要开满模型的整个窗口。不加-c时会从模型训练时的上下文长度开始。 - 量化 KV 缓存:
-ctk q8_0 -ctv q8_0大约把缓存减半,质量损失很小。 - 少放几层到显卡:去掉
-ngl(或设成小于总层数的值),剩下的层放在内存里跑。能加载,但生成速度会明显下降。MoE 模型用--n-cpu-moe N只把专家权重放到 CPU,速度损失更小。
改参数之前,先核对大小
大多数显存报错其实是大小问题。把模型、量化档位、上下文和你的显卡填进显存计算器:如果那里是红色,什么参数都没法让它装下。
相关指南
相关报错
核对来源
报错原文于 2026-10-26 从源码中读取核对。