使用容器進行生成式 AI 開發

先決條件

完成容器化生成式 AI 應用程式

概述

在本節中,您將學習如何設定開發環境以訪問生成式 AI (GenAI) 應用程式所需的所有服務。這包括:

  • 新增本地資料庫
  • 新增本地或遠端 LLM 服務
注意

您可以在 GenAI Stack 演示應用程式中檢視更多容器化 GenAI 應用程式的示例。

新增本地資料庫

您可以使用容器來設定本地服務,例如資料庫。在本節中,您將更新 `compose.yaml` 檔案以定義一個數據庫服務。此外,您將指定一個環境變數檔案來載入資料庫連線資訊,而不是每次都手動輸入資訊。

要執行資料庫服務

  1. 在克隆的倉庫目錄中,將 `env.example` 檔案重新命名為 `.env`。此檔案包含容器將使用的環境變數。

  2. 在克隆的倉庫目錄中,使用 IDE 或文字編輯器開啟 `compose.yaml` 檔案。

  3. 在 `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 映象

  4. 執行應用程式。在 `docker-genai-sample` 目錄中,在終端中執行以下命令。

    $ docker compose up --build
    
  5. 訪問應用程式。開啟瀏覽器並在 https://:8000 檢視應用程式。您應該會看到一個簡單的 Streamlit 應用程式。請注意,向 PDF 提問會導致應用程式失敗,因為 `.env` 檔案中指定的 LLM 服務尚未執行。

  6. 停止應用程式。在終端中,按 `ctrl`+`c` 停止應用程式。

新增本地或遠端 LLM 服務

示例應用程式同時支援 OllamaOpenAI。本指南提供了以下場景的說明:

  • 在容器中執行 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 訪問

  1. 安裝先決條件。

  2. 在 `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 訪問

  3. 將 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

  1. 在您的主機上安裝並執行 Ollama。
  2. 將 `.env` 檔案中的 `OLLAMA_BASE_URL` 值更新為 `http://host.docker.internal:11434`。
  3. 使用以下命令將模型拉取到 Ollama。
    $ ollama pull llama2
    
重要

使用 OpenAI 需要一個 OpenAI 賬戶。OpenAI 是第三方託管服務,可能會收取費用。

  1. 將 `.env` 檔案中的 `LLM` 值更新為 `gpt-3.5`。
  2. 取消註釋並更新 `.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 應用程式的示例。