如果你经常使用 Ollama 在本地运行大模型,你可能遇到过这种情况:聊了几句之后去倒杯水,回来再问一个问题,发现模型又要重新加载几秒钟甚至更久。
这是因为 Ollama 为了节省显存资源,默认会在模型空闲 5 分钟 后自动将其卸载。
但在很多场景下(比如作为常驻的代码助手、翻译工具),我们希望模型能像服务一样一直在线(Keep Alive),随时秒回。
本文将介绍如何在 Windows 下设置 Ollama 模型常驻,并重点解析一个很多人都会踩的“引号陷阱”。
核心参数:OLLAMA_KEEP_ALIVE
Ollama 提供了一个环境变量 OLLAMA_KEEP_ALIVE 来控制模型在内存中的停留时间。
- 默认值:
5m(5分钟) - 常用值:
24h(24小时)、30m(30分钟) - 永久常驻:
-1
我们要做的,就是把这个变量设置为 -1。但在 Windows 下,在哪里设置决定了要不要加引号。
方法一:永久生效(系统环境变量设置)
这是最推荐的方法。设置一次,以后每次开机启动 Ollama 都会自动生效。
操作步骤:
- 按
Win键,搜索 “编辑系统环境变量” 并打开。 - 点击右下角的 “环境变量” 按钮。
- 在 “用户变量” 区域点击 “新建”。
- 输入以下内容:
- 变量名:
OLLAMA_KEEP_ALIVE - 变量值:
-1 - ⚠️ 注意:这里绝对不要加引号!
- 点击确定保存。
- 重启 Ollama: 右键点击任务栏右下角的 Ollama 托盘图标 -> Quit,然后重新运行 Ollama。
方法二:临时生效(PowerShell 命令行)
如果你只是想临时测试一下,可以在 PowerShell 中通过命令行启动。
操作步骤:
- 退出当前的 Ollama 后台。
- 打开 PowerShell,输入:
$env:OLLAMA_KEEP_ALIVE="-1"; ollama serve
- ⚠️ 注意:这里必须加引号!
💡 深度解析:为什么一个要引号,一个不要?
很多朋友在这里会感到困惑:为什么在命令行里写 "-1" 可以,在系统设置里写 "-1" 就不行?
这是一个关于 “数据类型” 和 “所见即所得” 的区别。
1. 为什么 PowerShell 需要引号 "-1"?
PowerShell 是面向对象的命令行环境。
- 如果你直接写
-1,PowerShell 会把它识别为 数字(整数 Int32)。 - 如果你写
"-1",PowerShell 会把它识别为 字符串(String)。
环境变量本质上必须是字符串。为了避免 PowerShell 产生歧义(比如把 - 当作减法运算或参数引导符),我们需要用引号包裹,强制告诉系统:“这是一个字符串文本”。
2. 为什么系统环境变量窗口不能加引号?
Windows 的图形设置界面是“所见即所得”的纯文本输入框。
- 它不具备代码解析能力。
- 如果你输入
"-1",Windows 会认为那两个引号也是值的一部分。 - 最终传给 Ollama 程序的值就变成了
"-1"(带引号的文本)。Ollama 后台程序(Go语言)在尝试把这个带引号的文本解析成数字时间时,就会报错或失效。
总结口诀:
代码里要语法(加引号),界面里要裸奔(不加引号)。
如何验证设置成功?
设置完成后,你可以通过以下步骤验证:
- 运行任意模型:
ollama run llama3 - 按
Ctrl+D退出对话。 - 在终端输入:
ollama ps
查看 UNTIL 这一列:
- 如果你看到
5m或4m59s,说明设置失败。 - 如果你看到
Forever,恭喜你,设置成功!你的模型已经实现了永久常驻。
NAME ID SIZE PROCESSOR UNTIL
llama3 a6990ed6v9 4.7 GB 100% GPU Forever
希望这篇小技巧能帮你解决 Ollama 的“健忘症”!
版权属于:soarli
本文链接:https://blog.soarli.top/archives/806.html
转载时须注明出处及本声明。