stable-fast

stable-fast

优化HuggingFace Diffusers推理性能的轻量级框架

stable-fast是一个优化HuggingFace Diffusers推理性能的轻量级框架,支持NVIDIA GPU。相比TensorRT和AITemplate需要几十分钟的编译时间,stable-fast仅需几秒钟即可完成模型编译。主要特色包括动态形状、低精度计算和多种算子融合。它还兼容ControlNet和LoRA,并支持最新的StableVideoDiffusionPipeline,是加速PyTorch推理的有效工具。

Stable FastDiffusersPyTorchCUDATorchScriptGithub开源项目

🚀稳定快速

车轮 上传 Python 包 在 Colab 中打开

注意

stable-fast 的积极开发已暂停。我目前正在基于新的 torch._dynamo 项目,目标是如 stable-cascadeSD3Sora 等新的模型。 它将会更快、更灵活,并且支持更多的硬件后端,而不是 CUDA

欢迎联系。

Discord 频道

stable-fast 在__所有__类型的扩散器模型上实现了 SOTA 推理性能,即使是最新的 StableVideoDiffusionPipeline。 而且与需要几十分钟编译模型的 TensorRTAITemplate 不同,stable-fast 只需几秒钟即可编译模型。 stable-fast 还支持开箱即用的 动态形状LoRAControlNet

模型torchtorch.compileAIToneflowTensorRTstable-fast
SD 1.5 (ms)1897151011581003991995
SVD-XT (s)837047

注意: 在基准测试期间,TensorRT 使用 static batch sizeCUDA Graph enabled 测试,而 stable-fast 运行时使用动态形状。

简介

这是什么?

stable-fast 是一个超轻量的推理优化框架,针对 HuggingFace DiffusersNVIDIA GPUs 上进行优化。 stable-fast 通过利用一些关键技术和功能提供超快速的推理优化:

  • CUDNN 卷积融合: stable-fast 实现了一系列全功能和完全兼容的 CUDNN 卷积融合算子,可用于所有类型的 Conv + Bias + Add + Act 计算模式组合。
  • 低精度和融合 GEMM: stable-fast 实现了一系列融合 GEMM 操作符,用 fp16 精度计算,比 PyTorch 的默认设置要快(读取和写入使用 fp16,计算使用 fp32)。
  • 融合线性 GEGLU: stable-fast 可以将 GEGLU(x, W, V, b, c) = GELU(xW + b) ⊗ (xV + c) 融合成一个 CUDA 内核。
  • NHWC 和融合 GroupNorm: stable-fast 使用 OpenAI 的 Triton 实现了高度优化的融合 NHWC GroupNorm + Silu 操作符,消除了内存格式变换操作的需求。
  • 完全跟踪模型: stable-fast 改进了 torch.jit.trace 接口,使其更适用于跟踪复杂模型。几乎所有 StableDiffusionPipeline/StableVideoDiffusionPipeline 的部分都可以被跟踪并转换为 TorchScript。它比 torch.compile 更稳定,并且比 torch.compile 拥有显著更低的 CPU 开销,并支持 ControlNetLoRA
  • CUDA 图: stable-fast 可以将 UNetVAETextEncoder 捕获为 CUDA 图格式,从而减少 batch size 较小时的 CPU 开销。该实现还支持动态形状。
  • 融合多头注意力: stable-fast 使用 xformers 并使其与 TorchScript 兼容。

我的下一个目标是保持 stable-fast 作为 diffusers 的最快推理优化框架之一,同时 为 transformers 提供速度提升和 VRAM 减少。 实际上,我已经使用 stable-fast 优化了大语言模型 (LLMs) 并实现了显著的速度提升。 但我仍需要一些工作来使其更加稳定和易用,并提供一个稳定的用户接口。

与其他加速库的不同之处

  • 快速: stable-fast 专门针对 HuggingFace Diffusers 进行了优化。它在许多库中实现了高性能表现。并且它提供非常快的编译速度,只需几秒钟。它在编译时间上显著比 torch.compileTensorRTAITemplate 更快。
  • 最小化: stable-fast 作为 PyTorch 的插件框架工作。它利用现有的 PyTorch 功能和基础设施,兼容其他加速技术,以及流行的微调技术和部署解决方案。
  • 最大兼容性: stable-fast 与各种类型的 HuggingFace DiffusersPyTorch 版本兼容。它还兼容 ControlNetLoRA。甚至开箱即用地支持最新的 StableVideoDiffusionPipeline

安装

注意: stable-fast 目前仅在 LinuxWindows WSL2 上测试。 首先需要安装具有 CUDA 支持的 PyTorch(建议版本从 1.12 到 2.1)。

我只在 torch>=2.1.0xformers>=0.0.22triton>=2.1.0 上测试了 stable-fast,运行在 CUDA 12.1Python 3.10 上。 其他版本可能也可以构建和运行成功,但不保证。

安装预构建包

Releases Page 下载与系统对应的轮子文件,并使用 pip3 install <wheel file> 安装。

目前有 LinuxWindows 版的轮子文件。

# 将 cu121 替换为你的 CUDA 版本,并将 <wheel file> 替换为轮子文件的路径。 # 确保轮子文件与你的 PyTorch 版本兼容。 pip3 install --index-url https://download.pytorch.org/whl/cu121 \ 'torch>=2.1.0' 'xformers>=0.0.22' 'triton>=2.1.0' 'diffusers>=0.19.3' \ '<wheel file>'

从源码安装

# 确保已安装 CUDNN/CUBLAS。 # https://developer.nvidia.com/cudnn # https://developer.nvidia.com/cublas # 首先安装具有 CUDA 的 PyTorch 及其他包。 # Windows 用户:可能无法使用 Triton,你可以跳过它。 # 注意:'wheel' 是必须项,否则在构建时会遇到 `No module named 'torch'` 错误。 pip3 install wheel 'torch>=2.1.0' 'xformers>=0.0.22' 'triton>=2.1.0' 'diffusers>=0.19.3' # (可选)让构建更快。 pip3 install ninja # 如果在不同的 GPU 类型上运行和构建,请设置 TORCH_CUDA_ARCH_LIST。 # 你也可以从 PyPI 安装最新的稳定版本。 # pip3 install -v -U stable-fast pip3 install -v -U git+https://github.com/chengzeyi/stable-fast.git@main#egg=stable-fast # (这可能需要几十分钟)

注意: 在 sfast.compilers 之外的任何使用不保证向后兼容。

注意: 为了获得最佳性能,xformers 和 OpenAI 的 triton>=2.1.0 需要安装和启用。 你可能需要从源码构建 xformers 以使其与 PyTorch 兼容。

使用

优化 StableDiffusionPipeline

stable-fast 可以直接优化 StableDiffusionPipelineStableDiffusionPipelineXL

import time import torch from diffusers import (StableDiffusionPipeline, EulerAncestralDiscreteScheduler) from sfast.compilers.diffusion_pipeline_compiler import (compile, CompilationConfig) def load_model(): model = StableDiffusionPipeline.from_pretrained( 'runwayml/stable-diffusion-v1-5', torch_dtype=torch.float16) model.scheduler = EulerAncestralDiscreteScheduler.from_config( model.scheduler.config) model.safety_checker = None model.to(torch.device('cuda')) return model model = load_model() config = CompilationConfig.Default() # xformers 和 Triton 建议启用以获得最佳性能。 try: import xformers config.enable_xformers = True except ImportError: print('xformers 未安装,跳过') try: import triton config.enable_triton = True except ImportError: print('Triton 未安装,跳过') # CUDA 图建议用于小 batch size 和小分辨率以减少 CPU 开销。 # 但它可能会增加 GPU 内存使用量。 # 对于 StableVideoDiffusionPipeline,这不是必须的。 config.enable_cuda_graph = True model = compile(model, config) kwarg_inputs = dict( prompt= '(杰作:1.2), 最优质量, 杰作, 最佳详细面部, 一个漂亮的女孩', height=512, width=512, num_inference_steps=30, num_images_per_prompt=1, ) # 注意: 预热它。 # 最初的调用将触发编译,可能非常慢。 # 之后,它应该非常快。 for _ in range(3): output_image = model(**kwarg_inputs).images[0] # 看看它! # 注意: 由于 CUDA 的异步特性,进度条可能不正确工作。 begin = time.time() output_image = model(**kwarg_inputs).images[0] print(f'推理时间: {time.time() - begin:.3f}s') # 在终端中查看它! from sfast.utils.term_image import print_image print_image(output_image, max_width=80)

更多详情参见 examples/optimize_stable_diffusion_pipeline.py

你可以查看这个 Colab,了解它在 T4 GPU 上的工作方式:在 Colab 中打开

优化 LCM Pipeline

stable-fast 可以优化最新的 latent consistency model pipeline 并实现显著的速度提升。

更多详情参见 examples/optimize_lcm_pipeline.py,了解如何使用 LCM LoRA 优化普通的 SD 模型。 更多详情参见 examples/optimize_lcm_pipeline.py,了解如何优化独立的 LCM 模型。

优化 StableVideoDiffusionPipeline

stable-fast 可以优化最新的 StableVideoDiffusionPipeline 并实现 2x 速度提升

更多详情参见 examples/optimize_stable_video_diffusion_pipeline.py

动态切换 LoRA

动态切换 LoRA 是支持的,但需要一些额外的工作。 这是可能的,因为编译的图和 CUDA 图 与原始的 UNet 模型共享相同的底层数据(指针)。所以你需要做的 就是在原始 UNet 模型的参数上进行就地更新。

以下代码假设你已经加载了一个 LoRA 并编译了模型, 并且你想切换到另一个 LoRA。

如果你没有启用 CUDA 图并保持 `preserve

将“另一个”LoRA切换到UNet中

def switch_lora(unet, lora): # 存储原始UNet参数 state_dict = unet.state_dict() # 将另一个LoRA加载到unet中 unet.load_attn_procs(lora) # 就地复制当前UNet参数到原始unet参数中 update_state_dict(state_dict, unet.state_dict()) # 加载回原始UNet参数 # 由于我们仍然希望保留原始UNet参数的引用,因此使用assign=True unet.load_state_dict(state_dict, assign=True)

switch_lora(compiled_model.unet, lora_b_path)

模型量化

stable-fast扩展了PyTorch的quantize_dynamic功能,并在CUDA后台提供了动态量化的线性运算符。 启用此功能后,你可以为diffusers获得轻微的VRAM减少,为transformers获得显著的VRAM减少,并可能获得潜在的加速(并不总是如此)。

对于SD XL,在图像大小为1024x1024时,预计会减少2GB的VRAM。

def quantize_unet(m): from diffusers.utils import USE_PEFT_BACKEND assert USE_PEFT_BACKEND m = torch.quantization.quantize_dynamic(m, {torch.nn.Linear}, dtype=torch.qint8, inplace=True) return m model.unet = quantize_unet(model.unet) if hasattr(model, 'controlnet'): model.controlnet = quantize_unet(model.controlnet)

有关更多详细信息,请参阅examples/optimize_stable_diffusion_pipeline.py

加速PyTorch的一些常用方法

# 强烈建议使用TCMalloc减少CPU开销 # https://github.com/google/tcmalloc LD_PRELOAD=/path/to/libtcmalloc.so python3 ...
import packaging.version import torch if packaging.version.parse(torch.__version__) >= packaging.version.parse('1.12.0'): torch.backends.cuda.matmul.allow_tf32 = True

性能比较

性能在不同的硬件/软件/平台/驱动程序配置之间会有很大差异。 准确的基准测试非常困难。而准备基准测试的环境也是一项艰巨的任务。 我之前在一些平台上进行了测试,但结果可能仍然不准确。 请注意,在基准测试时,由于CUDA的异步性质,tqdm显示的进度条可能不准确。 为了解决这个问题,我使用CUDA Event来准确测量每秒迭代的速度。

stable-fast在较新的GPU和较新的CUDA版本上预期效果更好。 在较旧的GPU上,性能提升可能有限。 在基准测试期间,由于CUDA的异步性质,进度条可能无法正常工作。

RTX 4080 (512x512, batch size 1, fp16, 在WSL2中)

这是我的个人游戏PC😄。它的CPU比云服务器提供商的那些更强大。

框架SD 1.5SD XL (1024x1024)SD 1.5 ControlNet
Vanilla PyTorch (2.1.0)29.5 it/s4.6 it/s19.7 it/s
torch.compile (2.1.0, max-autotune)40.0 it/s6.1 it/s21.8 it/s
AITemplate44.2 it/s
OneFlow53.6 it/s
AUTO1111 WebUI17.2 it/s3.6 it/s
AUTO1111 WebUI (with SDPA)24.5 it/s4.3 it/s
TensorRT (AUTO1111 WebUI)40.8 it/s
TensorRT Official Demo52.6 it/s
stable-fast (with xformers & Triton)51.6 it/s9.1 it/s36.7 it/s

H100

感谢__@Consceleratus__和__@harishp__的帮助,我已经测试了H100上的速度。

框架SD 1.5SD XL (1024x1024)SD 1.5 ControlNet
Vanilla PyTorch (2.1.0)54.5 it/s14.9 it/s35.8 it/s
torch.compile (2.1.0, max-autotune)66.0 it/s18.5 it/s
stable-fast (with xformers & Triton)104.6 it/s21.6 it/s72.6 it/s

A100

感谢__@SuperSecureHuman__和__@jon-chuang__的帮助,现已在A100上进行基准测试。

框架SD 1.5SD XL (1024x1024)SD 1.5 ControlNet
Vanilla PyTorch (2.1.0)35.6 it/s8.7 it/s25.1 it/s
torch.compile (2.1.0, max-autotune)41.9 it/s10.0 it/s
stable-fast (with xformers & Triton)61.8 it/s11.9 it/s41.1 it/s

兼容性

模型支持
Hugging Face Diffusers (1.5/2.1/XL)
With ControlNet
With LoRA
Latent Consistency Model
SDXL Turbo
Stable Video Diffusion
功能支持
动态形状
文本到图像
图像到图像
图像修补
UI 框架支持链接
AUTOMATIC1111WIP
SD NextSD Next
ComfyUIComfyUI_stable_fast
操作系统支持
Linux
Windows
Windows WSL

故障排除

有关更多详细信息,请参阅doc/troubleshooting.md

你还可以加入Discord频道寻求帮助。

编辑推荐精选

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

热门AI工具生产力协作转型TraeAI IDE
问小白

问小白

全能AI智能助手,随时解答生活与工作的多样问题

问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。

聊天机器人AI助手热门AI工具AI对话
Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

热门AI工具AI办公办公工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

模型训练热门AI工具内容创作智能问答AI开发讯飞星火大模型多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

AI助手热门AI工具AI创作AI辅助写作讯飞绘文内容运营个性化文章多平台分发
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

下拉加载更多