Press "Enter" to skip to content

使用BentoML部署Hugging Face模型:DeepFloyd IF实战

Hugging Face提供了一个Hub平台,让您可以轻松地上传、分享和部署您的模型。它节省了开发人员从头开始训练模型所需的时间和计算资源。然而,在真实世界的生产环境中或以云原生方式部署模型仍然可能存在挑战。

这就是BentoML的作用。BentoML是一个用于机器学习模型服务和部署的开源平台。它是一个统一的框架,用于构建、发布和扩展生产就绪的人工智能应用程序,包括传统的、预训练的和生成模型,以及大型语言模型。以下是您如何从高层次的角度使用BentoML框架:

  1. 定义模型:在使用BentoML之前,您需要一个机器学习模型(或多个模型)。可以使用TensorFlow和PyTorch等机器学习库来训练这个模型。
  2. 保存模型:一旦您有了一个训练好的模型,将其保存到BentoML本地模型存储库中,用于管理所有本地训练好的模型,并用于进行服务。
  3. 创建BentoML服务:您可以创建一个service.py文件来封装模型并定义服务逻辑。它为模型指定运行器,以便在规模化的模型推理中运行模型,并公开API以定义如何处理输入和输出。
  4. 构建Bento:通过创建一个配置YAML文件,将所有模型和服务打包成一个Bento,即一个可部署的构件,其中包含所有的代码和依赖项。
  5. 部署Bento:一旦Bento准备就绪,您可以将Bento容器化为一个Docker镜像,并在Kubernetes上运行它。或者,直接部署Bento到Yatai,一个开源的、端到端的解决方案,用于在Kubernetes上自动化和运行机器学习部署。

在本博文中,我们将演示如何通过按照上述工作流程将DeepFloyd IF与BentoML集成。

目录

  • DeepFloyd IF简介
  • 准备环境
  • 将模型下载到BentoML模型存储库
  • 启动BentoML服务
  • 构建和提供Bento
  • 测试服务器
  • 下一步

DeepFloyd IF简介

DeepFloyd IF是一种先进的开源文本到图像模型。它与稳定扩散等潜在扩散模型有着不同的操作策略和架构。

DeepFloyd IF提供了高度逼真的照片效果和复杂语言理解。与稳定扩散不同,DeepFloyd IF直接在像素空间中工作,利用一个模块化的结构,包括一个冻结的文本编码器和三个级联的像素扩散模块。每个模块在过程中发挥着独特的作用:第一阶段负责创建一个基本的64×64像素图像,然后逐步放大到1024×1024像素的第二阶段和第三阶段。DeepFloyd IF独特之处的另一个关键方面是它整合了一个大型语言模型(T5-XXL-1.1)来编码提示,这提供了对复杂提示的优越理解能力。有关更多信息,请参阅Stability AI关于DeepFloyd IF的博文。

为了确保您的DeepFloyd IF应用在生产环境中运行高性能,您可能希望明智地分配和管理资源。在这方面,BentoML允许您独立为每个阶段扩展运行器。例如,您可以为第一阶段的运行器使用更多的Pods,或者为它们分配更强大的GPU服务器。

准备环境

这个GitHub存储库存储了这个项目的所有必要文件。要在本地运行这个项目,请确保您拥有以下内容:

  • Python 3.8+
  • 已安装pip
  • 至少2个16GB VRAM的GPU或1个40 VRAM的GPU。对于这个项目,我们使用了来自Google Cloud的n1-standard-16类型的机器,以及64GB的RAM和2个NVIDIA T4 GPU。请注意,虽然可以在单个T4上运行IF,但不推荐用于生产级服务

满足先决条件后,将项目存储库克隆到您的本地计算机,并导航到目标目录。

git clone https://github.com/bentoml/IF-multi-GPUs-demo.git
cd IF-multi-GPUs-demo

在构建应用程序之前,让我们简要地探索一下该目录中的关键文件:

  • import_models.py:为IFPipeline的每个阶段定义模型。您可以使用此文件将所有模型下载到本地计算机,以便将它们打包到单个Bento中。
  • requirements.txt:定义了此项目所需的所有软件包和依赖项。
  • service.py:定义了一个BentoML服务,其中包含使用to_runner方法创建的三个Runner,并公开了一个API,用于生成图像。该API接受一个JSON对象作为输入(即提示和负面提示),并通过使用一系列模型返回一个图像作为输出。
  • start-server.py:通过service.py中定义的服务启动一个BentoML HTTP服务器,并为用户创建了一个Gradio Web界面,以便用户输入提示生成图像。
  • bentofile.yaml:定义要构建的Bento的元数据,包括服务、Python软件包和模型。

我们建议您创建一个虚拟环境来进行依赖项隔离。例如,运行以下命令以激活myenv

python -m venv venv
source venv/bin/activate

安装所需的依赖项:

pip install -r requirements.txt

如果您以前没有使用命令行从Hugging Face下载模型,您必须首先登录:

pip install -U huggingface_hub
huggingface-cli login

将模型下载到BentoML模型存储库

如上所述,您需要下载每个DeepFloyd IF阶段使用的所有模型。设置环境后,运行以下命令将模型下载到本地模型存储库。该过程可能需要一些时间。

python import_models.py

下载完成后,查看模型存储库中的模型。

$ bentoml models list

Tag                                                                 Module                Size       Creation Time
sd-upscaler:bb2ckpa3uoypynry                                        bentoml.diffusers     16.29 GiB  2023-07-06 10:15:53
if-stage2:v1.0                                                      bentoml.diffusers     13.63 GiB  2023-07-06 09:55:49
if-stage1:v1.0                                                      bentoml.diffusers     19.33 GiB  2023-07-06 09:37:59

启动BentoML服务

您可以直接使用start-server.py文件运行BentoML HTTP服务器,并使用由Gradio提供支持的Web界面。它提供了各种选项,用于自定义执行和管理不同阶段之间的GPU分配。根据您的GPU设置,可以使用不同的命令:

  • 对于具有超过40GB VRAM的GPU,将所有模型都运行在同一个GPU上。

    python start-server.py
  • 对于两个具有15GB VRAM的Tesla T4,将第1阶段模型分配给第一个GPU,将第2和第3阶段模型分配给第二个GPU。

    python start-server.py --stage1-gpu=0 --stage2-gpu=1 --stage3-gpu=1
  • 对于一个具有15GB VRAM的Tesla T4和两个额外的VRAM较小的GPU,将第1阶段模型分配给T4,将第2和第3阶段模型分别分配给第二和第三个GPU。

    python start-server.py --stage1-gpu=0 --stage2-gpu=1 --stage3-gpu=2

要查看所有可自定义的选项(如服务器端口),运行:

python start-server.py --help

测试服务器

一旦服务器启动,您可以访问位于http://localhost:7860的Web用户界面。 BentoML API端点也可在http://localhost:3000上访问。这是一个提示和一个负面提示的示例。

提示:

橙色和黑色,一位女子站在街灯下,黑暗主题,弗兰克·米勒,电影,超写实,环境,极为详细和复杂,超写实,8k分辨率,照片级,高度纹理,复杂的细节

负面提示:

平铺,画得不好的手,画得不好的脚,画得不好的脸,超出画面,变异,变异,额外的肢体,额外的腿,额外的手臂,畸形,变形,斜视,身体超出画面,模糊,糟糕的艺术,糟糕的解剖学,模糊,文字,水印,颗粒状

结果:

使用BentoML部署Hugging Face模型:DeepFloyd IF实战 四海 第1张

构建和提供Bento

现在您已成功在本地运行DeepFloyd IF,您可以通过在项目目录中运行以下命令将其打包为Bento。

$ bentoml build

将'IF-stage1'转换为小写:'if-stage1'。
将'IF-stage2'转换为小写:'if-stage2'。
将DeepFloyd-IF转换为小写:deepfloyd-if。
从构建上下文"/Users/xxx/Documents/github/IF-multi-GPUs-demo"构建BentoML服务"deepfloyd-if:6ufnybq3vwszgnry"。
打包模型"sd-upscaler:bb2ckpa3uoypynry"
打包模型"if-stage1:v1.0"
打包模型"if-stage2:v1.0"
锁定PyPI软件包版本。

██████╗░███████╗███╗░░██╗████████╗░█████╗░███╗░░░███╗██╗░░░░░
██╔══██╗██╔════╝████╗░██║╚══██╔══╝██╔══██╗████╗░████║██║░░░░░
██████╦╝█████╗░░██╔██╗██║░░░██║░░░██║░░██║██╔████╔██║██║░░░░░
██╔══██╗██╔══╝░░██║╚████║░░░██║░░░██║░░██║██║╚██╔╝██║██║░░░░░
██████╦╝███████╗██║░╚███║░░░██║░░░╚█████╔╝██║░╚═╝░██║███████╗
╚═════╝░╚══════╝╚═╝░░╚══╝░░░╚═╝░░░░╚════╝░╚═╝░░░░░╚═╝╚══════╝

成功构建Bento(标记="deepfloyd-if:6ufnybq3vwszgnry")。

在本地Bento Store中查看Bento。

$ bentoml list

标记                               大小       创建时间
deepfloyd-if:6ufnybq3vwszgnry     49.25 GiB  2023-07-06 11:34:52

Bento现已准备好用于生产。

bentoml serve deepfloyd-if:6ufnybq3vwszgnry

要以更云原生的方式部署Bento,请运行以下命令生成Docker镜像:

bentoml containerize deepfloyd-if:6ufnybq3vwszgnry

然后您可以在Kubernetes上部署该模型。

下一步是什么?

BentoML为部署Hugging Face模型提供了强大而简单的方式。借助其对各种ML框架的支持和易于使用的API,您可以在短时间内将模型部署到生产环境。无论您是使用DeepFloyd IF模型还是Hugging Face模型中心上的任何其他模型,BentoML都可以帮助您使模型活起来。

查看以下资源,了解您可以使用BentoML及其生态系统工具构建什么,并密切关注有关BentoML的更多信息。

  • OpenLLM – 用于在生产环境中操作大型语言模型(LLM)的开放平台。
  • StableDiffusion – 使用任何扩散模型创建自己的文本到图像服务。
  • Transformer NLP Service – 用于Transformer NLP模型的在线推理API。
  • 加入BentoML社区的Slack频道。
  • 在Twitter和LinkedIn上关注我们。
Leave a Reply

Your email address will not be published. Required fields are marked *