调整 num_ctx 主要是为了降低显存占用从而避免交换导致的卡顿,适合显存紧张但对话长度要求不高的场景。
先说结论:减小 num_ctx 值能减少显存消耗,防止因显存不足引发的系统交换降速,但会缩短模型能记住的上下文长度。
- 先定位:确认是否是显存瓶颈导致的速度慢,而非计算能力不足。
- 先做:通过临时命令或修改 Modelfile 调小 num_ctx 数值。
- 再验证:观察生成过程中的显存占用变化及 token 生成速度是否稳定。
命令速用版
在交互式会话中临时调整:
ollama run <模型名>
/set parameter num_ctx 1024或创建自定义模型固定参数:
FROM <模型名>
PARAMETER num_ctx 1024为什么会这样
num_ctx 控制模型处理上下文的窗口大小。数值越大,模型能记住的对话历史越长,但需要的键值缓存(KV Cache)显存也越多。当显存不足以容纳缓存时,系统会动用内存交换,导致生成速度急剧下降。公开资料中没有看到可靠的量化数据表明减小该参数能直接提升计算速度,其优化效果主要体现在避免显存溢出引发的卡顿。
分步处理
1. 查看当前显存占用情况,确认是否存在显存压力。
2. 尝试在会话中使用 /set parameter 命令临时调低数值,例如从默认的 2048 降至 1024 或 512。
3. 如果效果稳定,建议通过 Modelfile 创建新模型标签,避免每次手动设置。
4. 修改后记得重新加载模型,确保参数生效。
怎么验证是否生效
使用 ollama ps 命令查看运行中模型的显存占用,或在生成时观察终端输出的 token 速度是否不再出现大幅波动。如果显存占用明显下降且生成流畅,说明调整有效。
常见坑
1. 数值过小会导致模型“失忆”,无法理解长文档或长对话逻辑。
2. 不同模型默认的 num_ctx 不同,盲目设置过低可能影响模型原有性能表现。
3. 临时设置重启会话后失效,需通过 Modelfile 固化配置。
参考来源
1. Ollama GitHub Repository, README, https://github.com/ollama/ollama
2. Ollama Modelfile Documentation, https://github.com/ollama/ollama/blob/main/docs/modelfile.md