使用 Ollama 執行 LLM (大型語言模型) 建立個人用 AI

Ollama

Ollama 是一個開放源始碼的工具,可以讓我們在自己的電腦上建立 LLM (大型語言模型) 的運行環境,打造擁有個人隱私的 AI 工具。

1. Ollama 簡介

以往要執行 LLM (Large Language Model, 大型語言模型) 必須有強大的硬體設備,一般人很難在自己的電腦上做到,大多使用 OpenAI 提供的 ChatGPT 或是 Claude 等等線上服務,但考量到隱私問題,能在自己電腦上運行 LLM 還是比較好的。

於是有了開源的 llama.cpp 專案,主要目標是在本地和雲端的各種硬體上以最少的設定和最先進的效能實現 LLM 的執行環境,它使用 C++ 實作解譯、執行 LLM 的功能。

Ollama 使用 llama.cpp 並包裝成比較容易使用的界面,只要執行簡單的指令就能下載、執行及管理模型。

2. 安裝

2.1 Mac

使用 brew :

brew install ollama

或直接下載,解壓縮後移到應用程式目錄即可。

2.2 Windows

使用 Chocolatey:

choco install ollama

使用 scoop:

scoop install main/ollama

或直接下載安裝程式。

2.3 Linux

使用 Ollama 提供的安裝腳本:

curl -fsSL https://ollama.com/install.sh | sh

更新時一樣執行此腳本。

另外也可以透過 Snap 安裝。

2.4 Docker

使用官方 Ollama Docker image

3. 模型介紹

3.1 參數數量

參數數量 (Parameters) 會決定 LLM (大型語言模型,後面都簡稱模型) 的大小,參數越大除了佔用的磁碟空間越多之外,在執行時也需要越大的記憶體空間,因此在選擇上必須優先考量自己電腦的硬體設備,選擇適合的模型。

模型的不同參數數量的版本會以 B (billion, 10億) 來標記,例如:llama3.1:8b 就是 80 億參數數量的版本。當然也有小一點的語言模型是以 M (million, 100萬) 來表示,通常用於嵌入式裝置或手機上。

參數數量越大,一般被認為具有更強的學習能力和更複雜的功能。但要在自己的電腦上運行的話,就必須考量硬體是否能夠負荷的了這個模型。以往 LLM 是使用 GPU 或 NPU 來運行,Ollama 提供了一個使用 CPU 來運行的環境。另一個重要的硬體就是記憶體,參數數量越大的模型必須使用更大的記憶體空間,或是使用量化版本來降低記憶體的使用量。

記憶體容量可執行的模型參數數量:
8 GB 可執行 7B 模型
16 GB 可執行 13B 模型
32 GB 可執行 33B 模型

3.2 量化版本

量化 (Quantization) 版本是一種降低模型容量、增加運算效率、降低執行功耗的技術,簡單來說,可以把它想像成 JPEG 圖片的壓縮技術,壓縮率越低,圖片的畫質越好,越接近原圖;壓縮率越高,圖片的畫質就越差。

(圖片截取自:huggingface.co)

模型會提供不同的量化版本,原始版本為 8-bit,往下有 6-bit、5-bit、4-bit、3-bit、2-bit 等等,每個位元版本可能還會有細微的差異版本。一般的建議使用版本至少為 4-bit 以上,Ollama Models 預設提供的模型量化版本就是這個版本,再往下的版本的回應品質可能無法接受,往上的版本越接近模型原始的品質,要使用多高的版本當然就取決於你使用的電腦硬體,這是一種品質效能平衡度的選擇。一般選擇 Q4_K_M 即可,但若硬體可行,選擇 Q5_K_M 可以擁有好一點的品質。再往上的 Q6_K 雖然會更好,但其實差異已經沒那麼明顯,卻必須耗用更多的硬體資源。如果你覺得模型在回應時速度很慢,就表示你的電腦硬體無法負荷這個參數數量或量化版本的模型,只能選擇更少參數數量的模型或其他量化版本。

影響模型品質的好壞,參數數量優先於量化版本,參數數量越大的品質一定比小的好。

3.3 推薦的模型

剛裝好 Ollama 後,我簡單試用了幾個模型,這裡推薦幾個還不錯的,並且附上該模型適合的使用場景 (即它的強項),不過這只是我個人短期試用的體驗,不代表該模型的實際能力,我都選適合記憶體 16GB 以下的模型,另外,如果執行時覺得模型反應的時間太長或回應時輸出的文字太慢,就是 CPU 不夠力,請降低參數版本。

我使用的電腦硬體提供參考:
CPU: AMD Ryzen7 5700g with radeon graphics × 16
RAM: 32 GB

模型 參數數量 容量 所屬 說明
Llama 3.2 3B 2.0GB Meta 2024年10月左右釋出的新模型,針對硬體較弱的裝置,例如手機等。如果覺得 3B 還是太大,還可以選則 1B 版本。
Llama 3.1 8B 4.7GB Meta 通用模型,不確定要用哪個模型就用這個。
Gemma 2 9B 5.5GB Google 通用模型,品質略好於 Llama 3。
StarCoder2 7B 4.0GB BigCode 針對程式語言訓練的模型,非常適合用來做為寫程式時的輔助模型。3B 和 7B 都針對 17 種程式語言訓練,15B 針對 600 種以上程式語言訓練。
aya-expanse 8B 5.1GB Cohere 針對自然語言做訓練,官方說在 23 種語言上的表現出色,適合用來做為多國語言翻譯的輔助模型。
Llama-3-Taiwan-8B-Instruct-GGUF 8B(Q5_K_M) 5.7GB   在 Llama 3 之上針對台灣用語訓練的模型,我覺得是目前繁體中文能力最好的模型。
註:這裡的容量是指 Ollama 預設提供 4-bit 模型的容量,可自行選擇不同的量化版本,容量會因此不同。

3.4 模型的安裝目錄及指令歷史記錄檔案

下載的模型儲存的目錄:

  • macOS: ~/.ollama/models
  • Linux: /usr/share/ollama/.ollama/models
  • Windows: C:\Users\%username%\.ollama\models

你所有和模型對話的歷史記錄會儲存在一個檔案中 (Linux):

~/.ollama/history

4. 操作指令

Ollama 提供在終端機執行的指令,使用這些指令即可管理及執行模型。

4.1 下載模型

模型可以在 Ollama Models 的頁面找到,點選模型後,頁面上即提供指令可以複製。另外也可以在 huggingface.co 找到模型,這裡的模型是很多人自行基於某個模型再訓練後發佈的版本。

# 下載模型的預設版本
ollama pull llama3.1

# 下載模型時,指定參數數量的版本
ollama pull llama3.1:8b

# 下載模型時,指定參數數量的版本及量化版本
ollama pull llama3.1:8b-instruct-q5_K_M

如果重覆執行此指令,會更新已下載的模型,只下載差異的部分。

記憶體容量可執行的模型參數數量:
8 GB 可執行 7B 模型
16 GB 可執行 13B 模型
32 GB 可執行 33B 模型

4.2 執行並下載模型

這個指令會執行模型,但是如果模型不存在,它就會自動去下載,也就是先 pull

ollama run llama3.1
或
ollama run llama3.1:8b
或
ollama run llama3.1:8b-instruct-q5_K_M

4.3 刪除模型

模型還滿佔磁碟空間的,不使用的模型可以將其刪除。

ollama rm llama3.1

4.4 複製模型

可以將模型複製為自訂的名稱。

ollama cp llama3.1 my-model
(my-model 是自訂的名稱)

4.5 輸入多行文字

當我們在和模型對話時,如果需要一次輸入多行內容,可以使用一對三個引號 """這裡是多行內容""" 來包圍。

>>> """這裡是
... 多行內容
... 在輸入另一對三引號前
... 內容不會被送給模型
... """

4.6 多模態 (Multimodal) 模型

Multimodal 模型是指能夠處理和結合來自不同模態(例如圖片、影片、聲音和文字)的資料,以執行任務,如分類、檢測或翻譯等。

ollama run llava "What's in this image? ~/smile.png"
The image features a yellow smiley face, which is likely the central focus of the picture.

LLaVA (Large Language and Vision Assistant) 是一個可以看懂圖片的模型。使用時要給它一張圖片,它會描述圖片的內容。

4.7 將提示作為參數傳遞

有時候我們突然想要問一下模型,但只要執行一次就好,可以在 run 的時候把提示作為參數傳給模型。

ollama run llama3.1 "為什麼天空是藍色的"
>>> 模型會直接回答,回答完就結束

或
ollama run llama3.1 "翻譯成繁體中文並摘要: $(cat README.md)"
>>> 會讀取檔案來執行,完成後就結束

4.8 顯示模型資訊

顯示模型的資訊,例如模型名稱、參數數量、上下文長度、量化版本等等。

ollama show llama3.1

4.9 列出已安裝的模型

可以知道已經下載了哪些模型。

ollama list

4.10 列出目前載入的模型

執行模型時,該模型會被載入到記憶體中,可以使用此指令看到目前載入的模型。

ollama ps

4.11 停止目前正在運行的模型

如果停止使用模型一段時間,Ollama 會自動停止模型並退出記憶體,但是也可以手動停止。

ollama stop llama3.1

4.12 REST API

Ollama 提供一個用於運行和管理模型的 REST API,讓我們透過網址來執行。

使用前要確定有執行 ollama serve 指令,讓 Ollama 伺服器在背景執行。Linux 在安裝 Ollama 時應該已經預設啟動了。你可在瀏覽器輸入網址 http://localhost:11434 如果有顯示 Ollama is running 表示伺服器已啟動。

產生回應

curl http://localhost:11434/api/generate -d '{
  "model": "llama3.1",
  "prompt":"Why is the sky blue?"
}'

與模型聊天

curl http://localhost:11434/api/chat -d '{
  "model": "llama3.1",
  "messages": [
    { "role": "user", "content": "why is the sky blue?" }
  ]
}'

generatechat 的差別在於 chat 會記得你前面和模型的對話內容 (記住多少取決於 token 的數量);而 generate 不會,每次執行都是一次全新的提示 (prompt),比較適合單次執行。

預設回傳的會是串流模式 (stream),也就是一個 token 一個 token 回傳,可能會很難閱讀,可以指定非串流模式,這樣模型會在全部處理完後才回傳結果。

curl http://localhost:11434/api/generate -d '{
  "model": "llama3.1",
  "prompt":"Why is the sky blue?"
  "stream": false
}'
本文網址:http://blog.tonycube.com/2024/11/ollama-llm-ai.html
Tony Blog 撰寫,請勿全文複製,轉載時請註明出處及連結,謝謝 😀

我要留言

留言小提醒:
1.回覆時間通常在晚上,如果太忙可能要等幾天。
2.請先瀏覽一下其他人的留言,也許有人問過同樣的問題。
3.程式碼請先將它編碼後再貼上。(線上編碼:http://bit.ly/1DL6yog)
4.文字請加上標點符號及斷行,難以閱讀者恕難回覆。
5.感謝您的留言,您的問題也可能幫助到其他有相同問題的人。