Docker - 生成式 AI



Docker 是容器化生成式 AI模型的最佳平台,因为它具有强大的、高效的、轻量级的组件,并拥有强大的社区支持和资源处理能力。任何生成式 AI 模型的容器化都涉及将模型与其依赖项和所需的运行时环境打包到一个自包含的 Docker 镜像中。

创建的镜像随后可以部署到各种环境中运行,从开发到生产环境都保持一致。通过在容器中部署 genAI 模型,您可以保证可重复性、可移植性和高效的资源利用率。

使用 Docker 构建生成式 AI 模型的优势

下表重点介绍了使用 Docker 构建生成式 AI 模型的主要优势:

优势 描述
隔离 封装模型及其依赖项,防止冲突。
可移植性 在不同的环境中一致地运行模型。
可重复性 确保在不同的设置中模型行为一致。
效率 通过共享底层操作系统来优化资源利用率。
可扩展性 轻松扩展模型部署以满足需求。
版本控制 有效地管理不同的模型版本。
协作 与团队成员共享模型和环境。
部署灵活性 将模型部署到各种平台(云、本地)。
安全性 隔离模型并保护敏感数据。
成本效益 优化硬件资源并降低成本。

构建生成式 AI 的 Docker 镜像

为了提高效率和兼容性,请选择合适的底层镜像。在本例中,我们将使用 Ollama 模型,这是一个大型语言模型。要下载 Ollama,请访问Ollama 官方网站 并点击下载按钮。

选择基础镜像

Ollama 提供预构建的 Docker 镜像,简化了设置过程。我们将使用官方的 Ollama Docker 镜像作为基础镜像:

FROM ollama/ollama:latest

安装依赖项

Ollama 会自动在其镜像中安装必要的依赖项。但是,如果您需要安装更多库,可以使用 RUN 指令安装它们。

# Example: Install additional libraries

RUN pip install numpy pandas

合并模型权重

Ollama 支持各种预训练模型。您可以使用 ollama run 命令在运行时指定所需的模型。因此,无需手动指定模型权重,因为它们由 Ollama 框架管理。

示例

ollama run llama3

这是最终的 Dockerfile:

# Use the official Ollama Docker image as the base
FROM ollama/ollama:latest

# Set the working directory (optional)
WORKDIR /app

# Install additional dependencies if required (optional)
# RUN pip install numpy pandas

# Expose the Ollama port (optional)
EXPOSE 11434

构建模型镜像

接下来,让我们使用 Docker build 命令来构建镜像。

$ docker build -t ollama:latest .
Build the Model Image

优化镜像大小

由于我们在这里使用的是官方的 Ollama 镜像,因此优化可能存在限制。但是,您可以考虑:

  • 特定的 Ollama 镜像标签 - 如果可用,请使用仅包含所需组件的标签。
  • 基础镜像最小化 - 根据需要创建包含较少包的基础镜像。
  • 根据需要利用多阶段构建 - 特别是在您拥有复杂构建流程的情况下。

注意 - 通常情况下,模型优化由 Ollama 内部处理,因此与其他框架相比,无需进行太多手动优化。

使用 Ollama Docker 镜像可以轻松地将您的生成式 AI 模型打包到容器中。

使用 Docker 部署生成式 AI 模型

容器化模型

我们在上一节中已经构建了 Docker 镜像。现在,让我们容器化模型并将 Docker 镜像作为容器运行。

$ docker run -it --name my-ollama-container ollama:latest
Containerizing the Model 1

Containerizing the Model 2

上述命令将交互式地运行 Ollama 容器(-it 标志)并将其命名为my-ollama-container

在本地运行容器

您可以使用以下命令在容器内启动 Ollama 服务器。

$ docker exec -it my-ollama-container ollama serve

这将在正在运行的容器内运行ollama serve命令。

访问模型并显示输出

Ollama 提供了一个 CLI 来与模型交互。您可以使用ollama命令生成文本。

$ docker exec -it my-ollama-container /bin/bash

运行上述命令以访问“my-ollama-container”的 shell。

接下来,运行以下命令以提取 gemma:2b 模型清单。

$ ollama list
$ ollama pull gemma:2b
Accessing the Model and Displaying Outputs

接下来,使用 ollama run 命令运行模型,如下所示:

$ ollama list
$ ollama run gemma:2b

您现在可以向 Ollama 模型发送提示,例如“给我讲个笑话”,它将显示生成的响应。

将生成式 AI 与应用程序集成

使用 Docker Compose,您可以定义和运行多容器 Docker 应用程序。在运行涉及多个服务的复杂应用程序时,这非常有用。

使用 Docker Compose 运行多个容器

创建一个docker-compose.yml文件:

version: '3.7'

services:

   ollama:

      image: ollama/ollama:latest

      ports:

         - "11434:11434"

   app:

      build: .

      ports:

         - "5000:5000"

      depends_on:

         - ollama

在这个docker-compose.yml文件中,我们定义了两个服务:ollamaappapp服务依赖于ollama服务,这确保了在启动 app 容器之前启动 Ollama 容器。

公开用于模型访问的 API

您可以使用 Flask 或 FastAPI 等 Web 框架将生成式 AI 模型公开为 API。让我们创建一个与 Ollama 模型交互并返回生成的文本的端点。

from flask import Flask, request

import ollama

app = Flask(__name__)

def generate_text(prompt):

   # Replace with your Ollama client logic

   response = ollama.generate(prompt)

   return response

@app.route('/generate', methods=['POST'])

def generate():

   prompt = request.json['prompt']

   response = generate_text(prompt)

   return {'response': response}

if __name__ == '__main__':

   app.run(host='0.0.0.0', port=5000)

您可以使用您首选的框架将 API 集成到您的 Web 应用程序中。您可以向 API 端点发出 HTTP 请求以生成文本并将其显示给用户。

结论

Docker 为部署和管理生成式 AI 模型提供了极好的基础架构。模型及其依赖项可以容器化,开发人员可以构建与开发期间相同的环境,以通过 Docker Compose 和 API 公开来部署、扩展和将生成式 AI 模型集成到应用程序中。

通过这种方式,可以更有效地利用资源来无缝使用模型。随着生成式 AI 在不久的将来变得越来越重要,Docker 在促进模型部署和管理方面的作用将变得至关重要。

关于用于生成式 AI 模型的 Docker 的常见问题

1. 我可以使用 Docker 将生成式 AI 模型部署到生产环境吗?

是的,Docker 非常适合将任何生成式 AI 模型部署到生产环境。它有助于您设计灵活且强大的应用程序,其中模型、其依赖项和服务基础架构都打包到容器中。

在包括云环境在内的托管平台上部署 Docker 容器也变得非常容易。

2. Docker 如何提高生成式 AI 模型的性能?

Docker 可以提高生成式 AI 模型的性能,因为它创建的隔离环境可以根据需要分配资源。您可以调整 CPU、内存和 GPU 以优化模型的执行。

此外,Docker 与轻量级容器和优化的基础镜像相结合,可以实现高效的模型服务。

3. 我可以使用 Docker 训练生成式 AI 模型吗?

虽然 Docker 通常用于已训练模型的部署,但它也可以用于训练过程。但是,在大规模训练场景中,您应该寻找具有专用硬件和软件的其他专用平台。

Docker 可用于创建可重复的训练环境和管理与训练相关的依赖项。

广告