阅读我们的文章

.

本文提供了使用顶点人工智能在谷歌云上部署稳定扩散模型(一种流行的图像生成模型)的指南。本指南包括设置和权重下载、部署 TorchServe、在顶点端点上部署 TorchServe 服务器以及在 GCS 上自动保存图像历史记录。

导言

稳定扩散是一种图像生成模型。该模型于 2022 年开源,由于能根据文字描述生成高质量图像而广受欢迎。与 Dall-E 等其他图像生成模型一样,Stable Diffusion 使用机器学习技术根据给定输入生成图像。.

酩悦轩尼诗是奢侈品集团路威酩轩集团(LVMH)旗下的葡萄酒和烈酒部门,管理着酩悦香槟、轩尼诗和凯歌香槟等 26 个标志性品牌。酩悦轩尼诗已与 Artefact 酩悦-轩尼诗公司(Moët Hennessy)的首席执行官兼首席技术官Jean-Robert-Johnson表示:"酩悦-轩尼诗公司与谷歌云平台(GCP)合作,研究尖端技术在营销内容生成方面的潜在用途。考虑到隐私和安全问题,团队决定探索在谷歌云平台(GCP)上部署 Stable Diffusion,以便酩悦轩尼诗公司能够在自己的基础设施中微调和运行模型,提供从模型微调到 API 暴露的无缝体验。.

在开始之前,需要注意的是本文假定您已经了解 Google Cloud Platform (GCP),特别是 Vertex AI。这包括模型注册表和 Vertex 端点等概念。此外,您还需要具备使用 Docker 的经验,才能执行某些步骤。如果您不熟悉这些概念,建议您在继续之前先熟悉一下。.
此外,要下载稳定扩散权重,您需要有一个 huggingface 帐户。 拥抱脸的网站.
说了这么多,让我们开始吧......!

设置和权重下载

我建议克隆 giTunes 存储库 我按照文章的步骤做了准备。.

创建一个虚拟环境来安装软件包总是很重要的。就我个人而言,我会使用 anaconda 并在每个依赖项中安装 requirements.txt:

conda create -n stable_diffusion - no-default-packages python=3.8 -y
conda activate stable_diffusion
pip install -r src/requirements.txt

现在您可以下载稳定扩散的权重了,在本文中我们将使用 稳定扩散 1.5. .您需要在模型页面上接受许可,否则在下载模型权重时会出错。.
转到账户 → 设置 → 访问令牌 → 新令牌(读取权限)

Go to your account → settings → access token → new token (read access)

你可以将标记添加为环境变量。我个人建议使用 .env 文件,并使用 python-dotenv 库.
您必须导航到 `src/stable_diffusion` 并运行:

python download_model.py

这将下载里面的权重

src/stable_diffusion/external_files/model_weights"。.

火炬服务框架

火炬服务 是一个为 PyTorch 模型提供服务的框架。它允许你在生产环境中部署 PyTorch 模型,并提供模型版本管理和多模型服务等功能。它设计得易于使用,让你可以专注于构建和部署模型,而不必担心基础设施。.

1.创建符合 TorchServe 格式的处理程序

自定义处理程序是一个 Python 类,它定义了如何预处理输入 data、如何运行模型以及如何后处理输出。要为模型创建自定义处理程序,您需要创建一个遵循 TorchServe 格式的 Python 类。.
TorchServe 软件仓库中已经提供了稳定扩散的自定义处理程序。但顶点端点希望请求采用特定格式,因此我们需要调整处理程序的 preprocess() 方法,以适应顶点格式。您可以使用修改后的处理程序版本,其名称为 `stable_diffusion_handler.py在本文的 github 仓库中给出。.

2.创建 .mar 文件

创建自定义处理程序后,您需要使用模型贮存器工具将其与任何依赖项和模型本身打包成一个 .mar 文件。model-archiver 工具是一个命令行工具,可以将模型、处理程序和依赖项打包成一个文件。.

这将创建一个名为 output.mar 的 .mar 文件,其中包含模型、处理程序和依赖项。.

您可能需要根据文件在机器上的位置编辑路径:

火炬模型存档器
-模型名称稳定扩散
-版本 1.0
-处理程序 stable_diffusion/stable_diffusion_handler.py
-输出路径 stable_diffusion/model-store
-额外文件 stable_diffusion/external_files

3.运行 TorchServe 服务器

创建好 .mar 文件后,就可以使用 torchserve 命令启动 TorchServe 服务器了。为此,你需要运行以下命令:

火炬服务
- 启动
- ts-config=config.properties
- models=stable-diffusion.mar
- 模型存储=stable_diffusion/模型存储

通过 config.properties,您可以指定 TorchServe 服务器的配置,如推理端口、健康检查、工作者数量等。.
警告:所有脚本都需要在文件所在位置运行,以避免出现任何路径错误。.

在本地运行 TorchServe 服务器

我已经准备了一个 bash 脚本,用于创建 .mar 文件并启动 TorchServe 服务器。.

您可以使用 .NET Framework 2.0 运行它:


bash serve_locally.sh

您需要等待几分钟,等待服务器初始化和 Worker 加载模型,如果看到以下日志,您就可以开始运行推理了:

2023-01-05T15:34:52,842 [DEBUG] W-9000-stable-diffusion_1.0
org.pytorch.serve.wlm.WorkerThread- W-9000-stable-diffusion_1.0
状态更改 WORKER_STARTED -> WORKER_MODEL_LOADED

然后,您可以使用下面的代码对模型提出推理请求:

进口请求
prompt = “一张宇航员在火星上骑马的照片”
URL = “http://localhost:7080/predictions/stable-diffusion”
response = requests.post(URL, data=prompt)

您可以查看服务器日志,检查服务器是否收到了您的请求:

2023-01-05T15:35:43,765 [INFO ] W-9000-stable-diffusion_1.0-stdout
MODEL_LOG - 后端在以下位置收到推理:1672929343

稳定扩散需要 GPU 才能顺利运行,因此暂时不会有任何输出。你可以使用 `torhcserve -stop` 停止 torchserve 服务器。.

Dockerize torchserve

您的 TorchServe 服务器已在本地运行,要在顶点 AI 上部署稳定扩散,您需要将其坞化。这意味着要创建一个包含模型、自定义处理程序和所有必要依赖项的 Docker 镜像。这就是我们在 Dockerfile 中完成的所有步骤。.
幸运的是,这里已经准备好了,随时可以使用: Dockerfile.

重要的是要在本地运行容器,以检查其是否正常工作。我将在本地构建它,但你也可以使用 cloud 构建并在你的机器上运行它。.

在本地构建镜像(需要运行 Docker 守护进程):

build -t serve_sd .

建立镜像需要 20 到 30 分钟,建立阶段时间较长,因为模型的权重需要复制到镜像中,然后由模型存档器打包。.

您可以运行一个 docker 容器,并通过 7080 端口监听:

docker run -p 7080:7080 serve_sd

要检查一切工作是否正常,可以等到 Worker 加载完模型后再运行与之前相同的推理代码,因为我们使用的是相同的 7080 端口。.

在顶点人工智能上部署

现在,Dockerfile 已经准备就绪并开始工作,我们需要

  • 使用谷歌容器注册表(gcr)中的云构建功能构建映像
  • 在顶点人工智能模型注册表中上传自定义模型的图像

  • 创建顶点人工智能端点
  • 将模型附加到端点

这正是 deploy.sh 您可以使用

bash deploy.sh

在网速良好的情况下,部署大约需要 1 个小时:

  • 将 8 GB 的模型权重发送到 Cloud Build 需要几分钟到几小时不等,具体取决于您的网速
  • 制作图像大约需要 20 分钟

  • 上传模型大约需要 5 分钟

  • 创建端点大约需要 5 分钟

  • 将模型连接到终端需要 30 至 40 分钟

模型成功连接到端点后,就可以用下面的代码查询端点了:

from google.cloud import aiplatform as aip

项目名称 = ""
区域 = ""
endpoint_id = ""
aip.init(project=PROJECT_NAME, location=REGION)
endpoint = aip.Endpoint(endpoint_name=ENDPOINT_ID)
text_input = """A bottle of aged and exclusive cognac
站在反光面上,面前是生机勃勃的酒吧、,
超精细、4K、虚化"""

def query_endpoint(endpoint, text_input):
有效载荷 =
response = endpoint.predict(instances=[payload])
返回响应

图像 = query_endpoint(endpoint, text_input)

一瓶陈年的独家干邑矗立在反光表面上,前面是一个充满活力的酒吧,超精细,4K,虚化 - 稳定扩散 1.5

在 T4 GPU 上,推理时间应在 10 至 15 秒之间。您可以通过选择更好的 GPU 来提高速度,也可以更改 ACCELERATOR_TYPE 变量。 deploy.sh.

可选项:如果图像大小对终端来说太大,或者您想存储图像历史记录。.

您可能希望跟踪图像的历史记录,或者由于端点响应的大小限制为 1.5 MB 而导致出错。在这种情况下,我建议使用处理程序的后处理方法将图像保存在 GCS 中,并只返回图像的 GCS 路径。.

幸运的是,我已经为你准备好了一个处理程序,它可以帮你做到这一点,将 stable_diffusion_handler.py 替换为 stable_diffusion_handler_gcs.py 就可以了。.

警告:在使用新处理程序运行部署之前,您需要

  • 创建用于存储图像的 GCS 桶

  • 在 src/stable_diffusion/external_files/config.py 中编辑新 GCS 桶和文件夹的名称

  • 在 deploy.sh 文件中更改端点使用的服务账户。您需要一个具有 GCS OWNER 权限的服务账户。.

结论

本文提供了在谷歌云平台上使用顶点人工智能部署稳定扩散模型的全面指南。.

该指南包括以下基本步骤

  • 使用 TorchServe 进行部署
  • 为稳定扩散创建和修改自定义处理程序
  • 使用顶点模型注册表和顶点端点部署模型

重要的是要记住,虽然顶点端点是一种有效的解决方案,但它不支持将实例缩减为 0,这可能会导致 GPU 的使用成本增加。.

此外,随着稳定扩散模型的部署完成,我们目前正在探索进一步的可能性,例如在特定的酩悦轩尼诗产品上对模型进行微调,以进一步增强模型的能力。.

中号 Blog by Artefact。.

本文最初发表于 Medium.com.
在我们的 Medium Blog 上关注我们!