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 設計