使用容器进行生成式 AI 开发
前提条件
完成容器化生成式 AI 应用。
概述
在本节中,你将学习如何设置开发环境,以便访问你的生成式 AI (GenAI) 应用所需的所有服务。这包括
- 添加本地数据库
- 添加本地或远程 LLM 服务
注意
你可以在 GenAI Stack 示例应用中看到更多容器化生成式 AI 应用的示例。
添加本地数据库
你可以使用容器设置本地服务,例如数据库。在本节中,你将更新 compose.yaml
文件来定义一个数据库服务。此外,你将指定一个环境变量文件来加载数据库连接信息,而不是每次手动输入。
运行数据库服务
在克隆的仓库目录中,将
env.example
文件重命名为.env
。此文件包含容器将使用的环境变量。在克隆的仓库目录中,使用 IDE 或文本编辑器打开
compose.yaml
文件。在
compose.yaml
文件中,添加以下内容- 添加运行 Neo4j 数据库的说明
- 在 server 服务下指定环境变量文件,以便传入连接所需的环境变量
以下是更新后的
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
访问应用。打开浏览器并访问 http://localhost:8000 查看应用。你应该看到一个简单的 Streamlit 应用。请注意,向 PDF 提问会导致应用失败,因为
.env
文件中指定的 LLM 服务尚未运行。停止应用。在终端中,按
ctrl
+c
停止应用。
添加本地或远程 LLM 服务
示例应用同时支持 Ollama 和 OpenAI。本指南提供了以下场景的说明
- 在容器中运行 Ollama
- 在容器外运行 Ollama
- 使用 OpenAI
虽然所有平台都可以使用上述任一场景,但性能和 GPU 支持可能有所不同。你可以使用以下指南来帮助你选择合适的选项
- 如果你使用的是原生安装的 Docker Engine(在 Linux 上)或 Docker Desktop(在 Windows 10/11 上),并且你拥有支持 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
文件。此服务使用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
- 在你的宿主机上安装 并运行 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 密钥。
运行你的生成式 AI 应用
至此,你的 Compose 文件中包含以下服务
- 你的主生成式 AI 应用的 Server 服务
- 将向量存储在 Neo4j 数据库中的 Database 服务
- (可选)用于运行 LLM 的 Ollama 服务
- (可选)自动为 Ollama 服务拉取模型的 Ollama-pull 服务
要运行所有服务,请在你的 docker-genai-sample
目录中运行以下命令
$ docker compose up --build
如果你的 Compose 文件包含 ollama-pull 服务,ollama-pull 服务可能需要几分钟时间来拉取模型。ollama-pull 服务将持续在控制台更新其状态。模型拉取完成后,ollama-pull 服务容器将停止,然后你就可以访问应用了。
应用运行后,打开浏览器并访问 http://localhost:8000 查看应用。
上传一个 PDF 文件,例如 Docker CLI 速查表,并提出关于该 PDF 的问题。
根据你的系统和你选择的 LLM 服务,可能需要几分钟才能得到答案。如果你正在使用 Ollama 且性能不可接受,请尝试使用 OpenAI。
总结
在本节中,你学习了如何设置开发环境,以提供对你的生成式 AI 应用所需的所有服务的访问。
相关信息
下一步
在 GenAI Stack 示例应用 中查看更多生成式 AI 应用的示例。