在前兩篇談完「為何要蓋一座地端 AI 建築」與「開源地端模型漫談」之後,這篇要介紹的是整個地端 AI 建築的地基工程:Ollama。
Ollama 把「下載模型、跑推論、開 API」這三件原本要自己兜 llama.cpp、寫 server 的苦工,包成一行指令跟一支背景服務。對於要自建知識庫、Agent 系統的專案來說,Ollama 幾乎已經是預設的地端模型伺服器首選。這篇會分兩部分:先把 macOS 與 Ubuntu 的安裝流程整理清楚,再針對「知識庫專案」實際會用到的一組自訂參數逐一拆解。
Ollama 官方安裝方式其實很單純,但 macOS 跟 Linux(Ubuntu)在「怎麼跑成背景服務」這件事上邏輯不太一樣,值得分開講。
macOS 版本是包成一般的桌面 App:
Ollama.dmg。ollama 這支 CLI,沒有的話會跳出權限請求,幫你在 /usr/local/bin 建立連結,之後就能直接在終端機打 ollama 指令。幾個實務上要注意的地方:
系統需求:macOS Sonoma(v14)以上;Apple Silicon(M 系列)可吃到 CPU/GPU 雙加速,Intel Mac 則只能用 CPU。
模型存放空間:模型檔案動輒數十到數百 GB,如果家目錄空間不夠,可以把 Ollama App 移到其他磁碟位置再啟動(第一次啟動時選擇「不要」移到 Applications),CLI 執行檔會在 Ollama.app/Contents/Resources/ollama。
重要路徑:~/.ollama 放模型與設定,~/.ollama/logs 放 App 與 Server 的 log,這兩個路徑除錯時很常用到。
macOS 上因為是跑成前景 App,環境變數要用 launchctl setenv 設定,這點跟 Linux 的 systemd 做法不同。
Ollama 官方提供一鍵安裝腳本(補註:macOS 環境其實也可以用這方式安裝):
curl -fsSL https://ollama.com/install.sh | sh
這行指令會自動偵測你的硬體(含 NVIDIA / AMD GPU),下載對應的執行檔,並把 Ollama 註冊成一個 systemd 服務。
如果環境不允許跑安裝腳本(例如離線環境、企業內網),也可以手動下載套件安裝:
curl -fsSL https://ollama.com/download/ollama-linux-amd64.tar.zst \
| sudo tar x -C /usr
# 啟動 server
ollama serve
# 另開一個終端機驗證
ollama -v
ARM64 機器(例如樹莓派、Ampere 伺服器)則改抓 ollama-linux-arm64.tar.zst。
若機器有 NVIDIA GPU,安裝完 Ollama 後還需要裝好 CUDA 驅動,用 nvidia-smi 能看到 GPU 資訊即代表驅動正常:
nvidia-smi
接著安裝程式會在 /etc/systemd/system/ollama.service 自動建立服務檔如下:
[Unit]
Description=Ollama Service
After=network-online.target
[Service]
ExecStart=/usr/bin/ollama serve
User=ollama
Group=ollama
Restart=always
RestartSec=3
Environment="PATH=$PATH"
[Install]
WantedBy=multi-user.target
然後啟用並啟動:
sudo systemctl daemon-reload
sudo systemctl enable ollama
sudo systemctl start ollama
sudo systemctl status ollama
日後要查 log,用:
journalctl -e -u ollama
到這裡,macOS 跟 Ubuntu 兩邊的 Ollama 都已經能跑起來、也能在背景常駐。接下來的重點,是怎麼把它「調校」成適合知識庫專案的樣子。
Ollama 所有調校都是透過環境變數完成,在 Linux(systemd 服務)上,慣例做法是執行:
vi /etc/systemd/system/ollama.service
它會開一個編輯器,讓你加上 Environment="KEY=VALUE",改完存檔後記得:
sudo systemctl daemon-reload
sudo systemctl restart ollama
macOS 上因為 Ollama 是跑成一般 App,設定方式不同,要用 launchctl setenv KEY VALUE 逐條設定,然後重新啟動 App 才會生效。
這組設定就是一份典型「RAG 知識庫專案」啟用的 override 設定,以下逐行拆解:
Environment="OLLAMA_HOST=0.0.0.0:11434"
Environment="OLLAMA_NUM_PARALLEL=1"
Environment="OLLAMA_MAX_LOADED_MODELS=4"
Environment="OLLAMA_MAX_QUEUE=2048"
Environment="OLLAMA_KEEP_ALIVE=-1"
Environment="OLLAMA_FLASH_ATTENTION=true"
Environment="OLLAMA_KV_CACHE_TYPE=f16"
Environment="CUDA_VISIBLE_DEVICES=0"
Environment="OLLAMA_MULTIUSER_CACHE=true"
Environment="OLLAMA_NEW_ENGINE=true"
| 參數 | 作用 | 這裡的用意 |
|---|---|---|
OLLAMA_HOST |
Ollama 預設只綁定 127.0.0.1:11434,只能本機呼叫。改成 0.0.0.0:11434 會監聽所有網卡介面 |
讓知識庫服務(例如另一台主機上的 RAG / Agent 程式)能透過內網呼叫這台 Ollama,而不是被鎖死在 localhost |
OLLAMA_NUM_PARALLEL |
控制單一模型同時能處理幾個平行請求,預設為 1;調高會依比例吃掉更多記憶體(RAM 需求 ≈ NUM_PARALLEL × CONTEXT_LENGTH) | 這裡先維持預設值 1,代表暫時不開放同一模型的平行請求,可先求穩定,之後視流量再打開調高 |
OLLAMA_MAX_LOADED_MODELS |
同時間最多能常駐記憶體的模型數量,預設是 GPU 數 × 3(或 CPU 模式下固定 3) | 設成 4,代表這台機器預期會同時掛載到 4 個模型(例如意圖分析模型、RAG 用的對話模型、embedding 模型等),只要記憶體夠就不會被踢出 |
OLLAMA_MAX_QUEUE |
請求佇列上限,超過會回 503 錯誤,預設 512 | 拉高到 2048,因應知識庫服務可能同時湧入大量查詢請求,避免尖峰時段直接被拒絕 |
OLLAMA_KEEP_ALIVE |
模型閒置多久後從記憶體釋放,預設 5 分鐘;設 -1 代表永不釋放 | 知識庫是常態性服務,不希望每次呼叫都重新載入模型造成延遲,所以設成永久常駐 |
OLLAMA_FLASH_ATTENTION |
是否強制啟用 Flash Attention,能大幅降低長文本情境下的記憶體用量 | 設成 true,對 RAG 這種常常要塞長 context(檢索出的文件片段)的場景特別有幫助 |
OLLAMA_KV_CACHE_TYPE |
KV 快取的量化精度,預設 f16;也可設 q8_0(省約一半記憶體、精度損失極小)或 q4_0(省更多但精度損失較明顯) | 這裡維持預設 f16,換句話說沒有為了省記憶體而犧牲精度,知識庫任務對精度比較敏感 |
CUDA_VISIBLE_DEVICES |
限制 Ollama 能看到哪幾張 NVIDIA GPU,多卡時用逗號分隔;設 -1 則強制忽略所有 GPU | 設成 0,只讓 Ollama 看到編號 0 的那張卡(避免搶用其他服務正在用的 GPU) |
OLLAMA_MULTIUSER_CACHE |
針對多使用者情境最佳化 prompt 快取的命中方式 | 設成 true,因為知識庫服務會被多個使用者、多個 Session 同時查詢,開啟後有機會提升重複前綴(例如系統提示詞、固定的 RAG 模板)的快取效率 |
OLLAMA_NEW_ENGINE |
啟用 Ollama 近期推出的新一代推論引擎(獨立於 llama.cpp、以 Go 開發,主打多模態模型與更精準的記憶體管理) | 設成 true,為未來要接多模態模型(例如處理圖片、掃描文件的 OCR 情境)預先鋪路 |
幾個補充說明:
表格中除了 CUDA_VISIBLE_DEVICES 是 NVIDIA 驅動層級的通用環境變數之外,其餘都是 Ollama 自己讀取的變數。
OLLAMA_MULTIUSER_CACHE、OLLAMA_NEW_ENGINE 這三個目前不算是官方 FAQ 重點列出的「常用參數」,比較偏進階/實驗性質,行為可能隨版本調整,正式環境使用前建議先在測試機驗證過。
整組設定看下來,其實有個很清楚的目標:把 GPU 資源吃好吃滿、換取服務穩定常駐與高併發承載,用 MAX_LOADED_MODELS、MAX_QUEUE、KEEP_ALIVE、MULTIUSER_CACHE 這幾個參數把「多模型同時待命、大量請求不掉線」的體驗補回來。這種配置很適合 GPU 資源不太夠、但又需要 Ollama 穩定對外提供服務的知識庫場景。
安裝與參數都搞定之後,Ollama 就正式成為這座地端 AI 建築的地基。下一篇會接著談「從 LangChain 到 LangGraph」,把這個地基之上要蓋的應用邏輯串起來。