Ollama 裝了好幾個模型以後,很多人的第一個問題是:怎麼在聊天、代碼、翻譯和 Embedding 模型之間快速切換?第二個問題往往更實際:爲什麼剛切到另一個模型,前一個就從顯存裏消失了?
先說結論:Ollama 不需要爲每個模型單獨起服務。日常用 ollama run <模型名> 切換即可;用 ollama ps 看當前哪些模型還在內存;不需要的模型用 ollama stop <模型名> 釋放。是否能同時常駐多個模型,取決於它們能否一起放進可用顯存或內存,而不是本地磁盤裏下載了多少模型。
最常用的切換命令
先列出本機已經下載的模型:
|
|
啓動一個聊天或代碼模型:
|
|
需要換成另一個模型時,直接運行另一個名稱:
|
|
或者切到 Embedding 模型做測試:
|
|
模型文件保留在本地,切換不會重新下載。第一次加載模型時需要把權重放進顯存或系統內存,之後如果模型仍被保留在內存中,再次調用會更快。
ollama ps:先看誰佔着顯存
切換不順暢時,先執行:
|
|
它會列出正在運行或仍駐留內存的模型。這裏最值得看的是模型名、佔用大小、處理器位置和到期時間。
如果你只有一張中等顯存顯卡,先後啓動兩個大模型時,Ollama 可能會卸載前一個模型,爲後一個騰位置。這是正常的資源調度,不是模型丟了。模型仍然在磁盤裏,下次調用會重新加載。
不想等它自然過期,可以主動停止:
|
|
再用 ollama ps 確認顯存已經釋放。
默認常駐多久:5 分鐘
Ollama 默認會在模型最後一次使用後保留約 5 分鐘。這個設計適合連續提問:第一次加載稍慢,後續請求不用反覆把同一個模型搬回顯存。
如果你在小顯存機器上輪流使用多個模型,5 分鐘反而可能造成“剛跑完一個,顯存還沒還回來”的感覺。這時有三種控制方式。
方法一:一次調用後立即卸載
通過 API 把 keep_alive 設爲 0:
|
|
這適合模型很大、顯存很緊,而且每次任務都獨立的情況。
方法二:讓模型長時間常駐
如果你整天都在用同一個代碼模型,可以把 keep_alive 設爲負數:
|
|
這樣模型會持續留在內存中,直到手動 ollama stop 或服務重啓。不要在顯存不夠時對多個大模型都這樣設置。
方法三:全局修改默認常駐時間
可以爲 Ollama 服務設置 OLLAMA_KEEP_ALIVE。例如希望所有模型默認保留 30 秒:
|
|
Windows 下,Ollama 會繼承用戶或系統環境變量。設置完成後,需要退出托盤中的 Ollama,再從開始菜單重新啓動。Linux 上如果 Ollama 由 systemd 管理,則在服務環境變量中設置並重啓服務。
API 請求裏的 keep_alive 會覆蓋全局 OLLAMA_KEEP_ALIVE,所以更適合爲不同任務設置不同策略。
多模型常駐的關鍵:OLLAMA_MAX_LOADED_MODELS
OLLAMA_MAX_LOADED_MODELS 用於限制可同時加載的模型數量。例如只想讓服務最多保留一個模型:
|
|
這個設置的意義是避免模型輪換時長期佔滿顯存,但它不是“強行讓一個大模型裝進顯卡”的辦法。GPU 推理時,新的模型只有在能夠完整放入可用顯存時,纔可能與其他模型併發常駐。否則 Ollama 會卸載舊模型,或把模型放到更慢的內存路徑。
對單張 8GB、12GB 或 16GB 顯卡,比較穩的策略通常是:
| 場景 | 建議 |
|---|---|
| 日常只用一個聊天模型 | OLLAMA_MAX_LOADED_MODELS=1,保留 5 分鐘或更短 |
| 小模型聊天 + Embedding | 先看兩者實際佔用,能同時放下再提高數量 |
| 代碼模型與通用模型輪流用 | 不強求雙常駐,按任務切換並主動 ollama stop |
| 服務器多用戶調用 | 結合模型大小、顯存、請求量,再設置併發和隊列 |
不要忽略併發:上下文也會喫內存
多模型問題不只與模型權重有關。每個並行請求都會增加上下文和 KV cache 的資源消耗。
Ollama 還提供兩個相關環境變量:
|
|
OLLAMA_NUM_PARALLEL 控制同一模型可並行處理的請求數。併發數提高時,所需資源會隨上下文長度增加。單卡本地使用時,先保留默認或明確設爲 1 往往更容易排查;不要一邊加載多個模型,一邊把併發拉高。
OLLAMA_MAX_QUEUE 則是繁忙時可排隊的請求數。它只解決排隊,不會增加顯存。
用 Modelfile 給不同用途創建固定別名
如果你總是對同一個底座模型重複設置系統提示詞、溫度或上下文策略,可以用 Modelfile 創建多個本地別名。它們不是複製一整份權重,而是基於一個模型定義不同配置。
例如創建一個偏代碼的配置文件 Modelfile.code:
|
|
創建模型別名:
|
|
之後直接運行:
|
|
同樣可以做一個偏寫作的版本:
|
|
|
|
注意:qwen3-code 和 qwen3-write 雖然共享同一個底座方向,但對運行時來說仍是不同模型配置。顯存緊張時,不要假設它們可以無限同時常駐。
給腳本或 API 按任務切換模型
在 API 裏,模型名本身就是路由字段。腳本不需要重啓服務,只要按任務傳入不同 model:
|
|
一個常見分工是:
- 小模型:分類、改寫、摘要、簡單問答;
- 代碼模型:解釋倉庫、生成腳本、修復錯誤;
- Embedding 模型:向量檢索,不承擔聊天;
- 較大模型:複雜問題,按需加載,用完釋放。
把“選哪個模型”寫在代碼的任務路由裏,比在一個大模型上硬塞所有工作更容易控制速度和顯存。
Windows 下的常見坑
環境變量改了但沒生效
Windows 上修改 OLLAMA_KEEP_ALIVE、OLLAMA_MAX_LOADED_MODELS 或 OLLAMA_MODELS 後,必須退出正在運行的 Ollama 托盤程序並重新啓動。只重開 PowerShell 通常不夠。
模型文件擠滿系統盤
可以設置 OLLAMA_MODELS 把模型目錄遷到其他磁盤,例如:
|
|
保存後重啓 Ollama。遷移已有模型前先確認磁盤空間和目錄權限,不要只改變量就刪除舊目錄。
以爲模型被刪了
切換後 ollama ps 看不到舊模型,只代表它已經從內存卸載;用 ollama ls 仍能看到下載的模型。只有執行下面的命令纔會刪除本地模型文件:
|
|
一套適合單卡的默認策略
如果你只有一張消費級顯卡,又經常在多個模型間切換,可以從這套策略開始:
|
|
然後按任務調用 qwen3-code、qwen3-write 或 Embedding 模型。需要運行大模型時,先執行 ollama stop 停掉不需要的模型;遇到長上下文或大文件,再把併發和常駐數量壓低。
這套配置的目標不是讓顯卡同時加載越多模型越好,而是讓每次切換可預測、顯存不會長期被遺忘的模型佔滿。
總結
Ollama 多模型切換的核心命令只有四個:
|
|
想讓不同用途的模型更好管理,就用 Modelfile 創建別名;想控制加載和釋放,就用 keep_alive、OLLAMA_KEEP_ALIVE 與 OLLAMA_MAX_LOADED_MODELS。先按顯存決定可同時常駐的數量,再考慮多模型路由和併發,配置會穩定得多。
參考: