如何在Python的Ollama库中配置keep_alive参数让模型常驻内存,解决每次请求耗时过长问题
如何在Python的Ollama库中配置keep_alive参数让模型常驻内存,解决每次请求耗时过长问题
我太懂你这种憋屈了——M2 MacBook Pro的性能摆在那儿,终端里跑Gemma 3.4B快得飞起,结果一用Python调用就每次等15-25秒,绝对是模型每次请求完就被从内存里踢出去,下次又得重新加载的锅!
你找的那个PR没错,Ollama Python库确实已经支持keep_alive参数了,只是官方文档没跟上,我来给你理清楚怎么正确用它解决问题:
第一步:先确保你的Ollama Python库是最新版
那个添加keep_alive支持的PR已经合并很久了,但如果你用的是旧版本,参数可能不会生效。先升级到最新版:
pip install --upgrade ollama
第二步:正确在Python代码中设置keep_alive参数
你代码里已经在options里加了'keep_alive': 60,这个方向是对的,但有两个关键优化点:
- 如果你希望模型永久常驻内存(只要Ollama服务在运行就不卸载),可以把值设为
-1,比设固定秒数更省心,适合开发测试场景; - 你当前用
asyncio.to_thread把同步的chat方法丢进线程,其实Ollama Python库本身提供了异步原生的async_chat方法,更贴合你的异步上下文,能避免不必要的线程开销,也能更稳定地保持连接状态。
修改后的核心代码片段如下:
async def __call__(self, prompt : str, response_schema : BaseModel, role : str = 'user', temperature : float = 0.0 ): params = { 'model' : self.name, 'messages' : [{ 'role' : role, 'content' : prompt }], 'format' : self._format(response_schema), 'options' : { 'temperature': temperature, # 'num_gpu': 1, # 保持GPU加速开启,M2的GPU能大幅提速模型响应 # 'num_thread': 6, 'keep_alive': -1 # 永久保持模型在内存中(推荐开发阶段使用) # 要是想自动卸载,比如闲置10分钟就卸载,可设为600 } } try: # 替换为异步原生方法,更贴合当前异步上下文 response = await self.client.async_chat(**params) output = json.loads(response['message']['content']) except json.JSONDecodeError as e: raise Exception(f'OllamaModel json解析错误: {e}') except Exception as e: raise Exception(f'OllamaModel LLM通信错误: {e}') return output
第三步:验证效果
修改后运行代码:
- 第一次请求还是会慢(因为要把模型加载到内存);
- 第二次及以后的请求应该会和终端里一样快——这就说明
keep_alive生效了,模型一直留在内存里没被卸载。
额外注意点
- 如果你设了
keep_alive为具体秒数(比如60),那在这个时间窗口内没有新请求,模型就会被自动卸载,下次请求又要重新加载,所以测试阶段建议用-1; - 确保你的Ollama服务端是最新版的,有时候服务端的配置也会影响模型常驻的行为,可以用
ollama update升级服务端; - 如果你用的是自定义的Ollama服务地址(不是本地默认的
http://localhost:11434),要在初始化客户端的时候指定host,比如ollama.Client(host='http://your-ollama-server:11434'),不过你代码里用的是默认客户端,所以没问题。
备注:内容来源于stack exchange,提问作者Lex Podgorny
相关产品推荐
相关产品推荐

