问题出现得很突然,日志倒是留得挺全。用 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 与实际占用一致,连续运行一天不再出现幽灵占用。
容易忽略的是,显存没释放不一定是泄漏,先确认是不是另一个请求把模型又拉起来了,再怀疑驱动。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。
