You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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,这个方向是对的,但有两个关键优化点:

  1. 如果你希望模型永久常驻内存(只要Ollama服务在运行就不卸载),可以把值设为-1,比设固定秒数更省心,适合开发测试场景;
  2. 你当前用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

第三步:验证效果

修改后运行代码:

  1. 第一次请求还是会慢(因为要把模型加载到内存);
  2. 第二次及以后的请求应该会和终端里一样快——这就说明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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 19:32:57