Ollama
Ollama 可以讓用戶在離線情況下,使用本地版大語言模型。
安裝
安裝 ollama包 軟體包,提供了後台服務、命令行工具以及使用CPU推斷的能力。
使用顯卡推理:
- 安裝 ollama-vulkan包,以使用 Vulkan 推理。
- 安裝 ollama-cuda包,以使用 CUDA 推理。
- 安裝 ollama-rocm包,以使用 ROCm 推理。
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 |
鍵值緩存量化,需要注意:
|
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_VALKAN=1 就不需要了。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 |
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下進行。
為了解決這個問題,針對 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 為其中一個列出的可用版本。以下是總結好的的規則:
- 對於
X部分,它必須嚴格等於實際版本。 - 對於
Y部分,可以不同,但是它必須不得超過實際版本。 - 對於
Z部分,可以不同,但是它必須不得超過實際版本。
在設定好正確的 X.Y.Z 後,執行 daemon-reload 並 重啟 ollama.service。
現在,您可以照常地運行您的模型。您可能希望再次通過類似 amdgpu_top包 去監控集成顯卡的使用情況。
卸載 Ollama 後模型仍存在
您可以手動刪掉這些模型文件,這些文件存在於 /var/lib/ollama/blobs。