使用容器進行生成式 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 映像檔

  • 存取應用程式。開啟瀏覽器並在 http://localhost:8000檢視應用程式。您應該會看到一個簡單的 Streamlit 應用程式。請注意,向 PDF 提出問題將導致應用程式失敗,因為 `.env` 檔案中指定的 LLM 服務尚未執行。

  • 停止應用程式。在終端機中,按 `ctrl`+`c` 以停止應用程式。

  • 新增本地或遠端 LLM 服務

    此範例應用程式支援 OllamaOpenAI。本指南提供以下情境的說明:

    雖然所有平台都可以使用上述任何一種情境,但效能和 GPU 支援可能有所不同。您可以參考以下準則來選擇合適的選項:

    請為您的 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

    若要在容器外執行 Ollama:

    1. 安裝
      $ ollama pull llama2
      

    重要

    使用 OpenAI 需要 OpenAI 帳戶OpenAI API 金鑰


    執行您的 GenAI 應用程式

    此時,您的 Compose 檔案中包含以下服務:

    若要執行所有服務,請在您的 docker-genai-sample 目錄中執行以下指令:

    $ docker compose up --build
    

    如果您的 Compose 檔案中有 ollama-pull 服務,ollama-pull 服務可能需要幾分鐘的時間來提取模型。ollama-pull 服務會持續在主控台中更新其狀態。提取模型後,ollama-pull 服務容器將會停止,您就可以存取應用程式了。

    應用程式執行後,開啟瀏覽器並在 http://localhost:8000 存取應用程式。

    上傳一個 PDF 檔案,例如 Docker CLI Cheat Sheet,並提問關於 PDF 的問題。

    根據您的系統和選擇的 LLM 服務,回答可能需要幾分鐘時間。如果您使用的是 Ollama 且效能不佳,請嘗試使用 OpenAI。

    摘要

    在本節中,您學習了如何設定開發環境,以提供您的 GenAI 應用程式所需的所有服務。

    相關資訊