使用容器进行生成式 AI 开发

先决条件

完成 对生成式 AI 应用程序的容器化

概述

在本部分中,您将了解如何设置开发环境来访问生成式 AI (GenAI) 应用程序所需的所有服务。这包括:

  • 添加本地数据库
  • 添加本地或远程 LLM 服务

笔记

您可以在GenAI Stack演示应用程序中查看更多容器化 GenAI 应用程序示例 。

添加本地数据库

您可以使用容器来设置本地服务,例如数据库。在本部分中,您将更新compose.yaml文件以定义数据库服务。此外,您将指定一个环境变量文件来加载数据库连接信息,而不是每次都手动输入信息。

运行数据库服务:

  1. 在克隆存储库的目录中,将env.example文件重命名为.env.该文件包含容器将使用的环境变量。

  2. 在克隆存储库的目录中,compose.yaml在 IDE 或文本编辑器中打开文件。

  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. 访问应用程序。打开浏览器并在http://localhost:8000查看应用程序 。您应该看到一个简单的 Streamlit 应用程序。请注意,向 PDF 提问将导致应用程序失败,因为.env文件中指定的 LLM 服务尚未运行。

  6. 停止应用程序。在终端中,按ctrl+c停止应用程序。

添加本地或远程 LLM 服务

示例应用程序支持 OllamaOpenAI。本指南提供了以下场景的说明:

  • 在容器中运行 Ollama
  • 在容器外部运行 Ollama
  • 使用开放人工智能

虽然所有平台都可以使用上述任何场景,但性能和 GPU 支持可能会有所不同。您可以使用以下指南来帮助您选择合适的选项:

  • 如果您使用的是 Linux,并且使用 Docker 引擎的本机安装,或者使用 Windows 10/11,并且使用 Docker Desktop,则在容器中运行 Ollama,您拥有支持 CUDA 的 GPU,并且您的系统至少有 8 GB内存。
  • 如果您使用的是 Apple Silicon Mac,请在容器外部运行 Ollama。
  • 如果前两种情况不适合您,请使用 OpenAI。

为您的 LLM 服务选择以下选项之一。


在容器中运行 Ollama 时,您应该拥有支持 CUDA 的 GPU。虽然您可以在没有受支持的 GPU 的容器中运行 Ollama,但性能可能无法接受。仅 Linux 和 Windows 11 支持 GPU 访问容器。

要在容器中运行 Ollama 并提供 GPU 访问:

  1. 安装先决条件。

  2. 在您的compose.yaml.以下为更新内容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文件中。该服务使用docker/genai:ollama-pull基于 GenAI Stack 的 pull_model.Dockerfile的映像。该服务将自动拉取 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. OLLAMA_BASE_URL将文件中的值更新.envhttp://host.docker.internal:11434.
  3. 使用以下命令将模型拉至 Ollama。
    $ ollama pull llama2
    

重要的

使用OpenAI需要一个 OpenAI帐户。 OpenAI 是第三方托管服务,可能会收费。

  1. LLM将文件中的值更新.envgpt-3.5.
  2. 取消注释并将文件OPENAI_API_KEY中的值更新.envOpenAI API 密钥

运行您的 GenAI 应用程序

此时,您的 Compose 文件中有以下服务:

  • 主要 GenAI 应用程序的服务器服务
  • 用于将向量存储在 Neo4j 数据库中的数据库服务
  • (可选)运行 LLM 的 Ollama 服务
  • (可选)Ollama 拉取服务,自动拉取 Ollama 服务的模型

要运行所有服务,请在您的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 应用程序所需的所有服务的访问。

相关信息:

下一步

在GenAI Stack 演示应用程序中查看更多 GenAI 应用程序的示例 。