快轉到主要內容

Ollama + Open WebUI,快捷部署AI大型語言模型到你的電腦,離線執行

開源AI人工智慧應用 大型語言模型 Large Language Model Retrieval Augmented Generation
🗓️ 民國113年 甲辰年
✍ 切換正體/簡體字
目錄

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加速運算。

單一執行檔
#

  1. 我的系統為Ubuntu 22.04,使用作者提供的指令稿安裝。它應該會自動偵測架構(x86或arm),並設定好Systemd服務。
curl -fsSL https://ollama.com/install.sh | sh
  1. Ollama的模型預設是用CPU算的。如果要使用Nvidia GPU加速,請記得 安裝Nvidia閉源驅動和CUDA

  2. 確認Ollama服務執行狀況

sudo systemctl status ollama

透過Docker部署
#

參考 valiantlynx/ollama-docker的範本。

  1. 撰寫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]
  1. 啟動容器
docker compose up -d
  1. 之後與Ollama指令互動,使用docker exec
docker exec -it ollama ollama run <參數>

3. 安裝大型語言模型
#

現在網路有很多開源的大型語言模型,參見 著名開源大型語言模型列表,有的需要轉檔才能用。

Ollama預設是從自家的 官網Library下載模型,開發者已經幫我們整理好了一票熱門模型,大部分都是GGUF格式的。

如果你要使用HuggingFace的模型,那麼你得撰寫Modelfile匯入。

直接下載安裝
#

我們這裡就用最近在Reddit r/LocalLLaMA板評價還不錯的英文模型Mistral 7B吧。

  1. 使用ollama pull指令下載語言模型,模型檔案會儲存到/usr/share/ollama/.ollama/models
ollama pull mistral:7b-instruct
  1. 確認Ollama服務執行狀況
sudo systemctl status ollama
  1. 如果你要設定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。

  1. 下載模型檔,必須為gguf格式。
ollama pull mistral:7b-instruct
  1. 建立新的Modelfile
vim Modelfile
  1. 填入以下內容,自訂模型參數。所有指令請看 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.
"""
  1. 建立名為MyTranslator的新模型
ollama create "MyTranslator" -f ./Modelfile

4. Ollama命令行操作
#

  1. 輸入ollama run指令,後面加上模型名稱。加上--verbose的話可以測試模型回覆的速度。
ollama run mistral:7b-instruct
  1. 等待載入完成,開始跟語言模型對話吧。

  2. 如果要輸入多行指令,使用""" """把提示詞框起來。

  3. 你也可以傳圖檔給它辨識(需使用LLaVA模型):

What is in this image? "/home/user/Downloads/smile.png"
  1. Ollama設計的對話程式可以用指令/save 保留工作階段(session),也就是讓AI記住之前的聊天內容。
# 保存目前的聊天內容
/save session1

# 載入上次的聊天內容
/load session1
  1. 你還可以調整目前模型的參數,例如修改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的一些指令操作圖形化,例如管理模型、提示詞、要處理的文件等等。

  1. Ollama服務使用的通訊埠為11434,預設位址是綁定localhost的,如果要使外部網路能存取,編輯Systemd Unit
sudo vim /etc/systemd/system/ollama.service
  1. 加入OLLAMA_HOST。(如果你使用Docker-compose,就把這個環境變數設在Docker-compose的environments裡面。)
[Service]
Environment="OLLAMA_HOST=0.0.0.0"
  1. 重新啟動服務
sudo systemctl daemon-reload

sudo systemctl restart ollama
  1. 參考 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
  1. 這樣就可以透過http://localhost:8080存取Open WebUI網頁界面了。所有資料都會儲存到docker volume。

相關文章

Text Generation WebUI:如何下載大型語言模型(LLM)
開源AI人工智慧應用 大型語言模型 LLaMA AI Large Language Model
Text Generation WebUI安裝教學(Linux / Windows / macOS)
開源AI人工智慧應用 大型語言模型 LLaMA AI Large Language Model
oobabooga的Text Generation WebUI ~ 離線聊天AI介紹
開源AI人工智慧應用 大型語言模型 LLaMA AI Large Language Model

留言板

此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。要討論程式碼請用Giscus,匿名討論請用Disqus。

這是Giscus留言板,需要Github帳號才能留言。支援markdown語法,若要上傳圖片請貼Imgur連結。您的留言會在Github Discussions向所有人公開。

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。