跳至內容

Ollama

出自 Arch Linux 中文维基

Ollama 可以讓用戶在離線情況下,使用本地版大語言模型。

安裝

安裝 ollama 軟體包,提供了後台服務、命令行工具以及使用CPU推斷的能力。

使用顯卡推理:

提示:對於搭載來自 RDNA3 的 AMD 顯卡,ollama-vulkan 通常比 ollama-rocm 可以更快且使用更少的電量,並且可以避免 ROCm 的不支持顯卡問題(另見 #ROCm 沒有使用我的 AMD 顯卡)。集成顯卡自動被跳過;設定 OLLAMA_IGPU_ENABLE=1 來允許他們。

接下來,啟用/啟動 ollama.service 。然後驗證 Ollama 是否成功啟動:

$ ollama --version

如果輸出提示 Warning: could not connect to a running Ollama instance ,則 Ollama 服務沒有成功啟動;否則,Ollama 服務啟動成功並且進入 Ollama 程序的命令行界面,等待用戶輸入命令。

然後,驗證您可以運行模型。下面的命令將會下載最新的 DeepSeek-R1 蒸餾模型 1.5b 參數版 並返回一個 Ollama 的提示符允許您和這個模型對話。

$ ollama run deepseek-r1:1.5b
>>> Send a message (/? for help)

使用

Ollama 的可執行程序沒有提供一個搜索界面。沒有類似 ollama search 的命令。需要尋找一個模型,您需要訪問他們的 搜索頁面

運行模型:

$ ollama run model

停止模型:

$ ollama stop model

拉取模型:

$ ollama pull model

刪除模型:

$ ollama rm model

查看本地可用模型:

$ollama list

配置

全系統配置

Ollama 通過環境變量來進行配置。設定它們在對應服務的附加配置片段,然後重啟 ollama.service

/etc/systemd/system/ollama.service.d/environment.conf
[Service]
Environment="VARIABLE=value"

常用變量:

變量名 解釋
OLLAMA_FLASH_ATTENTION=1 更快地提示詞處理和更小的鍵值緩存;鍵值緩存量化條件。
OLLAMA_KV_CACHE_TYPE 鍵值緩存量化,需要注意:
  • f16 (默認)
  • q8_0f16 的一半 VRAM,輕微的質量下降)
  • q4_0q8_0 的一半 VRAM,明顯的質量下降)
OLLAMA_CONTEXT_LENGTH 每次請求的默認上下文大小,如:32000;如果沒有設定,使用可用的 VRAM 修改大小(4k/32k/256k)。模型可以複寫它(見下文)。
OLLAMA_NUM_PARALLEL 每個模型的並發請求;每一個可以倍增鍵值緩存分配。
OLLAMA_MAX_LOADED_MODELS 每個 GPU 保持加載的模型數量。
OLLAMA_KEEP_ALIVE 最後一次請求後模型在內存中存在的時長 (默認:5m);0 立即卸載,-1 保持它永久加載)。
GGML_VK_VISIBLE_DEVICES=0 在多顯卡系統上(如獨立顯卡 + 集成顯卡),固定一個 Vulkan 推理設備(0 = 第一個出現在啟動日誌中的設備)。
OLLAMA_HOST=host:port 監聽所有接口而不僅僅是 loopback;容器需要此功能(如:Podman/Docker 搜索通過 host.containers.internal)和其他的 LAN 主機。
OLLAMA_IGPU_ENABLE=true 使用集成顯卡來推理。默認情況下它們會被忽略。

查看 ollama serve --help上游 FAQ 以了解其餘變量。

注意:當安裝有 ollama 時,Vulkan 支持默認啟用;OLLAMA_VALKAN=1 就不需要了。
警告:Ollama API 沒有驗證措施。若使用 OLLAMA_HOST=0.0.0.0,這這個網絡上的任何人都可以使用模型————使用防火牆來限制訪問如果這個網絡不可信。

每個模型參數

要運行一個帶有自定義設定的模型,需要把它們使用一個 Modelfile 來拷入一個新模型。

Modelfile
FROM deepseek-r1:1.5b
PARAMETER num_gpu 29
PARAMETER num_ctx 32768
變量名 解釋
FROM 一個被 ollama list 列出的已拉取模型。
PARAMETER num_gpu Number of model layers offloaded to the GPU. Speed rises with each extra layer until VRAM fills. One layer too many spills into GTT (system RAM over PCIe) and speed collapses, even though the model still reports "100% GPU".

Benchmark a few values - the optimum is the most layers that fit just under free VRAM. For example, on a 16 GiB RX 9070 XT running gemma4:26b (Q4_K_M) at 32k context, 29 of 31 layers hit ~88 tok/s with most of the VRAM available; 30 layers dropped to ~75 tok/s (spill) and the auto-offload default gave ~37. With a browser holding ~5 GiB of VRAM the optimum fell to ~24 layers. On an 8 GiB GPU only ~13 layers of this model fit and generation is mostly CPU-bound - there, prefer a model that fits in VRAM entirely (a 7-9B model at Q4_K_M takes ~4-5 GiB) at 8-16k context.

PARAMETER num_ctx 上下文大小:模型第一次看到的最大 Token 數量(提示詞 + 回復)。鍵值緩存和圖層共享 VRAM:上下文越大,擬合層數越小————改完之後需要重新調整num_gpu

之後,使用以下命令創建這個模型:

$ ollama create deepseek-r1-tuned -f Modelfile

ollama create 不會複製本體————這些存儲是由內容定位的,所以一個調整過的變種只會增加一個小的 manifest。在 API option 欄位中,被個請求也可以傳入同樣的參數。

Ollama 不會保存原 Modelfile;這些參數作為附加層存在模型存儲的地方(/var/lib/ollama,manifest 在 manifests/registry.ollama.ai/library/name/tag/)。要更改一個創建好的模型,重寫他的 Modelfile,編輯它並再次執行 ollama create 使用相同的名字(僅有小的 manifest 被重寫)

$ ollama show --modelfile deepseek-r1-tuned > Modelfile
$ ollama create deepseek-r1-tuned -f Modelfile

參見 Modelfile 參考 以了解其餘指令和參數。

故障和修復

ROCm 沒有使用我的 AMD 顯卡

您可能通過類似 amdgpu_top 去監控您的顯卡時在運行 Ollama 服務時,發現顯卡根本沒有被使用。

在沒有配置的情況下,ROCm 忽略不支持的顯卡,這導致所有東西都會在CPU下進行。

注意:檢驗支持顯卡通過檢查 ROCm 系統要求

為了解決這個問題,針對 ollama.service 創建一個附加配置片段

/etc/systemd/system/ollama.service.d/override_gfx_version.conf
[Service]
Environment="HSA_OVERRIDE_GFX_VERSION=X.Y.Z"

其中 X.Y.Z 由您系統的 GFX 版本所決定。

為了設定使用 GFX 的哪個版本來使用,首先確保 rocminfo 已安裝。它應該被安裝在您的系統裡作為一個 rocblas 的非直接的依賴,這由 hipblas 所需要,這並由 ollama 所需要。

接下來,查詢您系統的真正 GFX 版本:

$ /opt/rocm/bin/rocminfo | grep amdhsa

您需要記住輸出的 gfx 後邊的數字,因為這是您系統真正的 GFX 版本。這些數字按以下的方式解讀:

  • 如果數字為4位數,它們可以釋作 XX.Y.Z ,及前兩個數字為 X 部分。
  • 如果數字為3位數,三位數字可被解釋為 X.Y.Z

然後,查找所有安裝的 rocblas 內核:

$ find /opt/rocm/lib/rocblas/library -name 'Kernels.so-*'

您需要設定 X.Y.Z 為其中一個列出的可用版本。以下是總結好的的規則:

  1. 對於 X 部分,它必須嚴格等於實際版本。
  2. 對於 Y 部分,可以不同,但是它必須不得超過實際版本。
  3. 對於 Z 部分,可以不同,但是它必須不得超過實際版本。

在設定好正確的 X.Y.Z 後,執行 daemon-reload重啟 ollama.service

現在,您可以照常地運行您的模型。您可能希望再次通過類似 amdgpu_top 去監控集成顯卡的使用情況。

卸載 Ollama 後模型仍存在

您可以手動刪掉這些模型文件,這些文件存在於 /var/lib/ollama/blobs

另請參閱