使用容器進行生成式 AI 開發
先決條件
概述
在本節中,您將學習如何設定開發環境以訪問生成式 AI (GenAI) 應用程式所需的所有服務。這包括:
- 新增本地資料庫
- 新增本地或遠端 LLM 服務
注意您可以在 GenAI Stack 演示應用程式中檢視更多容器化 GenAI 應用程式的示例。
新增本地資料庫
您可以使用容器來設定本地服務,例如資料庫。在本節中,您將更新 `compose.yaml` 檔案以定義一個數據庫服務。此外,您將指定一個環境變數檔案來載入資料庫連線資訊,而不是每次都手動輸入資訊。
要執行資料庫服務
在克隆的倉庫目錄中,將 `env.example` 檔案重新命名為 `.env`。此檔案包含容器將使用的環境變數。
在克隆的倉庫目錄中,使用 IDE 或文字編輯器開啟 `compose.yaml` 檔案。
在 `compose.yaml` 檔案中,新增以下內容:
- 新增執行 Neo4j 資料庫的指令
- 在伺服器服務下指定環境檔案,以便傳入連線的環境變數
以下是更新後的 `compose.yaml` 檔案。所有註釋已刪除。
services: server: build: context: . ports: - 8000:8000 env_file: - .env depends_on: database: condition: service_healthy database: image: neo4j:5.11 ports: - "7474:7474" - "7687:7687" environment: - NEO4J_AUTH=${NEO4J_USERNAME}/${NEO4J_PASSWORD} healthcheck: test: ["CMD-SHELL", "wget --no-verbose --tries=1 --spider localhost:7474 || exit 1"] interval: 5s timeout: 3s retries: 5
注意要了解有關 Neo4j 的更多資訊,請參閱 Neo4j 官方 Docker 映象。
執行應用程式。在 `docker-genai-sample` 目錄中,在終端中執行以下命令。
$ docker compose up --build
訪問應用程式。開啟瀏覽器並在 https://:8000 檢視應用程式。您應該會看到一個簡單的 Streamlit 應用程式。請注意,向 PDF 提問會導致應用程式失敗,因為 `.env` 檔案中指定的 LLM 服務尚未執行。
停止應用程式。在終端中,按 `ctrl`+`c` 停止應用程式。
新增本地或遠端 LLM 服務
示例應用程式同時支援 Ollama 和 OpenAI。本指南提供了以下場景的說明:
- 在容器中執行 Ollama
- 在容器外部執行 Ollama
- 使用 OpenAI
雖然所有平臺都可以使用上述任何一種場景,但效能和 GPU 支援可能會有所不同。您可以使用以下準則來幫助選擇合適的選項:
- 如果您使用 Linux 且安裝了原生 Docker Engine,或者 Windows 10/11 且使用 Docker Desktop,並且您有 CUDA 支援的 GPU,並且您的系統至少有 8 GB 記憶體,則可在容器中執行 Ollama。
- 如果您使用 Apple 晶片 Mac,則在容器外部執行 Ollama。
- 如果上述兩種情況都不適用於您,請使用 OpenAI。
為您的 LLM 服務選擇以下選項之一。
在容器中執行 Ollama 時,您應該擁有一個支援 CUDA 的 GPU。雖然您可以在沒有受支援 GPU 的情況下在容器中執行 Ollama,但效能可能無法接受。只有 Linux 和 Windows 11 支援容器訪問 GPU。
要在容器中執行 Ollama 並提供 GPU 訪問
安裝先決條件。
- 對於 Linux 上的 Docker Engine,請安裝 NVIDIA Container Toolkit。
- 對於 Windows 10/11 上的 Docker Desktop,請安裝最新的 NVIDIA 驅動程式,並確保您正在使用 WSL2 後端
在 `compose.yaml` 中新增 Ollama 服務和卷。以下是更新後的 `compose.yaml`:
services: server: build: context: . ports: - 8000:8000 env_file: - .env depends_on: database: condition: service_healthy database: image: neo4j:5.11 ports: - "7474:7474" - "7687:7687" environment: - NEO4J_AUTH=${NEO4J_USERNAME}/${NEO4J_PASSWORD} healthcheck: test: [ "CMD-SHELL", "wget --no-verbose --tries=1 --spider localhost:7474 || exit 1", ] interval: 5s timeout: 3s retries: 5 ollama: image: ollama/ollama:latest ports: - "11434:11434" volumes: - ollama_volume:/root/.ollama deploy: resources: reservations: devices: - driver: nvidia count: all capabilities: [gpu] volumes: ollama_volume:
注意有關 Compose 指令的更多詳細資訊,請參閱使用 Docker Compose 啟用 GPU 訪問。
將 ollama-pull 服務新增到您的 `compose.yaml` 檔案中。此服務使用基於 GenAI Stack 的 pull_model.Dockerfile 的 `docker/genai:ollama-pull` 映象。該服務將自動為您的 Ollama 容器拉取模型。以下是 `compose.yaml` 檔案中更新的部分:
services: server: build: context: . ports: - 8000:8000 env_file: - .env depends_on: database: condition: service_healthy ollama-pull: condition: service_completed_successfully ollama-pull: image: docker/genai:ollama-pull env_file: - .env # ...
要在容器外部執行 Ollama
- 在您的主機上安裝並執行 Ollama。
- 將 `.env` 檔案中的 `OLLAMA_BASE_URL` 值更新為 `http://host.docker.internal:11434`。
- 使用以下命令將模型拉取到 Ollama。
$ ollama pull llama2
重要使用 OpenAI 需要一個 OpenAI 賬戶。OpenAI 是第三方託管服務,可能會收取費用。
- 將 `.env` 檔案中的 `LLM` 值更新為 `gpt-3.5`。
- 取消註釋並更新 `.env` 檔案中的 `OPENAI_API_KEY` 值為您的 OpenAI API 金鑰。
執行您的 GenAI 應用程式
此時,您的 Compose 檔案中包含以下服務:
- 用於主 GenAI 應用程式的伺服器服務
- 將向量儲存在 Neo4j 資料庫中的資料庫服務
- (可選)用於執行 LLM 的 Ollama 服務
- (可選)ollama-pull 服務,用於自動為 Ollama 服務拉取模型
要執行所有服務,請在 `docker-genai-sample` 目錄中執行以下命令:
$ docker compose up --build
如果您的 Compose 檔案包含 ollama-pull 服務,ollama-pull 服務可能需要幾分鐘才能拉取模型。ollama-pull 服務將持續更新控制檯中的狀態。拉取模型後,ollama-pull 服務容器將停止,您可以訪問應用程式。
應用程式執行後,開啟瀏覽器並訪問 https://:8000。
上傳一個 PDF 檔案,例如 Docker CLI Cheat Sheet,然後向 PDF 提問。
根據您的系統和您選擇的 LLM 服務,可能需要幾分鐘才能回答。如果您正在使用 Ollama 並且效能不可接受,請嘗試使用 OpenAI。
摘要
在本節中,您學習瞭如何設定開發環境以提供 GenAI 應用程式所需的所有服務。
相關資訊
後續步驟
請參閱 GenAI Stack 演示應用程式 中更多 GenAI 應用程式的示例。