问题出现得很突然,日志倒是留得挺全。用 Ollama 0.5.7 跑 7B 模型,/api/ps 返回空列表,但 nvidia-smi 显示还有 6GB 显存被占,重启 ollama 服务后才释放,隔几小时又出现。

刚开始盯着「keep_alive 到期与并发请求交错」,折腾了半个多小时,排掉了。

排查方向其实有限,先把可能性排一排。模型卸载后显存没有立即归还。还有一种是另一个进程还握着推理上下文。

另外,多卡环境下只清了主卡。

上来先查当前已加载模型列表

curl -s http://127.0.0.1:11434/api/ps | jq '.models[].name'

手动卸载指定模型

curl -s http://127.0.0.1:11434/api/generate -d '{"model":"qwen2.5:7b","keep_alive":0}'

随后对照显存变化

nvidia-smi --query-gpu=memory.used --format=csv,noheader

剩下的就是把 keep_alive 设成固定短值观察

curl -s http://127.0.0.1:11434/api/generate -d '{"model":"qwen2.5:7b","prompt":"hi","keep_alive":"5m"}'

我习惯把每一步的执行时间和结果记在一边,后面复盘省事。

改完先别撤,确认这几项。卸载后显存回落到基线,/api/ps 与实际占用一致,连续运行一天不再出现幽灵占用。

容易忽略的是,显存没释放不一定是泄漏,先确认是不是另一个请求把模型又拉起来了,再怀疑驱动。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。

作者 9823189