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

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 秒速出图!体验 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 套件产品详情。

相关实践学习
基于阿里云DeepGPU实例,用AI画唯美国风少女
本实验基于阿里云DeepGPU实例,使用aiacctorch加速stable-diffusion-webui,用AI画唯美国风少女,可提升性能至高至原性能的2.6倍。
相关文章
|
6月前
|
人工智能 自然语言处理 前端开发
AI 绘画Stable Diffusion 研究(十)sd图生图功能详解-精美二维码的制作
AI 绘画Stable Diffusion 研究(十)sd图生图功能详解-精美二维码的制作
535 1
|
7月前
|
人工智能 安全
Stable Diffusion:网页版 体验 / AI 绘图
Stable Diffusion:网页版 体验 / AI 绘图
724 0
|
9月前
|
人工智能 弹性计算 编解码
技术分享 | 如何基于阿里云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月前
英伟达推出免训练即可生成连贯图片的文生图模型ConsiStory
【2月更文挑战第3天】英伟达推出免训练即可生成连贯图片的文生图模型ConsiStory
47 1
英伟达推出免训练即可生成连贯图片的文生图模型ConsiStory
|
3月前
|
人工智能 物联网
stable-diffusion-webui教程(AI绘画真人教程)
stable-diffusion-webui教程(AI绘画真人教程)
122 1
|
5月前
|
机器学习/深度学习 人工智能 自然语言处理
超强满血不收费的AI绘图教程来了(在线Stable Diffusion一键即用)
超强满血不收费的AI绘图教程来了(在线Stable Diffusion一键即用)
381 1
|
5天前
|
运维 关系型数据库 数据库
如何在阿里云快速启动Stable Diffusion轻松玩转AI绘画
阿里云计算巢提供了Stable Diffusion快速部署及下载自定义模型功能,使用者不需要自己下载代码,不需要自己安装复杂的依赖,不需要了解Git、Python、Docker等技术,只需要在控制台图形界面点击几下鼠标就可以快速启动Stable Diffusion服务进行绘画,非技术同学也能轻松搞定。
如何在阿里云快速启动Stable Diffusion轻松玩转AI绘画
|
6月前
|
SQL 弹性计算 人工智能
文生图-AIGC:在云上从0开始搭建Stable Diffusion文生图Streamlit网页版
本文描述在阿里云上从0开始构建个人的文生图应用。网页采用streamlit实现,文生图模型使用了阿里云Lindorm AI数据服务平台上部署Stable Diffusion来实现。 Streamlit使用起来非常简便,可以让开发者快速(短则几十分钟即可)搭建一个具备公网访问能力的网页。尤其在人工智能开发上,可使用Streamlit快速搭建应用环境,让开发人员将更多精力集中在人工智能本身,本文从0开始详细讲解整个应用的构建过程,代码实现了一个简洁的具备公网访问能力的网页版文生图应用。
|
6月前
|
人工智能 物联网 机器人
还在用Lora模型?快来试试 Stable Diffusion SDXL 1.0 模型,实现绘画自由
基于阿里云PAI-DSW部署Stable Diffusion SDXL 1.0 模型,生成高质量图片
339 0
|
6月前
|
人工智能 算法
AI 绘画Stable Diffusion 研究(九)sd图生图功能详解-老照片高清修复放大(2)
AI 绘画Stable Diffusion 研究(九)sd图生图功能详解-老照片高清修复放大
607 0