8G 卡跑 14B 直接 OOM我是怎么一步步退下来的前两天在一张 8G 的老卡上加载一个 14B 的 Q4_K_MOllama 那边直接报内存不够换 llama.cpp 加载也是分配失败。我的第一反应是换更低的量化档结果换完照样起不来。后来才发现问题出在我一次只改一个参数、而且改的顺序错了。这篇是「本地部署实战」第 3 篇。第 1 篇讲不同显存档位怎么选量化档第 2 篇讲模型文件从哪下、下完怎么校验。这篇只讲最容易卡住的一步显存不够时按什么顺序往下退。先弄清楚显存到底被谁占了很多人只盯模型权重其实显存是这么几块加起来的模型权重由量化档决定Q8 大概是 Q4 的两倍KV cache跟着上下文长度涨开 32k 能吃掉好几 G是隐形大户运行时固定开销CUDA context 这类几百 MB 起步临时张量推理过程中的中间结果我那次 OOM卡的不是权重是上下文默认值拉太高KV cache 把剩下的显存吃光了。5 级降级顺序表顺序动作降幅经验代价1降量化档Q8→Q4_K_M→Q4_K_S→Q3_K_M大质量下降2缩短上下文32k→16k→8k中到大长文档装不下3限并发/批量并行设 1上下文字段显式写死中吞吐下降4部分层卸载到 CPU可上显存层数调小中速度明显变慢5换更小的模型14B→7B→3B最大能力下降原则只有两条从上往下试一次只改一级。先降量化档因为它对速度影响最小、只损失一点质量卸载到 CPU 放最后因为一旦开始卸载token/s 会掉一个数量级。每一级具体怎么改量化档Ollama 里换档位 tag或手动换对应的 gguf 文件上下文Ollama 在 Modelfile 里写PARAMETER num_ctx 8192llama.cpp 用-c 8192并发设OLLAMA_NUM_PARALLEL1别让它同时开多路层卸载llama.cpp 把-ngl从全量往下减比如-ngl 20观察nvidia-smi -l 1看显存峰值Ollama 日志里看 KV cache 实际占用我这张 8G 卡的实测参照同一张卡、同一个 14B 模型只改一个变量配置结果Q4_K_M 32k 上下文加载即 OOMQ4_K_M 8k 上下文能跑约 12–15 token/sQ4_K_S 8k能跑比上面略快Q3_K_M 8k能跑但质量肉眼可见地差可以看到从 32k 降到 8k 就救活了量化档都不用动。如果当时我第一步就去降量化档等于白白牺牲了质量还没解决问题。自查清单先记录显存峰值再决定降哪一级一次只改一个参数改完再测记住上下文是隐形的显存大户别默认拉满卸载到 CPU 之前先试缩短上下文降级后固定问几个已知答案的问题确认质量还够用下一篇写「上下文长度到底该设多少设大了除了显存还有什么代价」。后面这个系列会一直更下去。