Ollama 多模型切换怎么配置:常驻、显存和 Modelfile 教程

整理 Ollama 多模型切换的实用配置:ollama run、ps、stop、Modelfile 别名、keep_alive、OLLAMA_KEEP_ALIVE 和 OLLAMA_MAX_LOADED_MODELS,并说明显存不足时如何避免模型互相挤掉。

Ollama 装了好几个模型以后,很多人的第一个问题是:怎么在聊天、代码、翻译和 Embedding 模型之间快速切换?第二个问题往往更实际:为什么刚切到另一个模型,前一个就从显存里消失了?

先说结论:Ollama 不需要为每个模型单独起服务。日常用 ollama run <模型名> 切换即可;用 ollama ps 看当前哪些模型还在内存;不需要的模型用 ollama stop <模型名> 释放。是否能同时常驻多个模型,取决于它们能否一起放进可用显存或内存,而不是本地磁盘里下载了多少模型。

最常用的切换命令

先列出本机已经下载的模型:

1
ollama ls

启动一个聊天或代码模型:

1
ollama run qwen3:8b

需要换成另一个模型时,直接运行另一个名称:

1
ollama run qwen3:4b

或者切到 Embedding 模型做测试:

1
ollama run embeddinggemma "测试一段文本"

模型文件保留在本地,切换不会重新下载。第一次加载模型时需要把权重放进显存或系统内存,之后如果模型仍被保留在内存中,再次调用会更快。

ollama ps:先看谁占着显存

切换不顺畅时,先执行:

1
ollama ps

它会列出正在运行或仍驻留内存的模型。这里最值得看的是模型名、占用大小、处理器位置和到期时间。

如果你只有一张中等显存显卡,先后启动两个大模型时,Ollama 可能会卸载前一个模型,为后一个腾位置。这是正常的资源调度,不是模型丢了。模型仍然在磁盘里,下次调用会重新加载。

不想等它自然过期,可以主动停止:

1
ollama stop qwen3:8b

再用 ollama ps 确认显存已经释放。

默认常驻多久:5 分钟

Ollama 默认会在模型最后一次使用后保留约 5 分钟。这个设计适合连续提问:第一次加载稍慢,后续请求不用反复把同一个模型搬回显存。

如果你在小显存机器上轮流使用多个模型,5 分钟反而可能造成“刚跑完一个,显存还没还回来”的感觉。这时有三种控制方式。

方法一:一次调用后立即卸载

通过 API 把 keep_alive 设为 0

1
2
3
4
5
curl http://localhost:11434/api/generate -d '{
  "model": "qwen3:8b",
  "prompt": "用一句话解释 KV cache",
  "keep_alive": 0
}'

这适合模型很大、显存很紧,而且每次任务都独立的情况。

方法二:让模型长时间常驻

如果你整天都在用同一个代码模型,可以把 keep_alive 设为负数:

1
2
3
4
curl http://localhost:11434/api/generate -d '{
  "model": "qwen3:8b",
  "keep_alive": -1
}'

这样模型会持续留在内存中,直到手动 ollama stop 或服务重启。不要在显存不够时对多个大模型都这样设置。

方法三:全局修改默认常驻时间

可以为 Ollama 服务设置 OLLAMA_KEEP_ALIVE。例如希望所有模型默认保留 30 秒:

1
OLLAMA_KEEP_ALIVE=30s

Windows 下,Ollama 会继承用户或系统环境变量。设置完成后,需要退出托盘中的 Ollama,再从开始菜单重新启动。Linux 上如果 Ollama 由 systemd 管理,则在服务环境变量中设置并重启服务。

API 请求里的 keep_alive 会覆盖全局 OLLAMA_KEEP_ALIVE,所以更适合为不同任务设置不同策略。

多模型常驻的关键:OLLAMA_MAX_LOADED_MODELS

OLLAMA_MAX_LOADED_MODELS 用于限制可同时加载的模型数量。例如只想让服务最多保留一个模型:

1
OLLAMA_MAX_LOADED_MODELS=1

这个设置的意义是避免模型轮换时长期占满显存,但它不是“强行让一个大模型装进显卡”的办法。GPU 推理时,新的模型只有在能够完整放入可用显存时,才可能与其他模型并发常驻。否则 Ollama 会卸载旧模型,或把模型放到更慢的内存路径。

对单张 8GB、12GB 或 16GB 显卡,比较稳的策略通常是:

场景 建议
日常只用一个聊天模型 OLLAMA_MAX_LOADED_MODELS=1,保留 5 分钟或更短
小模型聊天 + Embedding 先看两者实际占用,能同时放下再提高数量
代码模型与通用模型轮流用 不强求双常驻,按任务切换并主动 ollama stop
服务器多用户调用 结合模型大小、显存、请求量,再设置并发和队列

不要忽略并发:上下文也会吃内存

多模型问题不只与模型权重有关。每个并行请求都会增加上下文和 KV cache 的资源消耗。

Ollama 还提供两个相关环境变量:

1
2
OLLAMA_NUM_PARALLEL=1
OLLAMA_MAX_QUEUE=512

OLLAMA_NUM_PARALLEL 控制同一模型可并行处理的请求数。并发数提高时,所需资源会随上下文长度增加。单卡本地使用时,先保留默认或明确设为 1 往往更容易排查;不要一边加载多个模型,一边把并发拉高。

OLLAMA_MAX_QUEUE 则是繁忙时可排队的请求数。它只解决排队,不会增加显存。

用 Modelfile 给不同用途创建固定别名

如果你总是对同一个底座模型重复设置系统提示词、温度或上下文策略,可以用 Modelfile 创建多个本地别名。它们不是复制一整份权重,而是基于一个模型定义不同配置。

例如创建一个偏代码的配置文件 Modelfile.code

1
2
3
FROM qwen3:8b
SYSTEM 你是一个中文编程助手。先说明修改思路,再给出可运行的最小代码。
PARAMETER temperature 0.2

创建模型别名:

1
ollama create qwen3-code -f Modelfile.code

之后直接运行:

1
ollama run qwen3-code

同样可以做一个偏写作的版本:

1
2
3
FROM qwen3:8b
SYSTEM 你是中文写作助手,回答前先给结论,再给必要的结构化说明。
PARAMETER temperature 0.7
1
2
ollama create qwen3-write -f Modelfile.write
ollama run qwen3-write

注意:qwen3-codeqwen3-write 虽然共享同一个底座方向,但对运行时来说仍是不同模型配置。显存紧张时,不要假设它们可以无限同时常驻。

给脚本或 API 按任务切换模型

在 API 里,模型名本身就是路由字段。脚本不需要重启服务,只要按任务传入不同 model

1
2
3
4
5
6
7
8
curl http://localhost:11434/api/chat -d '{
  "model": "qwen3-code",
  "messages": [
    {"role": "user", "content": "解释这段 Python 的异常处理逻辑"}
  ],
  "stream": false,
  "keep_alive": "10m"
}'

一个常见分工是:

  • 小模型:分类、改写、摘要、简单问答;
  • 代码模型:解释仓库、生成脚本、修复错误;
  • Embedding 模型:向量检索,不承担聊天;
  • 较大模型:复杂问题,按需加载,用完释放。

把“选哪个模型”写在代码的任务路由里,比在一个大模型上硬塞所有工作更容易控制速度和显存。

Windows 下的常见坑

环境变量改了但没生效

Windows 上修改 OLLAMA_KEEP_ALIVEOLLAMA_MAX_LOADED_MODELSOLLAMA_MODELS 后,必须退出正在运行的 Ollama 托盘程序并重新启动。只重开 PowerShell 通常不够。

模型文件挤满系统盘

可以设置 OLLAMA_MODELS 把模型目录迁到其他磁盘,例如:

1
OLLAMA_MODELS=D:\OllamaModels

保存后重启 Ollama。迁移已有模型前先确认磁盘空间和目录权限,不要只改变量就删除旧目录。

以为模型被删了

切换后 ollama ps 看不到旧模型,只代表它已经从内存卸载;用 ollama ls 仍能看到下载的模型。只有执行下面的命令才会删除本地模型文件:

1
ollama rm qwen3:8b

一套适合单卡的默认策略

如果你只有一张消费级显卡,又经常在多个模型间切换,可以从这套策略开始:

1
2
3
OLLAMA_MAX_LOADED_MODELS=1
OLLAMA_KEEP_ALIVE=2m
OLLAMA_NUM_PARALLEL=1

然后按任务调用 qwen3-codeqwen3-write 或 Embedding 模型。需要运行大模型时,先执行 ollama stop 停掉不需要的模型;遇到长上下文或大文件,再把并发和常驻数量压低。

这套配置的目标不是让显卡同时加载越多模型越好,而是让每次切换可预测、显存不会长期被遗忘的模型占满。

总结

Ollama 多模型切换的核心命令只有四个:

1
2
3
4
ollama ls
ollama run <模型名>
ollama ps
ollama stop <模型名>

想让不同用途的模型更好管理,就用 Modelfile 创建别名;想控制加载和释放,就用 keep_aliveOLLAMA_KEEP_ALIVEOLLAMA_MAX_LOADED_MODELS。先按显存决定可同时常驻的数量,再考虑多模型路由和并发,配置会稳定得多。

参考:

记录并分享
使用 Hugo 构建
主题 StackJimmy 设计