用于部署的打包

BentoML 提供了一种称为 Bentos 的标准化格式,用于打包 AI/ML 服务。一个 Bento 包含运行 AI 服务所需的所有组件,例如源代码、Python 依赖项、模型 artifacts 和配置。这确保您的 AI 服务在不同环境中保持一致且可重现。

BentoML Bento architecture

定义运行时环境

在构建 Bento 之前,您需要定义它的运行时环境。以下是一个示例

service.py
import bentoml

my_image = bentoml.images.Image(python_version="3.11") \
    .python_packages("torch", "transformers")

@bentoml.service(
    image=my_image,
    envs=[
        {"name": "HF_TOKEN"},  # You can omit value and set it when deploying the Service
        {"name": "DB_HOST", "value": "localhost"}
    ]
)
class Summarization:
    ...

关键环境变量字段

  • python_version: 指定要使用的 Python 版本。默认为您构建环境中的 Python 版本。

  • python_packages: 列出所需的 Python 包。或者,使用 .requirements_file("requirements.txt") 引用 requirements 文件。

@bentoml.service 装饰器中,通过 image 将运行时环境应用于您的服务。您也可以使用 envs 参数指定所需的环境变量。

参阅更多 可用字段 以自定义您的构建。

构建 Bento

在与您的 service.py 文件相同的目录下运行以下命令。

bentoml build

注意

默认情况下,此命令会打包执行它的目录下所有文件。要排除特定文件或目录,请在 .bentoignore 文件中定义它们。

构建后,每个 Bento 会自动分配一个唯一版本。您可以使用以下命令列出所有可用的 Bentos

bentoml list

bentoml build 命令是 bentoml deploy 工作流的一部分。只有当您想构建 Bento 而不将其部署到 BentoCloud 时,才应使用此命令。要直接将您的项目部署到 BentoCloud,请使用 bentoml deploy。有关详细信息,请参阅 云部署

将 Bento 容器化

要使用 Docker 将 Bento 容器化,只需运行 bentoml containerize <bento_tag>。例如

bentoml containerize summarization:latest

注意

对于配备 Apple silicon 的 Mac 电脑,您可以指定 --platform 选项,以避免某些 Python 库可能出现的兼容性问题。

bentoml containerize --platform=linux/amd64 summarization:latest

Docker 镜像的标签默认与 Bento 标签相同。查看已创建的 Docker 镜像

$ docker images

REPOSITORY      TAG                IMAGE ID       CREATED         SIZE
summarization   lkpxx2u5o24wpxjr   79a06b402644   2 minutes ago   6.66GB

在本地运行 Docker 镜像

docker run -it --rm -p 3000:3000 summarization:lkpxx2u5o24wpxjr serve

有了 Docker 镜像,您可以在任何兼容 Docker 的环境中运行模型。