windows如何让ollama模型常驻内存

模型与算力

给 Windows 本地跑 Ollama 的用户一套可落地做法:通过环境变量与请求参数让模型常驻内存,减少反复加载的等待。

在 Windows 上跑 Ollama,最烦人的是你问一句它就得重新把模型读进内存,等了半天才吐出第一个字;多轮对话中间隔久了,又被卸载一次。这篇不聊选哪个模型,只讲怎么让它别老卸载:先分清内存常驻和显存常驻,再按环境变量、请求参数、系统侧三块去调,最后给一套验证与排查顺序。

在 Windows 上跑 Ollama,最烦人的一件事是你问一句它就得重新把模型读进内存,等了半天才吐出第一个字;多轮对话中间隔久了,又被卸载一次,下次再问又等一轮。这个问题跟选哪个模型没关系,纯粹是加载策略的事。

这篇只讲怎么让它别老卸载:先分清内存常驻和显存常驻的区别,再按服务端环境变量、请求参数、系统侧三块去调,最后给一套验证和排查顺序。思路是先想清楚自己到底需不需要常驻,再动手改配置。

先分清两件事:常驻内存和常驻显存不是一回事

很多人把「模型常驻」理解成只占内存,其实 Ollama 卸载模型时会把权重从内存和显存一起释放。你感觉到的「重新加载」,通常是两者都发生了。所以只想减少加载等待,核心是别让它触发卸载计时,而不是单独去优化内存或显存某一边。

  • 常驻的代价是内存或显存被长期占住,浏览器、IDE、游戏可用的余量会变小;机器本来就吃紧的,常驻反而让整机变卡。
  • 判断自己属于哪种情况:任务间隔短、反复问同一个模型,常驻划算;一天只问几次、每次模型还不一样,常驻收益很低。
  • 先确认当前占用情况再动手,别凭感觉加参数;任务管理器里看那个推理进程在两次请求之间内存是不是掉下去过,这比猜准得多。
  • 机器上装了多个本地推理工具时,它们会互相抢同一块显存,这种场景下常驻设置要相应放宽,或者干脆只让一个工具常驻。

服务端侧:用环境变量给 Ollama 定好「别急着卸载」

Windows 上设置 Ollama 的环境变量,要写进系统变量或用户变量里,改完必须让服务进程重启才生效,只关掉命令行窗口没用。和常驻最相关的是控制模型保持时间的变量,以及各类资源占用上限的变量。具体变量名和取值口径以官方文档和站内资料为准,别照抄别人博客里的旧名字,变量名改过好几轮。

  1. 整理变量把模型存储路径、监听地址、保持时间这几类变量一次性整理到同一个地方,避免后续排查时分不清是哪个变量在起作用。
  2. 写入系统变量在系统属性的环境变量界面里新增,别只在当前终端里临时 set,那种重启就没了。
  3. 彻底重启服务服务是在托盘里后台跑的那种,要从托盘菜单退出再启动,否则你看到的仍然是旧配置的行为。
  4. 验证生效重启后发一次请求,隔几分钟再发一次,看日志里有没有第二次加载记录,有就说明保持时间没吃进去。

请求侧:按次指定保持时间,比全局改更灵活

Ollama 的生成类接口支持带上保持时间的请求参数,可以在请求里显式说明这个模型用完别马上卸。适合你只希望某几个常用模型常驻、其它模型按需加载的场景。全局改是一刀切,请求侧改是按次生效,两者可以叠加。

调整方式适合谁注意点
全局环境变量只用一两个固定模型、机器内存够改完必须重启服务进程
请求参数带保持时间多个模型轮换、只想让常用的常驻部分图形客户端会覆盖你传的值
统一入口调用团队共用、参数口径要一致前期要搭一层转发,别每个工具各配一遍

设成一个很大的值约等于常驻,但这不是永久。服务重启、系统休眠恢复、内存压力过大时仍可能被释放,别把它当成绝对不会卸载的承诺。配合不同客户端时要注意:有些图形界面客户端会自己传一套参数,把你的设置覆盖掉。发现设置不生效,先看它实际发出去的请求体里带没带你写的那个字段。

验证与排查:怎么确认它真的常驻了,不生效往哪查

验证顺序很简单:先看服务日志里模型加载和卸载的记录,再看任务管理器里对应进程的内存占用,在两次请求之间是不是保持在高位。日志里有连续的加载记录,基本就是没常驻住。两步都过,才算真的生效。

  • 变量是否写在了服务实际读取的位置,用户变量和服务账号不匹配是很常见的坑。
  • 服务是否真重启过,托盘图标退出再启动,别只关窗口。
  • 客户端是否覆盖了参数,抓一次它发出去的请求体看。
  • 是不是请求走了另一套本地推理后端,装了多个工具时经常发生。
  • 模型本身是否超出硬件余量,这种情况下常驻只是把加载时间换成卡顿。

内存或显存被占满导致整机变卡时,先把保持时间调短,或只保留一个常用模型常驻,再逐步加回去,不要一次全开。如果模型本身超出你的硬件余量,再怎么常驻也只是把加载时间换成卡顿;这种时候应该换更小的量化版本或更小的模型。具体该选多大的,可以到 本地推理速度测试(/tools/speed-test) 跑一下再决定,也顺手核对当时的数字。

什么情况下别折腾常驻

常驻不是默认最优解,下面这几种场景调了反而更糟。判断标准就一条:常驻省下的加载时间,能不能盖过它长期占资源带来的代价。盖不过就别调。

  • 机器同时跑训练、视频渲染、大型游戏等吃显存的任务时,常驻会直接互相抢资源,得不偿失。
  • 模型轮换频繁、每次用的都不是同一个,常驻只会把内存占满,而加载次数并没有减少。
  • 多人共用一个 Windows 机器或远程桌面环境时,常驻占用对别人是隐形成本,改之前最好先确认没有其它重负载使用者。
  • 笔记本靠电池供电、又在意续航的,常驻会让显卡或内存持续处于活跃状态,耗电明显上升。
下一步改完参数别只凭感觉,去站内跑一轮本地速度测试,对比常驻前后的首字等待时间,再结合价格与部署页面确认硬件余量够不够。

常见问题

设了保持时间,为什么模型还是被卸载了?

先确认服务进程是否真的重启过、变量是否写在服务会读取的位置,然后检查你的客户端有没有自己传一套参数把它覆盖掉。另外服务重启、系统休眠唤醒之后状态会重置,这也属于正常现象,不代表设置没生效。

常驻内存和常驻显存要分别设置吗?

不用各自单独设。Ollama 的保持时间管的是「这个模型还留不留着」,内存和显存是一起被释放或一起被保留的。你能调的是留多久,以及给多大资源上限;想让显存占用更稳,得从模型大小和量化档位入手。

常驻会不会一直占着内存不放,影响别的程序?

会。保持时间越长,权重就长期占着内存和显存,浏览器、IDE 这类程序可用余量会变小。比较稳的做法是只让一两个最常用的模型常驻,其它保持默认;机器内存本来就紧张的话,建议不加这类设置,靠减小模型体量来解决等待问题。

本文依据各平台公开文档与官方公告整理,只做中文归纳;具体做法、参数与限制以官方文档为准。