(含代码)利用NVIDIA Triton加速Stable Diffusion XL推理速度

在 NVIDIA AI 推理平台上使用 Stable Diffusion XL 生成令人惊叹的图像

在这里插入图片描述

扩散模型正在改变跨行业的创意工作流程。 这些模型通过去噪扩散技术迭代地将随机噪声塑造成人工智能生成的艺术,从而基于简单的文本或图像输入生成令人惊叹的图像。 这可以应用于许多企业用例,例如创建个性化营销内容、为照片中的对象生成富有想象力的背景、设计动态的高质量环境和游戏角色等等。

虽然扩散模型可以成为增强工作流程的有用工具,但大规模部署时模型的计算量可能非常大。 在 CPU 等非专用硬件上生成单批四个图像可能需要几分钟的时间,这可能会阻碍创意流程,并成为许多希望满足严格服务级别协议 (SLA) 的开发人员的障碍。

在这篇文章中,我们将向您展示 NVIDIA AI 推理平台如何通过Stable Diffusion XL (SDXL) 来解决这些挑战。 我们从企业在生产中部署 SDXL 时面临的常见挑战开始,深入探讨由 NVIDIA L4 Tensor Core GPU、NVIDIA TensorRT 和 NVIDIA Triton 推理服务器提供支持的 Google Cloud G2 实例如何帮助缓解这些挑战。 我们介绍了领先的 AI 计算机视觉初创公司 Let’s Enhance 如何在 NVIDIA AI 推理平台和 Google Cloud 上使用 SDXL,使企业只需单击一下即可创建迷人的产品图像。 最后,我们提供了有关如何开始使用 Google Cloud 上的 SDXL 进行经济高效的图像生成的分步教程。

解决 SDXL 生产部署挑战

在生产中部署任何人工智能工作负载都会面临一系列挑战。 其中包括在现有模型服务基础设施中部署模型,通过优化推理请求的批处理来提高吞吐量和延迟,以及使基础设施成本符合预算限制。

然而,由于扩散模型对卷积神经网络的依赖、图像预处理和后处理操作的要求以及严格的企业 SLA 要求,在生产中部署扩散模型的挑战非常突出。

在这篇文章中,我们将深入研究这些方面,并探讨 NVIDIA 全栈推理平台如何帮助缓解这些问题。

利用 GPU 专用Tensor Core

Stable Diffusion 的核心是 U-Net 模型,该模型从噪声图像(一组随机数矩阵)开始。 这些矩阵被切成更小的子矩阵,在其上应用一系列卷积(数学运算),产生精细的、噪音较小的输出。 每个卷积都需要乘法和累加运算。 该去噪过程会迭代多次,直到获得新的、增强的最终图像。

在这里插入图片描述

鉴于其计算复杂性,该过程显着受益于特定类型的 GPU 核心,例如 NVIDIA Tensor 核心。 这些专用内核是从头开始构建的,旨在加速矩阵乘法累加运算,从而加快图像生成速度。

NVIDIA 通用 L4 GPU 拥有超过 200 个 Tensor Core,对于希望在生产环境中部署 SDXL 的企业来说是理想的经济高效的 AI 加速器。 企业可以通过 Google Cloud 等云服务提供商访问 L4 GPU,Google Cloud 是第一个通过其 G2 实例在云中提供 L4 GPU 的 CSP。

在这里插入图片描述

图像预处理和后处理的自动化

在使用 SDXL 的实际企业应用程序中,该模型是更广泛的 AI 管道的一部分,其中包括其他计算机视觉模型以及预处理和后处理图像编辑步骤。

例如,使用 SDXL 为新产品发布活动创建背景场景可能需要先进行初步的放大预处理步骤,然后再将产品图像输入 SDXL 模型以进行场景生成。 生成的 SDXL 图像输出可能还需要进一步的后处理,例如使用图像升级器升级到更高分辨率,然后才适合在营销活动中使用。

使用功能齐全的 AI 推理模型服务器(例如开源 Triton 推理服务器)可以自动将这些不同的预处理和后处理步骤拼接到简化的 AI 管道中。 这样就无需编写手动代码或在计算环境中来回复制数据,从而引入不必要的延迟并浪费昂贵的计算和网络资源。

在这里插入图片描述

通过使用 Triton Inference Server 为 SDXL 模型提供服务,您可以利用模型集成功能,该功能使您能够定义如何使用低代码方法将一个模型的输出作为下一个模型的输入。 您可以选择在 CPU 上运行预处理和后处理步骤,在 GPU 上运行 SDXL 模型,或者选择在 GPU 上运行整个管道以实现超低延迟应用程序。 任一选项均可让您充分灵活地控制 SDXL 管道的端到端延迟。

生产环境的高效扩展

随着越来越多的企业计划将 SDXL 纳入其业务线,有效批处理传入用户请求和最大化 GPU 利用率的挑战变得越来越复杂。 这种复杂性源于需要最大限度地减少延迟以获得积极的用户体验,同时提高吞吐量以降低运营成本。

使用 TensorRT 等开源 GPU 模型优化器,再加上具有并发模型执行和动态批处理功能的推理服务器(如 Triton Inference Server),可以缓解这些挑战。

例如,考虑与其他 TensorFlow 和 PyTorch 图像分类或特征提取 AI 模型并行运行 SDXL 模型的场景,特别是在具有大量传入客户端请求的生产环境中。 在这里,SDXL 模型可以使用 TensorRT 进行编译,从而优化模型以实现低延迟推理。

Triton 推理服务器还可以通过其动态批处理和并发推理功能,有效地批处理和跨模型分发大量传入请求,无论其后端框架如何。 这种方法优化了吞吐量,使企业能够以更少的资源和更低的总拥有成本满足用户需求。

在这里插入图片描述

将普通的产品照片变成美丽的营销资产

Let’sEnhance 是一家利用 NVIDIA AI 推理平台的强大功能在生产环境中为 SDXL 提供服务的公司的一个很好的例子。 这家开创性的 AI 初创公司三年多来一直使用 Triton Inference Server 在 NVIDIA Tensor Core GPU 上部署 30 多个 AI 模型。

最近,Let’sEnhance 庆祝其最新产品 AI Photoshoot 的推出,该产品使用 SDXL 模型将普通的产品照片转换为用于电子商务网站和营销活动的美丽视觉资产。

凭借 Triton Inference Server 对各种框架和后端的强大支持,再加上其动态批处理功能集,Let’s Enhance 创始人兼首席技术官 Vlad Pranskevichus 能够将 SDXL 模型无缝集成到现有的 AI 管道中,而 ML 工程团队的参与最少, 腾出时间进行研究和开发工作。

通过成功的概念验证,这家 AI 图像增强初创公司发现,通过将 SDXL 模型迁移到 Google Cloud G2 实例上的 NVIDIA L4 GPU,成本可降低 30%,并概述了到 2024 年中期完成多个管道迁移的路线图。

在这里插入图片描述

使用 L4 GPU 和 TensorRT 开始使用 SDXL

在下一部分中,我们将演示如何在 Google Cloud 的 G2 实例上快速部署 TensorRT 优化版本的 SDXL,以获得最佳性价比。 要使用 NVIDIA 驱动程序在 Google Cloud 上启动虚拟机实例,请按照以下步骤操作。

选择以下机器配置选项:

  • Machine type: g2-standard-8
  • CPU platform: Intel Cascade Lake
  • Minimum CPU platform: None
  • Display device: Disabled
  • GPUs: 1 x NVIDIA L4

g2-standard-8 机器类型配备 1 个 NVIDIA L4 GPU 和 4 个 vCPU。 根据需要多少内存,可以使用更大的机器类型。

选择以下启动磁盘选项,确保选择源映像:

  • Type: Balanced persistent disk
  • Size: 500 GB
  • Zone: us-central1-a
  • Labels: None
  • In use by: instance-1
  • Snapshot schedule: None
  • Source image: c0-deeplearning-common-gpu
  • Encryption type: Google-managed
  • Consistency group: None

Google 深度学习 VM 包含最新的 NVIDIA GPU 库。

VM 实例启动并运行后,在浏览器窗口中选择“连接”、“SSH”、“打开”和“身份验证”。 这会在浏览器窗口中加载 SSH 终端。

按照以下步骤,使用使用 TensorRT 优化的 Stable Diffusion XL 生成图像。

克隆 TensorRT OSS 存储库:

git clone https://github.com/NVIDIA/TensorRT.git -b release/9.2 --single-branchcd TensorRT

安装 nvidia-docker 并启动 PyTorch 容器:

docker run --rm -it --gpus all -v $PWD:/workspace nvcr.io/nvidia/pytorch:24.01-py3 /bin/bash

安装最新的 TensorRT 版本:

python3 -m pip install --upgrade pip
python3 -m pip install --pre --upgrade --extra-index-url https://pypi.nvidia.com tensorrt

安装所需的软件包:

export TRT_OSSPATH=/workspace
export HF_TOKEN=<your_hf_token_to_download_models>
cd $TRT_OSSPATH/demo/Diffusion
pip3 install -r requirements.txt

现在运行TensorRT优化的Stable Diffusion XL模型,提示“装饰艺术,现实”:

python3 demo_txt2img_xl.py "art deco, realistic" --hf-token=$HF_TOKEN --version xl-1.0 --batch-size 1 --build-static-batch --num-warmup-runs 5 --seed 3 --verbose --use-cuda-graph

这会生成一个令人惊叹的图像,可以在notebook中查看:

from IPython.display import display
from PIL import Image
img = Image.open('output/xl_base-fp16-art_deco,_-1-xxxx.png')
display(img)

在这里插入图片描述

恭喜! 您已使用经过 TensorRT 优化的 Stable Diffusion XL 生成了示例图像。

为了提高吞吐量,您可以使用更大的机器类型,利用多达 8 个 L4 GPU 并在每个 GPU 上加载模型以实现高效的并行处理。 为了实现更快的推理,您可以调整去噪步骤数、图像分辨率或精度。 例如,将前面示例中的降噪步骤数从 30 减少到 20,可使吞吐量提高 1.5 倍图像/秒。

L4 GPU 具有出色的性价比。 与 NVIDIA A100 Tensor Core GPU 相比,它每美元生成的图像数量增加了 1.4 倍,非常适合成本敏感型应用程序和离线批量图像生成。 然而,相对于 L4,A100 或 H100 是延迟敏感型应用程序的更好选择,生成图像的速度分别快 3.8-7.9 倍。

性能取决于推理过程中的多个因素,包括批量大小、分辨率、去噪步骤和数据精度。 有关进一步优化和配置选项的更多信息,请参阅 /NVIDIA/TensorRT GitHub 存储库中的 DemoDiffusion 示例。

使用 Triton Inference Server 在生产环境中部署 SDXL

以下介绍了如何在 g2-standard-32 机器类型上使用 Triton Inference Server 在生产环境中部署 SDXL 模型。

克隆 Triton 推理服务器教程存储库:

git clone https://github.com/triton-inference-server/tutorials.git -b r24.02 --single-branchcd tutorials/Popular_Models_Guide/StableDiffusion 

构建 Triton Inference Server diffusion容器镜像:

./build.sh

在容器映像中运行交互式 shell。 以下命令启动容器并将当前目录挂载为工作空间:

./run.sh

构建Stable Diffusion XL TensorRT 引擎。 这需要几分钟的时间。

./scripts/build_models.sh --model stable_diffusion_xl

完成后,预期输出将如下所示:

diffusion-models|-- stable_diffusion_xl|-- 1|   |-- xl-1.0-engine-batch-size-1|   |-- xl-1.0-onnx|   `-- xl-1.0-pytorch_model`-- config.pbtxt

启动 Triton 推理服务器。 在这个demo中,我们使用EXPLICIT模型控制模式来控制加载哪个Stable Diffusion版本。 有关生产部署的更多信息,请参阅安全部署注意事项。

tritonserver --model-repository diffusion-models --model-control-mode explicit --load-model stable_diffusion_xl

完成后,预期输出将如下所示:

<SNIP>
I0229 20:22:22.912465 1440 server.cc:676]
+---------------------+---------+--------+
| Model               | Version | Status |
+---------------------+---------+--------+
| stable_diffusion_xl | 1       | READY  |
+---------------------+---------+--------+
<SNIP>/sy

在单独的交互式 shell 中启动一个新容器来运行示例 Triton Inference Server 客户端。 以下命令启动容器并将当前目录挂载为工作空间:

./run.sh

将提示发送到 Stable Diffusion XL:

python3 client.py --model stable_diffusion_xl --prompt "butterfly in new york, 4k, realistic" --save-image

在这里插入图片描述

恭喜! 您已成功使用 Triton 部署 SDXL。

使用 Triton Inference Server 进行动态批处理

启动并运行基本的 Triton 推理服务器后,您现在可以增加 max_batch_size 参数以启用动态批处理。

如果 Triton 推理服务器正在运行,请将其停止。 可以通过在交互式 shell 中输入 CTRL-C 来停止服务器。

编辑模型配置文件 ./diffusion-models/stable_diffusion_xl/config.pbtxt,将批量大小增加到 2:

  • 之前:max_batch_size:1
  • 之后:max_batch_size:2

重建批量大小为 2 的 TRT 引擎。需要几分钟。

./scripts/build_models.sh --model stable_diffusion_xl

完成后,预期输出将如下所示:

diffusion-models
|-- stable_diffusion_xl|-- 1|   |-- xl-1.0-engine-batch-size-2|   |-- xl-1.0-onnx|   `-- xl-1.0-pytorch_model`-- config.pbtxt

重新启动 Triton 推理服务器:

tritonserver --model-repository diffusion-models --model-control-mode explicit --load-model stable_diffusion_xl

完成后,预期输出将如下所示:

<SNIP>
I0229 20:22:22.912465 1440 server.cc:676]
+---------------------+---------+--------+
| Model               | Version | Status |
+---------------------+---------+--------+
| stable_diffusion_xl | 1       | READY  |
+---------------------+---------+--------+
<SNIP>

向服务器发送并发请求。 为了使服务器能够动态批处理多个请求,必须有多个客户端并行发送请求。 示例客户端使您能够增加客户端数量以了解动态批处理的优势。

python3 client.py --model stable_diffusion_xl --prompt "butterfly in new york, 4k, realistic" --clients 2 –requests 5

检查服务器日志和指标。 启用动态批处理、并发请求和信息级日志记录后,该示例将打印出有关 TensorRT 引擎的每个请求中包含的提示数量的附加信息。

57291 │ I0229 20:36:23.017339 2146 model.py:184] Client Requests in Batch:2
57292 │ I0229 20:36:23.017428 2146 model.py:185] Prompts in Batch:2

在这里插入图片描述
在这里插入图片描述

总结

在 NVIDIA AI 推理平台上部署 SDXL 可为企业提供可扩展、可靠且经济高效的解决方案。

TensorRT 和 Triton 推理服务器都可以释放性能并简化生产就绪部署,并作为 NVIDIA AI Enterprise 的一部分包含在 Google Cloud Marketplace 上。 AI Enterprise 提供 NVIDIA 支持服务以及支持 AI 推理的开源容器和框架的企业级稳定性、安全性和可管理性。

企业开发人员还可以选择使用 NVIDIA Picasso(视觉内容定制生成 AI 的代工厂)来训练、微调、优化和推断扩散基础模型。

SDXL 作为 NVIDIA AI 基础模型的一部分并在 NGC 目录中提供。 它提供了易于使用的界面,可直接从浏览器快速尝试 SDXL。

我将在 NVIDIA GTC 大会期间为大家带来免费中文在线解读:

NVIDIA CUDA 最新特性以及生成式 AI 相关内容,包括 Stable Diffusion 模型部署实践,以及介绍用于视觉内容生成的 Edify 模型,点击链接了解详情并注册参会:

https://www.nvidia.cn/gtc-global/session-catalog/?search=WP62435%20WP62832%20WP62400&ncid=ref-dev-945313#/

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/751096.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【剑指offer--C/C++】JZ25 合并两个排序的链表

题目 思路 这个题目大逻辑比较简单&#xff0c;就是一个比较和穿插&#xff0c;但细节上要考虑清楚&#xff0c;可以画个图模拟一下。我这里是设置将两个链表拆开组成一个新的链表&#xff0c;这样不需要占用新的空间。两个指针对应节点的值进行比较&#xff0c;那个节点值较小…

【Stable Diffusion】入门-03:图生图基本步骤+参数解读

目录 1 图生图原理2 基本步骤2.1 导入图片2.2 书写提示词2.3 参数调整 3 随机种子的含义4 拓展应用 1 图生图原理 当提示词不足以表达你的想法&#xff0c;或者你希望以一个更为简单清晰的方式传递一些要求的时候&#xff0c;可以给AI输入一张图片&#xff0c;此时图片和文字是…

数据可视化学习:Matplotlib概述

一、图表的常用设置 1.基本绘图主要函数 (1).matplotlib.pyplot.plot(x,y,format_string,**kwargs) 2.参数说明 (1).x:x轴数据 (2).y:y轴数据 (3).format_string:控制曲线格式的字符串&#xff0c;包括颜色、线条样式和标记样式 (4)**kwargs:键值参数&#xff0c;相当于…

基础知识学习 -- qnx 系统

QNX是一个基于优先级抢占的系统。 这也导致其基本调度算法相对比较简单。因为不需要像别的通用操作系统考虑一些复杂的“公平性”&#xff0c;只需要保证“优先级最高的线程最优先得到 CPU”就可以了。 基本调度算法 调度算法&#xff0c;是基于优先级的。QNX的线程优先级&a…

VS调试快捷键

VS调试快捷键 4. VS调试快捷键4.1 环境准备4.2 调试快捷键调试最常使⽤的⼏个快捷键&#xff1a; 4. VS调试快捷键 那程序员怎么调试代码呢&#xff1f; 4.1 环境准备 首先是环境的准备&#xff0c;需要⼀个支持调试的开发环境&#xff0c;我们上课使用VS&#xff0c;应该把…

Magical Combat VFX

这个包包含30个可供游戏使用的VFX,有各种口味,为您的游戏增添趣味! 所有VFX都经过了很好的优化,可以在所有平台上使用。 这个包特别有一堆闪电魔法,有两种主要的变体,一种是深色的,另一种是浅色的。但它也提供了一系列其他视觉效果,如神圣咒语、音乐主题等等! 我们提供…

fetch,前端 面试题

Fetch Fetch API 是近年来被提及将要取代XHR的技术新标准&#xff0c;是一个 HTML5 的 API。 基于promise的设计&#xff0c;返回的是Promise对象 fetch()采用模块化设计&#xff0c;API 分散在多个对象上&#xff08;Response 对象、Request 对象、Headers 对象&#xff09;…

如何在webapp中于动发布一个应用

目录 第一步&#xff1a;在webapp文件夹内自定义文件夹第二步&#xff1a;生成一个文本&#xff0c;并把后缀改为 .html第三步&#xff1a;进入bin文件夹打开服务第四步&#xff1a;打开方式选择java第六步&#xff1a;输入你想输出的东西第七步&#xff1a;双击运行即可 第一步…

mybatis-plus笔记1

mybatis-plus笔记1 mybatis-plus快速入门基于Mapper接口的crud增强基于service的crud分页查询分页添加到自定义方法queryWrapper简单使用使用细节 updateWrapperlambdaWrapper mybatis-plus快速入门 pom.xml文件中导入相关依赖 application.yaml配置文件 MainApplication.java…

使用Java Runtime执行docker下的mysqldump

Runtime直接使用 docker exec mysql mysqldump -u%s -p%s cblog > %s&#xff08;%s是需要填充的数据&#xff09;&#xff0c;命令无法执行并且不会报错&#xff0c;需要使用字符串数组加入"sh", “-c”&#xff0c;具体代码示例&#xff1a; /*** MySQL数据备份…

KubeSphere 社区双周报|2024.02.29-03.14

KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书、新增的讲师证书以及两周内提交过 commit 的贡献者&#xff0c;并对近期重要的 PR 进行解析&#xff0c;同时还包含了线上/线下活动和布道推广等一系列社区动态。 本次双周报涵盖时间为&#xff1a;2024.02.29-03.14…

vue 记录一个echarts页面 单色环形饼图 多色环形饼图 柱状图加折线图 饼状图 双柱状图 雷达图 多色堆叠柱状图

“设备使用”模块没有做 因为项目不需要 仅自己记录使用 可供参考 那么上代码 <template><!--app-container--><div class"home-wrap"><div class"wrap" v-if"schoolId"><!--第一块--><div class"statis…

MongoDB从0到1:高效数据使用方法

MongoDB&#xff0c;作为一种流行的NoSQL数据库。从基础的文档存储到复杂的聚合查询&#xff0c;从索引优化到数据安全都有其独特之处。文末附MongoDB常用命令大全。 目录 1. 引言 MongoDB简介 MongoDB的优势和应用场景 2. 基础篇 安装和配置MongoDB MongoDB基本概念 使…

Win10 无法安装微软1月安全更新,出现 0x80070643 错误

出现这个问题的原因在于系统分配的“恢复分区”空间不足&#xff0c;该更新在安装时会失败。大致的思路是利用dispart工具收缩C盘空间&#xff0c;扩展该分区的空间。本人开始的“恢复分区”的空间是603MB&#xff0c;安装更新失败&#xff0c;扩充了250MB后&#xff0c;成功了…

基于springboot+mybatis调用MySQL存储过程

前言&#xff1a; 很多公司一般不使用JAVA写存储过程&#xff0c;因为写法较为复杂&#xff0c;不方便后期维护。 不排除一些公司项目会使用。 如果索引优化已经达到很好的性能&#xff0c;不建议使用。以下示例供学习参考&#xff1a; demo源码&#xff1a;https://gitee.com…

一文彻底搞懂进程间通信方式

文章目录 1. 进程间通信的概念2. 进程间通信的7种方式2.1 管道/匿名管道(pipe)2.2 有名管道(FIFO)2.3 信号(Signal)2.4 消息(Message)队列2.5 共享内存(share memory)2.6 信号量(semaphore)2.7 套接字(socket) 1. 进程间通信的概念 每个进程各自有不同的用户地址空间&#xff…

由浅到深认识C语言(14):枚举

该文章Github地址&#xff1a;https://github.com/AntonyCheng/c-notes 在此介绍一下作者开源的SpringBoot项目初始化模板&#xff08;Github仓库地址&#xff1a;https://github.com/AntonyCheng/spring-boot-init-template & CSDN文章地址&#xff1a;https://blog.csdn…

操作系统系列学习——进程同步与信号量

文章目录 前言进程同步与信号量 前言 一个本硕双非的小菜鸡&#xff0c;备战24年秋招&#xff0c;计划学习操作系统并完成6.0S81&#xff0c;加油&#xff01; 本文总结自B站【哈工大】操作系统 李治军&#xff08;全32讲&#xff09; 老师课程讲的非常好&#xff0c;感谢 【哈…

存内领域前沿,基于忆阻器的存内计算----浅析忆阻存内计算

目录 一.概念浅析 1.存内计算 2.忆阻器 3.基于忆阻器的存内计算 二.忆阻器的分类 1.磁效应忆阻器 2 .相变效应忆阻器 3 .阻变效应忆阻器 三.基于忆阻器的存内计算原理 1. 利用二值忆阻器的布尔计算 3.1R-R 逻辑运算 3.2V-R 逻辑运算 3.3V-V 逻辑运算 2. 利用模拟…

GPU密集型计算性能优化的方法和技术

对GPU密集型计算进行性能优化的方法和技术多种多样。通过一些优化策略和技术需要综合考虑应用程序的具体需求、所使用的GPU硬件、以及编程模型和库的选择。通过不断地分析和调整&#xff0c;可以实现GPU计算性能的持续提升。以下是一些常用的优化策略和技术&#xff1a; 算法优…