# 部署 Dify + Ollama:本地運行大型語言模型的詳細教程 (Docker & GPU 加速) ## 🚀 前言 如果想在自己的電腦上運行像 Llama 3、Qwen 這樣強大的大型語言模型 (LLM),並透過一個精美的 UI 來進行互動和開發應用嗎?本教學將帶你一步步使用 Docker 部署 [Dify](https://dify.ai/) 和 [Ollama](https://ollama.com/),實現一個完全在本地端、可選擇 GPU 加速的 LLM 工作流程。 - **Ollama**: 一個能讓你在本地輕鬆運行 Llama 3, Mistral, Gemma 等開源大型語言模型的工具。 - **Dify**: 一個開源的 LLM 應用程式開發平台,提供視覺化的 Prompt 工程、RAG(檢索增強生成)以及應用編排能力。 - **Docker**: 一個容器化平台,能讓我們用標準化、隔離的環境快速部署應用,告別繁瑣的環境配置。 透過這套組合,你不僅能確保數據的私密性,還能免費、無限制地使用 LLM 進行實驗和開發。 --- ## 📋 先備條件 在開始之前,請確保你的系統滿足以下要求: 1. **💻 硬體資源**: - **RAM**: 建議至少 16GB。運行 8B(80億參數)模型通常需要 8GB+ 的 RAM,更大的模型需要更多。 - **儲存空間**: 建議至少 50GB 的可用 SSD 空間,因為模型檔案通常很大。 - **GPU (可選但強烈推薦)**: 擁有 NVIDIA 顯卡可大幅提升模型推理速度。如果計畫使用 GPU,請確保已安裝對應的驅動程式。 2. **🔧 軟體環境**: - **Docker**: [安裝 Docker Desktop](https://www.docker.com/products/docker-desktop/) (適用於 Windows/Mac) 或 Docker Engine (適用於 Linux)。 - **Docker Compose**: Docker Desktop 已內建,Linux 用戶需單獨安裝。 - **Git**: 用於下載 Dify 的部署文件。 - **基本的終端機/命令提示字元操作能力**。 - **(GPU 用戶)**: [NVIDIA Container Toolkit](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html),讓 Docker 可以使用 GPU。 --- ## ⭐ GPU 用戶特別步驟:安裝 NVIDIA Container Toolkit 如果你擁有 NVIDIA 顯示卡並希望 Ollama 在 Docker 中利用 GPU 進行加速,**必須**先安裝 NVIDIA Container Toolkit。這個工具可以讓 Docker 容器安全地存取主機的 GPU 資源。 > **注意**:以下教學基於 Debian/Ubuntu 系統。其他 Linux 發行版請參考 [NVIDIA 官方文件](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html)。 ### 步驟 1:設定官方軟體庫 首先,我們需要將 NVIDIA 的軟體庫加入到系統的 `apt` 源中。 1. **加入 GPG 金鑰**: ```bash curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg ``` 2. **加入軟體庫源**: ```bash curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \ sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \ sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list ``` ### 步驟 2:安裝 Toolkit 1. **更新軟體包列表**: ```bash sudo apt-get update ``` 2. **安裝 NVIDIA Container Toolkit**: ```bash sudo apt-get install -y nvidia-container-toolkit ``` ### 步驟 3:設定 Docker 使用 NVIDIA Runtime 安裝完畢後,需要執行一個命令來設定 Docker,讓它知道有 NVIDIA Runtime 可用。 ```bash sudo nvidia-ctk runtime configure --runtime=docker ``` ### 步驟 4:重啟 Docker 服務 為了讓設定生效,必須重啟 Docker。 ```bash sudo systemctl restart docker ``` ### 步驟 5:驗證安裝 (強烈建議) 執行一個簡單的 CUDA 容器來驗證 Docker 是否能成功調用 GPU。 ```bash docker run --rm --gpus all nvidia/cuda:12.0.0-base-ubuntu22.04 nvidia-smi ``` 如果安裝成功,你應該會看到與在主機上直接執行 `nvidia-smi` 類似的輸出,顯示你的 GPU 型號、驅動版本和 CUDA 版本。看到這個畫面,代表你的 Docker 已經準備好進行 GPU 加速了! --- ## 步驟一:部署 Ollama (二選一) 你可以選擇將 Ollama 作為 Docker 容器運行,或直接安裝在你的主機上。**對於大多數用戶,推薦使用 Docker 方法。** ### 方案 A:🐳 在 Docker 中部署 Ollama (推薦) 這是最簡單、最乾淨的方法,因為所有東西都在容器中。 1. **啟動 Ollama 容器** 打開你的終端機,根據您是否有 GPU 選擇以下一個命令執行: - **GPU 用戶 (推薦)**: > 前提是您已安裝 NVIDIA 驅動和 NVIDIA Container Toolkit。 ```bash docker run -d --gpus=all -v ollama:/root/.ollama -p 11434:11434 --name ollama --rm ollama/ollama ``` - **僅 CPU 用戶**: ```bash docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama --rm ollama/ollama ``` **命令解釋**: - `--gpus=all`: (GPU用戶) 讓容器可以使用主機上所有的 GPU 資源。 - `-v ollama:/root/.ollama`: 創建一個 Docker volume 來持久化儲存您下載的模型,即使容器被刪除,模型檔案也會保留。 - `--rm`: 容器停止時自動刪除,方便管理(volume 中的模型不受影響)。 - 其他參數見上一版教學。 2. **下載一個模型** 使用 `docker exec` 進入運行的容器並下載模型。以 `qwen:4b` (通義千問 40億參數模型) 為例: ```bash docker exec -it ollama ollama pull qwen:4b ``` 你可以替換成其他模型,如 `llama3` 或 `mistral`。下載完成後,Ollama 就緒! ### 方案 B:🖥️ 在主機上直接安裝 Ollama (替代方案) 如果你不想在 Docker 中運行 Ollama,可以將其直接安裝在 Linux 主機上。 1. **安裝 Ollama** ```bash curl -fsSL https://ollama.com/install.sh | sh ``` 2. **配置網絡訪問** 為了讓 Docker 中的 Dify 能夠連接到主機上的 Ollama,你需要修改 Ollama 的服務配置,使其監聽所有網絡接口。 - 編輯服務文件: ```bash sudo systemctl edit ollama.service ``` - 在打開的編輯器中,添加以下內容並儲存: ```ini [Service] Environment="OLLAMA_HOST=0.0.0.0" ``` - 重載配置並重啟 Ollama 服務: ```bash sudo systemctl daemon-reload sudo systemctl restart ollama ``` 3. **下載一個模型** ```bash ollama pull qwen:4b ``` --- ## 步驟二:🚀 使用 Docker Compose 部署 Dify 此步驟與 Ollama 的部署方式無關。 1. **下載 Dify 的部署文件** ```bash git clone https://github.com/langgenius/dify.git cd dify/docker ``` 2. **創建環境變數文件** 複製範例環境檔,這是官方推薦的做法。 ```bash cp .env.example .env ``` 3. **啟動 Dify 服務** 在 `dify/docker` 目錄下,執行以下命令: ```bash docker-compose up -d ``` 第一次啟動會需要一些時間來下載映像。 4. **初始化 Dify** - 在您的瀏覽器中開啟 `http://localhost/install`。 - 根據頁面提示,設定你的管理員帳號和密碼。 - 完成後,登入 Dify。 --- ## 步驟三:🔗 將 Ollama 整合至 Dify 告訴 Dify 如何找到我們部署好的 Ollama 服務。 1. **找到你電腦的內網 IP 位址** 由於 Dify (在 Docker 中) 和 Ollama (可能在 Docker 中或在主機上) 是隔離的,Dify **不能** 使用 `localhost` 來找到 Ollama。我們需要使用您電腦在區域網路中的 IP 位址。 - **Windows**: `ipconfig` - **macOS/Linux**: `ifconfig` 或 `ip addr` > **⚠️ 注意**: 請勿使用 `127.0.0.1` 或 `localhost`。假設您的 IP 是 `192.168.1.100`。 2. **在 Dify 中配置模型提供商** - 登入 Dify 後,點擊右上角的頭像 -> **設定** -> **模型供應商**。 - 點擊 **Ollama**。 - **伺服器 URL**: 填寫 `http://<您的內網IP>:11434`。例如:`http://192.168.1.100:11434`。 - **模型**: 點擊「從伺服器 URL 載入」來自動抓取可用的模型列表,然後選擇您要使用的模型(如 `qwen:4b`)。 - 點擊 **儲存**。 --- ## 步驟四:🎉 建立你的第一個本地 LLM 應用 整合完成後,讓我們來建立一個簡單的聊天應用來測試成果! 1. **建構應用** -> 選擇 **對話型應用** -> 命名。 2. 在 **模型與參數** 中,選擇你剛剛配置的 **Ollama** 模型。 3. 點擊 **預覽** 並開始對話! 恭喜!你已成功搭建了一個完全在本地運行的 LLM 應用開發環境! --- ## 💡 配置與效能建議 當你成功部署完畢後,可以透過以下建議來優化你的使用體驗和系統效能。 ### 一、通用配置建議 1. **增加 Docker 資源配置 (Mac/Windows)** 如果你使用 Docker Desktop,預設分配給 Docker 的 CPU、記憶體和磁碟空間可能不足以流暢運行大型模型。 - **路徑**: Docker Desktop -> Settings (設定) -> Resources (資源)。 - **建議**: 至少分配 8GB RAM,並根據你要運行的模型大小酌情增加。CPU 核心數也建議調高。 2. **堅持使用 Docker Volume** 本教學中的 `docker run` 命令已包含 `-v ollama:/root/.ollama`。這一步至關重要,因為: - **模型持久化**: 你下載的模型會被儲存在名為 `ollama` 的 Docker Volume 中,即使你刪除並重建 Ollama 容器,模型依然存在,無需重新下載。 - **方便管理**: 你可以輕鬆地備份、遷移或清理這些模型資料。 3. **(進階) 建立專用 Docker 網路** 雖然使用主機 IP 位址很方便,但在某些複雜的網路環境下可能會不穩定。一個更穩健的方法是讓 Dify 和 Ollama 加入同一個自訂的 Docker 網路中,這樣它們就可以透過容器名稱直接通訊。 - **1. 建立網路**: ```bash docker network create dify-net ``` - **2. 啟動 Ollama 時加入網路**: ```bash # 在原有的 docker run 命令中加入 --network=dify-net docker run -d --gpus=all --network=dify-net -v ollama:/root/.ollama -p 11434:11434 --name ollama --rm ollama/ollama ``` - **3. 修改 Dify 的 docker-compose.yml**: 在 `dify/docker/docker-compose.yml` 的末尾添加網路設定,並讓所有服務加入此網路。 ```yaml # ... (檔案原有內容) ... # 在檔案最底部添加 networks: default: name: dify-net external: true ``` - **4. 在 Dify 中設定 Ollama**: 完成上述步驟並重啟所有容器後,你在 Dify 的模型供應商 URL 中就可以直接使用 `http://ollama:11434`! ### 二、模型相關建議 1. **如何選擇模型?** - **大小 vs. 效能**: - **小型模型 (< 7B)**: 如 `gemma:2b`, `qwen:4b`。速度快、記憶體佔用少,適合快速測試、簡單任務或資源有限的設備。 - **中型模型 (7B ~ 13B)**: 如 `llama3:8b`, `mistral:7b`。在效能和資源消耗之間取得了很好的平衡,是目前的主流選擇。 - **大型模型 (> 30B)**: 如 `llama3:70b`。能力極強,但對硬體要求非常高(通常需要多張高階 GPU),推理速度較慢。 - **量化 (Quantization)**: 你看到的模型標籤(如 `llama3`)通常是經過量化的版本(例如 4-bit)。量化是一種壓縮技術,它能大幅減少模型大小和記憶體佔用,同時對精度的影響很小。對於大多數本地部署場景,使用預設的量化版本即可。 2. **管理多個模型** Ollama 會在模型第一次被調用時將其載入到 RAM/VRAM 中。同時運行多個模型會消耗大量記憶體。 - **查看已載入模型**: 在終端機執行 `ollama list`,可以看到哪些模型正在運行。 - **釋放資源**: 如果你想切換模型並釋放記憶體,可以先停止 Ollama 服務/容器,然後再重新啟動。 3. **設定 Dify 中的上下文 (Context)** 在 Dify 的應用程式 -> "提示詞編排" -> "模型與參數" 中,你可以設定模型的上下文長度。 - **意義**: 上下文長度決定了模型能「記住」多少對話歷史。 - **建議**: 較長的上下文能讓對話更連貫,但也會在每次請求時消耗更多運算資源。建議從預設值開始,根據應用需求調整。 4. **(進階) 自訂 Ollama Modelfile** 對於進階用戶,你可以建立一個名為 `Modelfile` 的文件來創建模型的自訂版本。這允許您永久修改模型的系統提示 (System Prompt)、溫度 (Temperature) 等參數。 - **範例 `MyLlama3`**: ``` FROM llama3 # 設定預設的系統提示 SYSTEM """ You are a helpful and friendly assistant. Always answer in Traditional Chinese. """ # 設定預設的溫度 (0-1, 越高越有創意) PARAMETER temperature 0.7 ``` - **創建自訂模型**: ```bash ollama create MyLlama3 -f ./Modelfile ``` 之後,你就可以在 Dify 中像使用官方模型一樣使用 `MyLlama3` 了。 --- ## 🔧 管理與問題排查 - **Ollama 服務管理 (僅限本地安裝)** ```bash # 停止服務 sudo systemctl stop ollama # 啟動服務 sudo systemctl start ollama # 強制結束所有 Ollama 進程 pkill ollama ``` - **連線失敗?** - 再三確認你在 Dify 中填寫的 IP 位址正確。 - 檢查你的電腦防火牆或安全軟體是否阻擋了 11434 連接埠。 - 在終端機使用 `ss -tuln | grep 11434` (Linux/Mac) 或 `netstat -an | findstr 11434` (Windows) 檢查 Ollama 是否正在監聽。 - **如何查看日誌?** ```bash # 查看 Dify API 服務日誌 docker logs dify-api-1 # 查看 Ollama 容器日誌 docker logs ollama ``` - **如何停止所有服務?** ```bash # 停止並刪除 Dify 容器 cd dify/docker # 確保在正確的目錄 docker-compose down # 停止並刪除 Ollama 容器 (如果使用 Docker 部署) docker stop ollama ``` 現在,你可以開始探索 Dify 強大的功能,例如上傳知識庫進行 RAG、設計複雜的 Prompt 工作流等,而所有的運算都在您的掌控之中。享受您的本地 LLM 之旅吧!