秒速出图!体验 TensorRT 加速 Stable Diffusion 图像创作

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
性能测试 PTS,5000VUM额度
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
简介: 秒速出图!体验 TensorRT 加速 Stable Diffusion 图像创作

作者:顾静

TensorRT 如何加速 Stable Diffusion?


生成式 AI 图像内容生成技术近年来发展迅速,可以根据人类语言描述生成图片,在时尚、建筑、动漫、广告、游戏等领域有着广泛应用。


Stable Diffusion WebUI 是 Github 上最为热门的利用生成式 AI 进行图像生成的项目。它采用 ClipText 对文字进行编码,然后采用 UNet+Scheduler 在潜在表示空间(latent space)上进行 Diffusion,最后采用 Autoencoder Decoder 将第二步生成的扩散信息再转为图像。


Stable Diffusion Pipeline


Diffusion 模型最大的痛点是生成图片的速度过慢。Stable Diffusion 采用了多种方式加速图片生成,令实时图像生成成为可能。Stable Diffusion 使用编码器将图片从 3*512*512 转为 4*64*64,极大地降低了计算量。它在潜在表示空间(latent space)上进行 Diffusion 过程,大大减少计算复杂度,同时也能保证不错的图片生成效果。在 GPU 上大约 4s 可以生成一张描述复杂的图片。


对于很多 ToC 应用来说,一张图片生成需要 4s 耗时仍然过长。TensorRT 是由 NVIDIA 提供的高性能深度学习推理框架,通过优化编译器和 runtime 来提升延迟敏感应用的并发度。TensorRT 可以优化几乎所有的深度神经网络,包括 CNN、RNN 和 Transformer。具体优化措施包括以下 6 点。


  • 减少混合精度,支持 FP32、TF32、FP16 和 INT8
  • 优化 GPU 内存带宽
  • 自动调整核函数,为目标 GPU 选择最佳的算法
  • 动态 Tensor 内存分配,提升内存使用效率
  • 可扩展设计以处理多个计算流
  • 时间融合:随着时间步长优化 RNN


TensorRT 的基本流程如下图所示,可以分为构建期和运行期。


TensorRT Pipeline


基于阿里云容器服务 ACK 的实战体验


云原生 AI 套件

云原生 AI 套件是阿里云容器服务 ACK 提供的云原生 AI 技术和产品方案,帮助企业更快、更高效地落地云原生 AI 系统。


本文将介绍如何基于阿里云容器服务 ACK 云原生 AI 套件,利用 TensorRT 加速 Stable Diffusion 图像生成。


环境配置

1. 参考文档安装云原生 AI 套件[1]


2. 登陆容器服务管理控制台[2],在左侧导航栏选择集群 > 应用 > 云原生 AI 套件。等待开发控制台准备就绪后,单击开发控制台。


3. 在开发控制台左侧,选择 Notebook,在 Notebook 页面右上角,单击创建 Notebook 创建新的 Notebook 环境。Notebook 资源需要 CPU:16C,内存:32G,GPU 显存:16GB。



准备 Stable Diffusion + TensorRT 环境

1. 在新建的 Notebook 中输入以下命令安装所需依赖。


! pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
! pip install --upgrade "torch <2.0.0"
! pip install --upgrade "tensorrt>=8.6"
! pip install --upgrade "accelerate" "diffusers==0.21.4" "transformers"
! pip install --extra-index-url https://pypi.ngc.nvidia.com --upgrade "onnx-graphsurgeon" "onnxruntime" "polygraphy"
! pip install  polygraphy==0.47.1 -i https://pypi.ngc.nvidia.com


2. 下载数据集


import diffusers
import torch
import tensorrt
from diffusers.pipelines.stable_diffusion import StableDiffusionPipeline
from diffusers import DDIMScheduler
# 默认从huggingface下载,如果机器无法访问huggingface,也可以使用本地模型。
# 如使用本地模型,替换runwayml/stable-diffusion-v1-5为本地模型地址即可
model_path = "runwayml/stable-diffusion-v1-5"
scheduler = DDIMScheduler.from_pretrained(model_path, subfolder="scheduler")


3. 使用 TensorRT 生成序列化网络 (计算图 TRT 的内部表示)


# 使用自定义的pipeline
pipe_trt = StableDiffusionPipeline.from_pretrained(
    model_path,
    custom_pipeline="stable_diffusion_tensorrt_txt2img",
    revision='fp16',
    torch_dtype=torch.float16,
    scheduler=scheduler,
)
# 设置缓存地址
# 会在缓存地址下生成engine文件夹,包含clip.plan、unet.plan、vae.plan文件。A10上首次生成plan文件需要约35分钟
pipe_trt.set_cached_folder(model_path, revision='fp16')
pipe_trt = pipe_trt.to("cuda")


4. 使用编译后的模型进行推理


# 生成图片
prompt = "A beautiful ship is floating in the clouds, unreal engine, cozy indoor lighting, artstation, detailed, digital painting, cinematic"
neg_prompt = "ugly"
import time
start_time = time.time()
image = pipe_trt(prompt, negative_prompt=neg_prompt).images[0]
end_time = time.time()
print("time: "+str(round(end_time-start_time, 2))+"s")
display(image)


生成单张图片耗时为 2.31s。


性能测试

性能测试基于 Github 上的 lambda-diffusers[3]项目,prompt 数量为 1,batch_size 为 50,重复 100 次。GPU 型号为 A10,对应的 ECS 规格为 ecs.gn7i-c8g1.2xlarge。




从实验结果看,开启 xformers 和 TensorRT 优化后,Stable Diffusion 图片生成时间平均减少 44.7%,显存减少 37.6%。


欢迎扫码添加阿里云 ACK 云原生 AI 套件微信小助手邀您进入云原生 AI 套件微信交流群,或扫描右侧钉钉群码进入钉钉群。



参考文献:

TensorRT

https://github.com/NVIDIA/TensorRT

Stable Diffusion WebUI

https://github.com/AUTOMATIC1111/stable-diffusion-webui

利用 GPU 加速生成式 AI 图像内容生成

https://www.nvidia.cn/webinars/sessions/?session_id=230919-29256


相关链接:

[1] 安装云原生 AI 套件

https://help.aliyun.com/zh/ack/cloud-native-ai-suite/user-guide/deploy-the-cloud-native-ai-suite?spm=a2c4g.11186623.0.0.7e223d92U1aVNf

[2] 容器服务管理控制台

https://account.aliyun.com/login/login.htm?oauth_callback=https%3A%2F%2Fcs.console.aliyun.com%2F

[3] lambda-diffusers

https://github.com/LambdaLabsML/lambda-diffusers


点击此处,了解 ACK 云原生 AI 套件产品详情。

相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
相关文章
|
人工智能 自然语言处理 前端开发
AI 绘画Stable Diffusion 研究(十)sd图生图功能详解-精美二维码的制作
AI 绘画Stable Diffusion 研究(十)sd图生图功能详解-精美二维码的制作
839 1
|
人工智能 安全
Stable Diffusion:网页版 体验 / AI 绘图
Stable Diffusion:网页版 体验 / AI 绘图
1415 0
|
人工智能 弹性计算 编解码
技术分享 | 如何基于阿里云AIACC加速Stable-Diffusion AI绘画
AIACC是基于阿里云IaaS资源推出的神龙AI性能加速套件,用于优化基于AI主流计算框架搭建的模型,能显著提升训练和推理性能。AIACC神龙AI推理加速套件由AIACC-Torch(Pytorch推理加速引擎)、AIACC-MLIR(MLIR推理加速引擎)、AIACC-HRT(AIACC算子深度加速引擎)等组件构成。AIACC神龙AI性能加速套件能够为Stable-Diffusion提供加速优化支持,在512x512分辨率下,可将单张图片的延迟从2秒降低至0.88秒,吞吐提速至原来的2.2倍。
技术分享 | 如何基于阿里云AIACC加速Stable-Diffusion AI绘画
|
2月前
|
人工智能
添加一个Stable Difussion图像生成应用,通过向AI助手简单的提问,即可快速搭建Stable Diffusion应用至自己的网站中,大幅提升开发效率。
添加一个Stable Difussion图像生成应用,通过向AI助手简单的提问,即可快速搭建Stable Diffusion应用至自己的网站中,大幅提升开发效率。
|
6月前
|
前端开发 异构计算 API
探索Stable Diffusion:从零开始的代码接入创意图像生成指南
探索Stable Diffusion,了解这一图像生成技术,适用于创意设计、内容生成和前端应用。本文从基本概念到实战,教你如何用Python和相关库搭建环境,通过GPU加速,生成基于文本提示的图像。学习多样性和风格融合技巧,解决实践中遇到的问题,如内存溢出和图像模糊。前端开发者可将模型部署为API,实现实时动态图像生成,提升用户体验。一起发掘Stable Diffusion在艺术和设计领域的无限潜力!
291 2
|
7月前
|
人工智能 物联网
stable-diffusion-webui教程(AI绘画真人教程)
stable-diffusion-webui教程(AI绘画真人教程)
221 1
|
人工智能 文件存储 对象存储
Stable Diffusion 模型库,AIGC 画风任你选
Stable Diffusion(简称 SD)模型库包含写实、国漫、科技等几十种风格。可以让用户一键转存到自己的存储空间,而后直接挂载到 PAl 或 FC 下进行推理和训练。无需复杂漫长的下载和上传步骤,即可获得多种模型的使用体验,实现云上 AIGC 的快速搭建。
51779 22
Stable Diffusion 模型库,AIGC 画风任你选
|
机器学习/深度学习 人工智能 自然语言处理
超强满血不收费的AI绘图教程来了(在线Stable Diffusion一键即用)
超强满血不收费的AI绘图教程来了(在线Stable Diffusion一键即用)
572 1
|
人工智能 物联网 机器人
还在用Lora模型?快来试试 Stable Diffusion SDXL 1.0 模型,实现绘画自由
基于阿里云PAI-DSW部署Stable Diffusion SDXL 1.0 模型,生成高质量图片
497 0
|
人工智能 编解码 数据可视化
Stable Diffusion基础:精准控制之ControlNet
在AI绘画中精确控制图片的生成是一件比较困难的事情,炼丹师们经常需要大量抽卡才能得到一张满意的图片,不过随着 ControlNet 的诞生,这一问题得到了很大的缓解。 ControlNet 提供了十几种控制网络模型,有的可以控制画面的结构,有的可以控制人物的姿势,还有的可以控制图片的画风,这对于提高绘画质量、提升生图速度特别有用;基于 ControlNet 的能力,炼丹师们还可以将AI绘画拓展到更多的应用场景,比如艺术二维码、光影文字、线稿上色、老照片修复、图片风格转绘等等。
666 0
Stable Diffusion基础:精准控制之ControlNet