使用 PAI-Blade 优化 Stable Diffusion 推理流程

简介: PAI-Blade是 PAI 推出的通用推理优化工具,可以通过模型系统联合优化,使模型达到最优推理性能。

背景

AIGC是人工智能计算领域里发展迅速的重要业务。Stable Diffusion 是其中最热门的开源模型,受到广泛关注。然而,随着应用场景不断扩大,Stable Diffusion所面临的推理时延和计算成本问题也越来越突出。

简介

PAI-Blade是 PAI 推出的通用推理优化工具,可以通过模型系统联合优化,使模型达到最优推理性能。PAI-Blade依托于完全动态尺寸的AI编译器BladeDISC 基于深度学习自动调度的高性能计算库BlaDNN, 为包括图像生成模型Stable Diffsuion, 大语言模型LLM, 大规模稀疏推荐模型CTR, 语音识别模型ASR等等在内的众多模型提供自动的高性能推理优化。

BladeDISC 是一款支持完全动态尺寸的AI编译器,前端支持Pytorch和Tensorflow模型。对于Pytorch模型能够支持 TorchScript 和 TorchDynamo 两种输入模式,后端通过 AStitch 大尺度算子融合技术和高效的 codegen 逻辑提升模型访存密集算子的执行效率。BladeDISC现已在github开源,项目地址:https://github.com/alibaba/BladeDISC

BlaDNN 是基于深度学习自动调度的高性能计算库。BlaDNN 作为Ansor的升级版,不仅生成的kernel性能超过Ansor,而且可以完全依赖DNN自动调度而不使用Tuning调优,使得Dynamic Shape业务场景的在线自动调度成为可能,基于DNN自动调度生成的GPU计算密集算子的平均性能达到极致tuning性能的99.39%,通过模型系统联合优化DNN推理延时低至2us, 并且只使用一个CPU Core,从而不会对GPU模型本身的性能造成任何抖动。

通过采用 PAI-Blade 加速推理优化技术,对访存密集型算子进行大尺度融合及优化代码生成,对计算密集型算子进行自动调度,可以大幅度降低Stable Diffusion的推理延迟和显存占用,从而减少计算成本。使用 PAI-Blade 优化Stable Diffusion 具有以下三点优势:

  1. 高性能,使用Blade可以降低 Text2Img、Img2Img 等推理流程的端到端延迟 2.42-3.05 倍,同时可降低省显存占用至多 5.27 倍,超过TensorRT-8.5等业内SOTA优化手段。
  2. 完全动态shape支持,一次优化后,可以支持任意形状、batch size的输入。
  3. 易用性、可扩展性:仅需数行代码即可在多类pipeline中启用 Blade优化,同时能支持LoRA等推理方案的优化。

使用示例

本文接下来以社区流行的 "runwayml/stable-diffusion-v1-5" 的 Text2Img pipeline 为例,详细介绍 PAI-Blade 在各类使用场景下的使用方法。

环境安装

下述示例完整的运行脚本及相关环境已集成到 registry.cn-beijing.aliyuncs.com/blade_demo/blade_diffusion docker 中。在该docker中,直接通过 python /blade/blade_diffusion.py 即可运行推理示例。

官方模型优化

使用 PAI-Blade 优化 Stable Diffusion 模型可以分为以下几个步骤。

首先,加载预训练的模型。

from diffusers import StableDiffusionPipeline
device = torch.device("cuda:0")
pipe = StableDiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5", revision="fp16", torch_dtype=torch.float16).to(device)

第二步,使用 PAI-Blade 进行优化。注意,由于 PAI-Blade 是完全动态shape的优化工具,优化完成后可使用任意shape进行推理。

import torch_blade
opt_cfg = torch_blade.Config()
opt_cfg.enable_fp16 = True
with opt_cfg, torch.no_grad():
    encoder = blade_optimize(pipe.text_encoder, model_inputs=encoder_inputs, allow_tracing=True)
    unet = blade_optimize(pipe.unet, model_inputs=unet_inputs, allow_tracing=True)
    decoder = blade_optimize(pipe.vae.decoder, model_inputs=decoder_inputs, allow_tracing=True)

最后,使用优化好的模型替换原始模型,后续即可以原始 pipeline 同样的方式进行推理。

@dataclass
class UNet2DConditionOutput:
    sample: torch.FloatTensor
class TracedUNet(torch.nn.Module):
    def __init__(self):
        super().__init__()
        self.config = pipe.unet.config
        self.in_channels = pipe.unet.in_channels
        self.device = pipe.unet.device
    def forward(self, latent_model_input, t, encoder_hidden_states, **kwargs):
        sample = unet(latent_model_input.half(), t.half(), encoder_hidden_states.half())["sample"]
        return UNet2DConditionOutput(sample=sample)
class TracedEncoder(torch.nn.Module):
    def __init__(self):
        super().__init__()
        self.config = pipe.text_encoder.config
        self.device = pipe.text_encoder.device
        self.dtype = torch.half
    def forward(self, input_ids, **kwargs):
        embeddings = encoder(input_ids.long())
        return [embeddings["last_hidden_state"]]
class TracedDecoder(torch.nn.Module):
    def forward(self, input):
        return decoder(input.half())
pipe.text_encoder = TracedEncoder()
pipe.unet = TracedUNet()
pipe.vae.decoder = TracedDecoder()

A100 性能对比

image size

samplesteps

Time of Pytorch(s)

Time of PAI-Blade(s)

speedup

Pytorch memory usage (GB)

PAI-Blade memory usage (GB)

1024x1024

50

13.26

4.34

3.06X

32.91

6.25

768x768

50

5.65

2.00

2.83X

14.99

5.91

512x512

50

2.24

0.84

2.67X

6.60

5.42

A10 性能对比

image size

samplesteps

Time of Pytorch(s)

Time of PAI-Blade(s)

speedup

Pytorch memory usage (GB)

PAI-Blade memory usage (GB)

1024x1024

50

OOM

13.86

-

OOM

6.89

768x768

50

13.13

5.61

2.34X

12.60

6.22

512x512

50

4.53

2.11

2.15X

6.28

5.47

推理结果验证

使用PAI-Blade优化后,生成的图像与Pytorch原始输出对比,观察优化结果是否正确。左图为Pytorch eager模式输出,右图为PAI-Blade优化后的模型输出。

1.png


已验证的pipeline类型

  1. StableDiffusionPipeline
  2. StableDiffusionImg2ImgPipeline
  3. StableDiffusionInpaintPipeline
  4. AltDiffusionPipeline

LoRA优化

LoRA 是指在原始模型基础上,添加额外的低秩矩阵来微调预训练的模型,并且只训练那些新添加的权重,从而大幅降低微调成本。可以通过 diffusers官方训练代码 微调得到 LoRA 权重。diffusers 加载使用 LoRA 后,模型运行方式与原始模型略有不同,带来额外计算开销。

PAI-Blade 目前已适配 huggingface/diffusers 中 LoRA 优化方式。同样的,Blade 针对同一pipeline,只需优化一次,即可使用任意的 LoRA 权重进行推理。我们将在下一篇文章中介绍PAI-Blade 优化 LoRA 的使用方式,敬请期待。


展望

目前,Stable Diffusion相关技术仍在不断演化中,PAI-Blade 团队也时刻关注社区趋势,将优化适配到各种工具中去。目前团队主要集中在:

  1. 将相关优化集成到 stable-diffusion-webui 中;
  2. 优化 finetune 训练速度。



【往期回顾】:

  1. 快速玩转 Llama2!阿里云机器学习 PAI 推出最佳实践
  2. 【ACL 2023】面向轻量化文图检索的Dual-Encoder模型蒸馏算法ConaCLIP
  3. 【ACL2023】基于电商多模态概念知识图谱增强的电商场景图文模型FashionKLIP
相关实践学习
使用PAI+LLaMA Factory微调Qwen2-VL模型,搭建文旅领域知识问答机器人
使用PAI和LLaMA Factory框架,基于全参方法微调 Qwen2-VL模型,使其能够进行文旅领域知识问答,同时通过人工测试验证了微调的效果。
机器学习概览及常见算法
机器学习(Machine Learning, ML)是人工智能的核心,专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能,它是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。 本课程将带你入门机器学习,掌握机器学习的概念和常用的算法。
相关文章
|
10月前
|
机器学习/深度学习 算法 算法框架/工具
MINUN: 微控制器上的精确机器学习推理——论文阅读
MINUN是一个专为微控制器设计的高效机器学习推理框架,能精确解决TinyML中的三大挑战:数字表示参数化、位宽分配优化和内存碎片管理。它支持如Arduino和STM32等低功耗设备,显著减少内存占用,同时保持模型精度。
1033 122
|
10月前
|
机器学习/深度学习 存储 TensorFlow
TensorFlow Lite Micro:嵌入式TinyML系统上的机器学习推理框架——论文深度解析
TensorFlow Lite Micro(TFLM)是专为嵌入式系统设计的轻量级机器学习推理框架,适用于仅有几十KB内存的微控制器。它通过极简架构、模块化设计和内存优化策略,在资源受限设备上高效运行TinyML模型,广泛应用于关键词检测、传感器分析、预测性维护等领域。TFLM支持跨平台部署,并允许硬件厂商提供定制优化,兼顾灵活性与性能。
2736 6
|
人工智能 边缘计算 前端开发
人工智能平台 PAI DistilQwen2.5-DS3-0324发布:知识蒸馏+快思考=更高效解决推理难题
DistilQwen 系列是阿里云人工智能平台 PAI 推出的蒸馏语言模型系列,包括DistilQwen2、DistilQwen2.5、DistilQwen2.5-R1 等。DistilQwen2.5-DS3-0324 系列模型是基于 DeepSeek-V3-0324 通过知识蒸馏技术并引入快思考策略构建,显著提升推理速度,使得在资源受限的设备和边缘计算场景中,模型能够高效执行复杂任务。实验显示,DistilQwen2.5-DS3-0324 系列中的模型在多个基准测试中表现突出,其32B模型效果接近参数量接近其10倍的闭源大模型。
|
缓存 并行计算 测试技术
阿里云PAI-全模态模型Qwen2.5-Omni-7B推理浅试
阿里云PAI-全模态模型Qwen2.5-Omni-7B推理浅试
3138 12
|
机器学习/深度学习 人工智能 运维
【人工智能技术专题】「入门到精通系列教程」打好AI基础带你进军人工智能领域的全流程技术体系(机器学习知识导论)(二)
【人工智能技术专题】「入门到精通系列教程」打好AI基础带你进军人工智能领域的全流程技术体系(机器学习知识导论)
626 1
|
机器学习/深度学习 人工智能 自然语言处理
【人工智能技术专题】「入门到精通系列教程」打好AI基础带你进军人工智能领域的全流程技术体系(机器学习知识导论)(一)
【人工智能技术专题】「入门到精通系列教程」打好AI基础带你进军人工智能领域的全流程技术体系(机器学习知识导论)
1104 1
|
人工智能 容灾 Serverless
AI推理新纪元,PAI全球化模型推理服务的创新与实践
本次分享主题为“AI推理新纪元,PAI全球化模型推理服务的创新与实践”,由阿里云高级产品经理李林杨主讲。内容涵盖生成式AI时代推理服务的变化与挑战、play IM核心引擎的优势及ES专属网关的应用。通过LM智能路由、多模态异步生成等技术,PAI平台实现了30%以上的成本降低和显著性能提升,确保全球客户的业务稳定运行并支持异地容灾,目前已覆盖16个地域,拥有10万张显卡的推理集群。
|
异构计算 索引
单卡A100实现百万token推理,速度快10倍,这是微软官方的大模型推理加速
【7月更文挑战第24天】针对大语言模型(LLM)处理长上下文时的计算瓶颈,微软推出MInference,基于动态稀疏注意力加速预填充,使8B参数模型处理1M token从30分钟降至3分钟,推理延迟降低10倍。通过识别注意力矩阵模式(A形、斜线、块稀疏),仅计算关键权重,无需修改预训练或微调。实验证明,MInference在多个任务和模型上保持准确度,但可能不适用所有LLM类型,存在轻微性能损失风险。
1034 17
|
机器学习/深度学习 人工智能 分布式计算
人工智能平台PAI产品使用合集之在maxcompute上跑模型,如何在本地进行推理
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
人工智能平台PAI产品使用合集之在maxcompute上跑模型,如何在本地进行推理
|
机器学习/深度学习 TensorFlow 算法框架/工具
全面解析TensorFlow Lite:从模型转换到Android应用集成,教你如何在移动设备上轻松部署轻量级机器学习模型,实现高效本地推理
【8月更文挑战第31天】本文通过技术综述介绍了如何使用TensorFlow Lite将机器学习模型部署至移动设备。从创建、训练模型开始,详细演示了模型向TensorFlow Lite格式的转换过程,并指导如何在Android应用中集成该模型以实现预测功能,突显了TensorFlow Lite在资源受限环境中的优势及灵活性。
2251 1

热门文章

最新文章

相关产品

  • 人工智能平台 PAI