Ollama讓你透過幾行指令,即可將大型語言模型部署到Linux、macOS、Windows,並於本機離線執行。
Ollama不是LLM,而是協助你快速安裝各種大型語言模型的一個開源軟體。
1. 爲什麼要用Ollama?#
本節Ivon介紹Ollama的優點。
自從 離線大型語言模型LLaMA問世以來,便有很多前端程式出現,例如Text Generation WebUI、Serge、Dalai、LangChain,讓使用者在自己的電腦離線跑LLM,保障隱私權。
不過隨着開源模型的多樣化,大型語言模型部署變得越來越複雜,例如Text Generation WebUI就要調一堆參數,辨別它是用GPU運算還是llama.cpp的模型,用起來不直覺。
Ivon認為,要簡化部署難度就用Ollama吧,這是用Go語言寫成的程式,將執行大型語言模型所需的東西封裝成單一執行檔,只要一行指令就能讓大型語言模型在你的電腦跑起來。
圖形界面的話,Ollam可以搭配Open WebUI操作,界面設計十分類似ChatGPT。
除了聊天外,你還可以用Open WebUI執行RAG檢索增強生成,讓它整理PDF檔案內容、搜尋網頁,或者用LLaVA模型辨識圖片。
Ollama設計的理念是預設模式很簡單,要折騰也行的那種。使用者可以用類似Dockerfile的方式自訂Ollama的模型參數,快速建立自訂模型。
此外,Ollama不只是設計成一個傻瓜式的大型語言模型軟體而已!
Ollama是開放原始碼的軟體,它提供REST API,讓開發者可以在其他程式輕鬆整合Ollama,作為其他AI軟體的後端服務。比如 ShellGPT背後就用了Ollama,在終端機處理本機檔案,並按照你的系統情況給出建議。
功能更複雜的「LangChain」軟體亦可以 搭配Ollama使用。
2. 安裝Ollama主程式#
Ollama支援Linux、macOS、Windows、Raspberry Pi OS。
按照 Github指示安裝Ollama。
建議電腦至少CPU等級i5七代以上,RAM 8GB以上再使用Ollama。
因為Ollama使用llama.cpp技術,所以不需要獨立GPU也能跑。不過有獨立GPU更好,可以將一些模型層offload給GPU加速運算。
單一執行檔#
- 我的系統為Ubuntu 22.04,使用作者提供的指令稿安裝。它應該會自動偵測架構(x86或arm),並設定好Systemd服務。
curl -fsSL https://ollama.com/install.sh | sh
Ollama的模型預設是用CPU算的。如果要使用Nvidia GPU加速,請記得 安裝Nvidia閉源驅動和CUDA。
確認Ollama服務執行狀況
sudo systemctl status ollama
透過Docker部署#
參考 valiantlynx/ollama-docker的範本。
- 撰寫
docker-compose.yml
,填入以下內容,跑啟用GPU支援的容器
version: '3.8'
services:
ollama:
volumes:
- ./ollama/ollama:/root/.ollama
container_name: ollama
pull_policy: always
tty: true
restart: unless-stopped
image: ollama/ollama:latest
ports:
- 11434:11434
networks:
- ollama-docker
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
- 啟動容器
docker compose up -d
- 之後與Ollama指令互動,使用docker exec
docker exec -it ollama ollama run <參數>
3. 安裝大型語言模型#
現在網路有很多開源的大型語言模型,參見 著名開源大型語言模型列表,有的需要轉檔才能用。
Ollama預設是從自家的 官網Library下載模型,開發者已經幫我們整理好了一票熱門模型,大部分都是GGUF格式的。
如果你要使用HuggingFace的模型,那麼你得撰寫Modelfile匯入。
直接下載安裝#
我們這裡就用最近在Reddit r/LocalLLaMA板評價還不錯的英文模型Mistral 7B吧。
- 使用
ollama pull
指令下載語言模型,模型檔案會儲存到/usr/share/ollama/.ollama/models
ollama pull mistral:7b-instruct
- 確認Ollama服務執行狀況
sudo systemctl status ollama
- 如果你要設定Ollama的環境變數,調整模型的參數等等,作者建議你直接改Systemd Unit檔案
sudo vim /etc/systemd/system/ollama.service
sudo systemctl daemon-reload
使用Modelfile自訂語言模型#
Ollama提供類似Dockerfile的方式,讓你輕鬆自訂模型內容。
參考 Ollama匯入說明,Modelfile也可以讓你匯入.gguf格式的模型,而.safetensors格式必須先用llama.cpp轉檔成.gguf才能匯入到Ollama。
- 下載模型檔,必須為gguf格式。
ollama pull mistral:7b-instruct
- 建立新的Modelfile
vim Modelfile
- 填入以下內容,自訂模型參數。所有指令請看 Github說明。
# 要使用的基礎模型
FROM mistral:7b-instruct
# 或者指定檔案名稱
FROM ./mistral-7b-instruct-v0.1.Q4_0.gguf
# 設定內容上下文長度
PARAMETER num_ctx 4096
# 設定最多使用的CPU執行緒
PARAMETER num_thread 4
# 將一部分模型層offload給GPU運算
PARAMETER num_gpu 10
# 使用Mistral格式範本,其餘範本可在Ollama官網Library查詢
TEMPLATE "[INST] {{ .Prompt }} [/INST]"
# 設定語言模型角色
SYSTEM """
I want you to act as an English translator, spelling corrector and improver.
"""
- 建立名為MyTranslator的新模型
ollama create "MyTranslator" -f ./Modelfile
4. Ollama命令行操作#
- 輸入
ollama run
指令,後面加上模型名稱。加上--verbose
的話可以測試模型回覆的速度。
ollama run mistral:7b-instruct
等待載入完成,開始跟語言模型對話吧。
如果要輸入多行指令,使用
""" """
把提示詞框起來。你也可以傳圖檔給它辨識(需使用LLaVA模型):
What is in this image? "/home/user/Downloads/smile.png"
- Ollama設計的對話程式可以用指令
/save
保留工作階段(session),也就是讓AI記住之前的聊天內容。
# 保存目前的聊天內容
/save session1
# 載入上次的聊天內容
/load session1
- 你還可以調整目前模型的參數,例如修改token、將一部分offload給GPU加快運算、Temperature、Repetition penalty等。
/set parameter num_ctx 4096
/set parameter num_gpu 10
5. 使用Open WebUI圖形界面聊天#
Open WebUI是專為各種語言模型服務設計的網頁界面,同樣高度模組化,可以搭配Ollama或ChatGPT使用。
Open WebUI還能把Ollama的一些指令操作圖形化,例如管理模型、提示詞、要處理的文件等等。
- Ollama服務使用的通訊埠為11434,預設位址是綁定localhost的,如果要使外部網路能存取,編輯Systemd Unit
sudo vim /etc/systemd/system/ollama.service
- 加入
OLLAMA_HOST
。(如果你使用Docker-compose,就把這個環境變數設在Docker-compose的environments
裡面。)
[Service]
Environment="OLLAMA_HOST=0.0.0.0"
- 重新啟動服務
sudo systemctl daemon-reload
sudo systemctl restart ollama
- 參考 valiantlynx/ollama-docker的範本,若Ollama服務在同一台電腦上,就用以下docker-compose部署:
version: '3.8'
services:
ollama-webui:
image: ghcr.io/ollama-webui/ollama-webui:main
container_name: ollama-webui
volumes:
- ./ollama/ollama-webui:/app/backend/data
ports:
- 8080:8080
environment:
- '/ollama/api=http://ollama:11434/api'
extra_hosts:
- host.docker.internal:host-gateway
restart: unless-stopped
networks:
- ollama-docker
networks:
ollama-docker:
external: false
- 這樣就可以透過
http://localhost:8080
存取Open WebUI網頁界面了。所有資料都會儲存到docker volume。