在選擇本地部署 LLM 框架之前,我們先來認識幾個主要的選項。每個框架都有其獨特的優勢和特點,適合不同的使用場景。
Ollama 本地部署
一、本地部署框架簡介
LM Studio
特色
- 圖形化界面:提供友善的 GUI,不需要接觸命令列
- 模型管理:內建模型下載和管理功能
- 快速啟動:開箱即用,適合入門使用者
- API 支持:提供 API 端點進行程式整合
適用場景
- 初學者想要快速體驗 LLM
- 需要 GUI 介面操作的用戶
- 簡單的對話和文本生成任務
缺點
- 功能相對簡單,客製化選項較少
- 社群支援不如其他框架活躍
- 模型選擇相對有限
GPT4All
特色
- 高度優化:專門針對 CPU 優化,在低端設備上表現良好
- 輕量級:體積小,安裝和運行消耗資源少
- 跨平台:支援 Windows、macOS、Linux
- 內建聊天介面:開箱即有對話功能
適用場景
- CPU 型設備(無 GPU)的用戶
- 資源受限的環境(筆記本、邊緣設備)
- 快速原型開發和測試
缺點
- 模型性能受限於 CPU 推理速度
- API 支援不如 Ollama 完整
- 高級功能配置較少
Text Generation Web UI
特色
- 功能豐富:提供最多的自定義選項和高級功能
- 靈活配置:支援各種量化方式和推理參數調整
- 詳細監控:提供性能監控和 Token 統計
- 擴展性強:支援多種插件和擴展功能
適用場景
- 需要精細控制推理參數的進階用戶
- 進行模型評估和性能測試
- 複雜的文本生成任務
- 研究和開發環境
缺點
- 學習曲線陡峭,配置複雜
- 系統要求相對較高
- 部署和維護需要更多技術知識
LocalAI
特色
- 模型格式支援廣:支援多種模型格式(GGUF、PyTorch 等)
- 多功能:不只支援文本,還支援圖像、音頻等
- REST API 完整:提供與 OpenAI 相容的 API
- 容器化部署:提供 Docker 支援,易於部署
適用場景
- 需要多模態功能的應用
- 使用容器化部署的環境
- 需要 OpenAI API 相容性的系統遷移
- 企業級部署
缺點
- 文件相對不完整
- 社群規模較小
- 某些功能仍在開發中
框架對比表
| 特性 | LM Studio | GPT4All | Text Gen UI | LocalAI |
|---|---|---|---|---|
| 易用性 | 5/5 | 4/5 | 2/5 | 3/5 |
| 功能完整性 | 3/5 | 3/5 | 5/5 | 4/5 |
| CPU 效率 | 3/5 | 5/5 | 3/5 | 3/5 |
| GPU 支援 | 4/5 | 2/5 | 5/5 | 4/5 |
| API 完整性 | 3/5 | 2/5 | 4/5 | 5/5 |
| 社群活躍度 | 3/5 | 4/5 | 5/5 | 3/5 |
選擇建議
我建議選擇 Ollama 的原因:
- 平衡性最佳:易用性和功能的完美結合
- 性能優秀:CPU 和 GPU 支援都很好
- API 設計清晰:便於開發者整合
- 文件完善:官方文件和社群資源豐富
- 更新活躍:持續維護和改進
- 輕量高效:啟動快、佔用資源少
- 模型支援廣:相容大多數流行模型
在本課程中,我們將重點學習如何使用 Ollama 進行本地 LLM 部署和應用開發。
二、為什麼選擇 Ollama?
Ollama 是一個專門設計用來在本地運行大型語言模型的工具。它將複雜的技術細節隱藏起來,讓使用者可以輕鬆地部署和使用各種開源模型。
Ollama 的系統架構
Ollama 採用簡潔的模組化設計。其核心包括:
(1)服務層(Server)
負責模型載入、推理引擎、內存管理和 API 服務。啟動 Ollama 時,它會自動在後台運行一個服務進程。
(2)命令列介面(CLI)
提供與服務層互動的命令列工具,例如 ollama run、ollama pull 等。
(3)REST API
為應用程式開發者提供統一的 API 介面,支援文本生成、圖片分析、嵌入等功能。
(4)模型管理
自動處理模型檔案下載、快取管理、版本控制等。
這個簡潔的架構使得 Ollama 相比其他框架更易於部署和維護。
透過 Modelfile 自定義模型
Modelfile 是一個用來定義和自定義 LLM 模型的配置文件,類似於 Docker 的 Dockerfile。透過 Modelfile,用戶可以:
- 指定基礎模型:選擇一個已有的模型作為起點。
- 設定系統提示詞:定義模型的行為和性格。
- 調整超參數:控制溫度、Top-P、重複懲罰等生成參數。
- 添加自訂參數:根據特定場景調整模型表現。
例如,可以創建一個專門用於程式碼生成的版本,或者針對特定領域(如法律、醫療)優化的版本。
擁有 REST API 的強大整合能力
Ollama 提供標準的 REST API,使其可以輕鬆與任何應用程式整合:
- 標準化介面:API 設計遵循行業標準,類似於 OpenAI API 的結構。
- 多語言支援:支援 Python、JavaScript、Go、Java 等主流編程語言。
- 完整功能:支援單回合對話、多輪對話、流式傳輸、嵌入等。
- 跨應用整合:可用於網頁應用、桌面應用、行動應用等。
三、從零開始安裝 Ollama
安裝 Ollama 是使用本工具的第一步。幸運的是,安裝過程非常簡單。
安裝 Ollama
- 訪問官方網站:前往官方網站下載適合您作業系統的安裝程式。
- 可用版本:支援 Windows、macOS(包括 M1/M2/M3 晶片)、Linux。
- 執行安裝程式:按照提示完成安裝過程。在大多數情況下,只需要點擊「下一步」即可。
- 驗證安裝:安裝完成後,打開命令列並輸入
ollama --version,應該會看到版本號。 - 自動啟動:在 Windows 和 macOS 上,Ollama 會在安裝後自動作為服務啟動。
關閉 Ollama
- Windows:在工作列系統匣中找到 Ollama 圖示,右鍵選擇「退出」。或透過服務管理員停止服務。
- macOS:在選單列中點擊 Ollama 圖示,選擇「Quit Ollama」。
- Linux:使用命令
systemctl stop ollama停止服務(如果已安裝為服務)。 - 驗證停止:檢查命令列是否回應任何 Ollama 命令。
更新 Ollama
- 檢查新版本:訪問官方網站或使用
ollama --version查看當前版本。 - 自動更新:某些版本的 Ollama 會自動檢查更新。
- 手動更新:下載最新的安裝程式,再次執行安裝會自動覆蓋舊版本。
- 更新不會影響已下載的模型:您之前下載的所有模型將保持不變。
四、Ollama 的對話介面
安裝 Ollama 後,您可以立即開始與 AI 模型進行對話。
下載第一個模型並開始交談
- 選擇模型:Ollama 官方模型庫中有許多選擇。對於初學者,推薦從較小的模型開始,例如 Mistral 或 Neural Chat。
- 下載模型:在命令列中輸入
ollama pull mistral,Ollama 會自動下載模型。首次下載可能需要幾分鐘到幾十分鐘,取決於網速和模型大小。 - 啟動對話:下載完成後,輸入
ollama run mistral開啟互動式對話。 - 與模型對話:在命令列提示符下輸入任何問題或指令,模型會生成回應。
- 退出對話:輸入
/exit或 Ctrl+C 退出對話介面。 - 後台運行:Ollama 會在後台持續運行服務。您可以關閉對話而服務仍在運行。
介面說明
以上命令列介面包含以下主要元素:
模型選擇與顯示
顯示當前正在運行的模型名稱(例如 mistral)。
使用者輸入區域
命令列提示符(通常為 >),供使用者輸入問題或指令。
模型回應區域
模型生成的回應內容會在此展示,包括完整的文本輸出。
動態資訊顯示
底部狀態欄顯示模型推理時的進度、Token 計數、處理速度(例如 tokens/s)等即時資訊。
下載模型
上圖展示了使用 ollama pull 命令下載模型時的進度畫面:
- 下載進度視覺化:進度條或百分比顯示表示模型檔案的下載進度。大多數模型下載涉及多個檔案部分。
- 檔案分層下載:Ollama 會逐層下載模型的各個部分(layer by layer),每個部分的進度會單獨顯示。例如,一個 7B 模型可能分為多個 GB 大小的檔案。
- 下載統計資訊:顯示已下載的資料量、總資料量、下載速度(MB/s)、預計剩餘時間等資訊。
- 模型驗證:下載完成後,系統會驗證檔案完整性和正確性,確保模型可以正確載入。
- 下載管理:如果下載被中斷,重新執行
ollama pull命令時會從中斷位置繼續下載,而非重新開始。
模型列表
上圖展示了執行 ollama list 命令後,系統列出的所有已下載模型的清單:
- 模型名稱與標籤:每一行展示一個模型的完整名稱,包括模型版本標籤(例如 mistral:latest、neural-chat:latest)。
- 模型 ID:每個模型都有一個唯一的 ID(通常是哈希值),用於內部識別和版本管理。
- 模型大小:顯示每個模型佔用的磁盤空間,通常以 GB 為單位。這幫助使用者了解儲存需求。
- 最後修改時間:記錄每個模型的最後更新或使用時間,便於追蹤模型的使用狀況。
- 多版本管理:同一個模型名稱可能有多個版本,例如 mistral:7b、mistral:13b 等,使用者可以根據需要下載不同的版本。
- 即時狀態:列表會即時更新,反映當前系統中所有可用的本地模型。
您可以使用任何列出的模型名稱搭配 ollama run 命令來啟動對話,例如 ollama run mistral 或 ollama run neural-chat。