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

news2024/12/26 11:55:30

在 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-branch

cd 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-branch

cd 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.coloradmin.cn/o/1523420.html

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

相关文章

整型溢出问题及解决之道

【题目描述】 例题2-2 3n&#xff0b;1问题 猜想&#xff1a;对于任意大于1的自然数n&#xff0c;若n为奇数&#xff0c;则将n变为3n&#xff0b;1&#xff0c;否则变为n的一半。 经过若干次这样的变换&#xff0c;一定会使n变为1。例如&#xff0c;3→10→5→16→8→4→2→…

基于Spring Boot+Vue的校园二手交易平台

目录 一、 绪论1.1 开发背景1.2 系统开发平台1.3 系统开发环境 二、需求分析2.1 问题分析2.2 系统可行性分析2.2.1 技术可行性2.2.2 操作可行性 2.3 系统需求分析2.3.1 学生功能需求2.3.2 管理员功能需求2.3.3游客功能需求 三、系统设计3.1 功能结构图3.2 E-R模型3.3 数据库设计…

【蓝桥杯每日一题】填充颜色超详细解释!!!

为了让蓝桥杯不变成蓝桥悲&#xff0c;我决定在舒适的周日再来一道题。 例&#xff1a; 输入&#xff1a; 6 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1 0 0 1 1 1 0 0 0 1 1 0 0 0 0 1 1 1 1 1 1 1 输出&#xff1a; 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1 2 2 1 1 1 2 2 2 1 1 2 2 2 2 1 1…

Requests教程-17-请求代理设置

上一小节我们学习了requests解决乱码的方法&#xff0c;本小节我们讲解一下requests设置代理的方法。 代理基本原理 代理实际上指的就是代理服务器&#xff0c; 英文叫作proxy server &#xff0c;它的功能是代理网络用户去取得网络信息。形象地说&#xff0c;它是网络信息的中…

【DFS深度优先搜索专题】【蓝桥杯备考训练】:迷宫、奶牛选美、树的重心、大臣的旅费、扫雷【已更新完成】

目录 1、迷宫&#xff08;《信息学奥赛一本通》&#xff09; 2、奶牛选美&#xff08;USACO 2011 November Contest Bronze Division&#xff09; 3、树的重心&#xff08;模板&#xff09; 4、大臣的旅费&#xff08;第四届蓝桥杯省赛Java & C A组&#xff09; 5、扫…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:TimePicker)

时间选择组件&#xff0c;根据指定参数创建选择器&#xff0c;支持选择小时及分钟。 说明&#xff1a; 该组件从API Version 8开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 无 接口 TimePicker(options?: TimePickerOptions)…

CSS学习(1)-选择器

一、基本选择器 1. 通配选择器 作用&#xff1a;可以选中所有的 HTML 元素。 语法&#xff1a; * { 属性名: 属性值; }举例&#xff1a; /* 选中所有元素 */ * { color: orange; font-size: 40px; }主要用于&#xff1a;清除样式。 2. 元素选择器 作用&#xff1a;为页面…

代码随想录 -- 回溯算法

文章目录 回溯算法理论什么是回溯法回溯法的效率回溯法解决的问题理解回溯法回溯法模板 组合问题I描述题解优化 组合总和III描述题解 电话号码的字母组合描述题解 组合总和描述题解 组合总和II描述题解 分割回文串描述题解 复原IP地址描述题解 子集描述题解 子集II描述题解 递增…

【JAVA】JAVA方法的学习和创造

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法|MySQL| ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不…

考研C语言复习进阶(2)

目录 1. 字符指针 2. 指针数组 3. 数组指针 3.1 数组指针的定义 3.2 &数组名VS数组名 4. 函数指针 5. 函数指针数组 6. 指向函数指针数组的指针 7. 回调函数 8.三步辗转法 9. 指针和数组笔试题解析 10. 指针笔试题 指针的主题&#xff0c;我们在初级阶段的《指…

Parade Series - Web Streamer Low Latency

Parade Series - FFMPEG (Stable X64) 延时测试秒表计时器 ini/config.ini [system] homeserver storestore\nvr.db versionV20240312001 verbosefalse [monitor] listrtsp00,rtsp01,rtsp02 timeout30000 [rtsp00] typelocal deviceSurface Camera Front schemartsp ip127…

mac启动skywalking报错

这个命令显示已经成功 但是日志报错了以上内容。 然后去修改。vim .bash_profile 查看全局变量&#xff0c;这个jdk却是有2个。所以这个问题没解决。

豆瓣电影信息爬取与可视化分析

目录 一、项目背景 二、代码 三、总结 一、项目背景 &#xff08;1&#xff09;利用requests库采集豆瓣网分类排行榜 (“https://movie.douban.com/chart”)中各分类类别前100部电影的相关信息并存储为csv文件。 &#xff08;2&#xff09;利用获取的13个分类类别共1300部电…

C#,人工智能,机器学习,聚类算法,训练数据集生成算法、软件与源代码

摘要:本文简述了人工智能的重要分支——机器学习的核心算法之一——聚类算法,并用C#实现了一套完全交互式的、可由用户自由发挥的,适用于聚类算法的训练数据集生成软件——Clustering。用户使用鼠标左键(拖动)即可生成任意形状,任意维度,任意簇数及各种数据范围的训练数…

第十六个实验:FOR循环生成随机数

实验内容&#xff1a; 用For循环生成10个1-2之间的随机数 然后打印出来 实验步骤; 视频&#xff1a; 教学视频

外卖点餐系统 |基于springboot框架+ Mysql+Java+JSP技术+Tomcat的外卖点餐系统 设计与实现(可运行源码+设计文档)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 目录 前台功能效果图 骑手功能模块 商家功能模块 管理员功能登录前台功能效果图 用户功能模块 系统功能设…

Dynamo PythonScript 代码速查手册By九哥

你好&#xff0c;这里是 BIM 的乐趣&#xff0c;我是九哥 今天给大家带来的是我的知识工程的第二套知识库&#xff0c;这套知识库不是教程&#xff0c;是一套完整的笔记&#xff0c;里面包含了大量的 Python 代码。 当然这里也没有实现太多的具体逻辑&#xff0c;单纯的是通过 …

可视化软件:第一原理计算/VASP + 结构预测/USPEX

分享一篇 VASPUSPEX 的可视化软件。 感谢论文的原作者&#xff01; 主要内容 “流行的第一原理仿真代码 Vienna Ab initio Simulation Package (VASP) 和晶体结构预测 (CSP) 包、Universal Structure Predictor: Evolutionary Xtallography (USPEX) 已集成到 GDIS 可视化软件…

项目分享--NO.1

搭建高可用的web集群.部署网站 包含数据库,ceph/nfs,haproxy,keepalived,ansible部署 1,配置ansible管理环境 创建工作目录,编写ansible配置文件,和主机清单文件,yum配置文件 将yum文件到控制机上,然后用模块上传到被管理机器上 #vim 01-upload-repo.yml --- - name: confi…

【开源鸿蒙】为QEMU RISC-V虚拟平台构建OpenHarmony轻量系统

文章目录 一、背景介绍二、准备OpenHarmony源代码三、准备hb命令3.1 安装hb命令3.2 检查hb命令 四、编译RISC-V架构的OpenHarmony轻量系统4.1 设置hb构建目标4.2 启动hb构建过程 五、问题解决5.1 hb set 报错问题解决 六、参考链接 开源鸿蒙坚果派&#xff0c;学习鸿蒙一起来&a…