UC Berkeley发表StreamDiffusion,单张4090每秒可生成90张图像,图像生成性能大幅提升

StreamDiffusion: A Pipeline-level Solution for Real-time Interactive Generation

 

《UC Berkeley发表StreamDiffusion,单张4090每秒可生成90张图像,图像生成性能大幅提升》- 投稿作者:灵度智能 - 发布于:GetAI社区

 

近日,UC Berkeley、日本筑波大学、MIT联合发表了StreamDiffusion,一个基于LCM和SDXL Turbo技术的开源项目,每秒生成110张图像。不仅在性能方面提供显著增强,还通过高效的批处理、指导机制优化、过滤技术等多种手段改善了实时图像生成服务。结合提出的策略和现有的成熟加速工具,使图像到图像的生成在RTX4090上达到91.07fps,提高了59.56倍吞吐量。

论文地址:https://arxiv.org/pdf/2312.12491.pdf

Github地址:https://github.com/cumulo-autumn/StreamDiffusion

 

摘要

StreamDiffusion是一个实时扩散流水线,旨在实现交互式图像生成。它通过批处理去噪的方式实现了高吞吐量的流水线,同时使用了新颖的输入输出队列来处理数据输入和模型吞吐量之间的差异。此外,StreamDiffusion还提出了一种新的残差分类器无指导算法,减少了负条件去噪步骤的冗余计算。通过结合现有的加速工具,StreamDiffusion在单个RTX 4090 GPU上实现了高达91.07fps的图像生成吞吐量,并显著降低了能耗。

简介

最近,在Metaverse、在线视频流媒体和广播领域,商业化扩散模型的趋势日益增长。这些领域需要提供高吞吐量和低延迟的扩散管道,以确保有效的人机交互。一个相关的例子是使用扩散模型创建虚拟YouTuber。这些数字人物应该能够对用户输入做出流畅和响应迅速的反应。为了提高吞吐量和实时交互能力,目前的努力主要集中在减少去噪迭代次数,例如从50次迭代减少到几次甚至一次。常见的策略是将多步扩散模型提炼为几步或者用神经常微分方程重新构建扩散过程。量化也被应用于扩散模型,以提高效率。本文从一个正交的方向出发,介绍了StreamDiffusion,这是一个在管道级别上实现实时交互图像生成和高吞吐量的解决方案。我们强调现有的模型设计工作仍然可以与我们的管道集成。我们的方法可以使用N步去噪扩散模型,同时保持高吞吐量,并为用户在选择他们喜欢的模型时提供更多的灵活性。

《UC Berkeley发表StreamDiffusion,单张4090每秒可生成90张图像,图像生成性能大幅提升》- 投稿作者:灵度智能 - 发布于:GetAI社区

StreamDiffusion是一种新的扩散管道,采用批处理去噪步骤和GPU并行处理,能够高效生成图像。它还引入了残差无分类器引导(RCFG)技术,减少了计算开销。此外,通过使用随机相似性过滤策略,可以降低GPU能耗。实验证明,StreamDiffusion在一块RTX4090 GPU上的图像生成速度达到了91.07fps,超过了Diffusers团队的扩散自动管道59.6倍。同时,随机相似性过滤策略在一块RTX 3090 GPU上降低了2.39倍的GPU功耗,在一块RTX 4090 GPU上降低了1.99倍的GPU功耗。

相关工作

加速扩散模型

针对扩散模型速度慢的问题,提出了多种解决策略,包括使用ODE求解器、自适应步长求解器和神经网络优化等方法。本文提出的方法是在现有方法的基础上,设计了一个高吞吐量的流水线解决方案,能够无缝集成多种低延迟扩散模型,从而实现高效的交互式扩散生成。

StreamDiffusion

StreamDiffusion是一个旨在实现高吞吐量的新型扩散管道,包括Stream Batch策略、RCFG、输入输出队列、随机相似性过滤器、预计算过程和模型加速工具等关键组件。其中,RCFG是一个无分类器指导的残差分类器,而tiny-autoencoder是一种模型加速工具。

对降噪步骤进行批处理

Stream Batch是一种用于解决交互式扩散生成中高延迟问题的技术。它将顺序去噪操作重新组织为批处理过程,每个批次对应一定数量的去噪步骤。通过这种方法,可以通过一次通过U-Net来使每个批次元素在去噪序列中前进一步。这种方法显著减少了多个U-Net推理的需求,从而在不增加线性处理时间的情况下提高了生成质量。通过适当的VRAM扩展,可以在单个U-Net处理周期内生成高质量图像,有效地克服了增加去噪步骤所带来的限制。

Residual Classifier-Free Guidance 

CFG算法通过在未条件化或负条件化项与原始条件化项之间进行向量计算来增强原始条件化的效果。RCFG算法通过减少负条件化嵌入的额外U-Net推理的计算成本来改进CFG算法。RCFG使用原始输入图像的潜变量作为残差项,可以有效地生成与原始输入图像不同的结果,从而增强条件化的效果。此外,RCFG还可以计算负条件化的残差噪声,以便从任何负条件中分离出来。

《UC Berkeley发表StreamDiffusion,单张4090每秒可生成90张图像,图像生成性能大幅提升》- 投稿作者:灵度智能 - 发布于:GetAI社区

本文介绍了一种基于条件流形生成(CFG)的新方法,称为自我负条件流形生成(Self-Negative RCFG)和一次性负条件流形生成(Onetime-Negative RCFG)。这两种方法可以通过一个公式来统一表示,相比传统的CFG,它们只需要更少的U-Net计算。

输入输出队列

高速图像生成系统的瓶颈在于神经网络模块,如VAE和U-Net。为了最大化系统速度,图像的预处理和后处理等不需要神经网络模块处理的过程被移出管道并并行处理。设计了一个输入输出排队系统来解决人类输入和模型吞吐量之间的处理频率差异。该系统将处理后的输入张量排队给扩散模型,然后将张量输出排队给后处理系统,最终传输到渲染客户端。

《UC Berkeley发表StreamDiffusion,单张4090每秒可生成90张图像,图像生成性能大幅提升》- 投稿作者:灵度智能 - 发布于:GetAI社区

随机相似滤波器

当输入图像保持不变或只有微小变化时,重复将几乎相同的输入图像输入到VAE和U-Net中会生成相同或几乎相同的图像,并且会消耗不必要的GPU资源。为了解决这个问题并减少不必要的计算负载,提出了一种称为随机相似性过滤器(SSF)的策略。通过计算当前输入图像和过去参考帧之间的余弦相似度,来决定是否跳过后续的VAE和U-Net处理过程。这种概率跳过机制允许网络在动态场景中完全运行,而在静态场景中,网络的操作速率降低,从而节省计算资源。根据输入图像的相似性,无缝调节GPU使用率,实现对具有不同动态性的场景的平滑适应。与通过硬阈值确定是否跳过计算相比,基于概率采样的相似性过滤策略可以更平滑地生成视频。

《UC Berkeley发表StreamDiffusion,单张4090每秒可生成90张图像,图像生成性能大幅提升》- 投稿作者:灵度智能 - 发布于:GetAI社区

预计算

U-Net架构需要输入潜在变量和条件嵌入。为了优化,我们预先计算并存储提示嵌入,并在交互或流媒体模式下调用它。为了保持一致的输入帧和提高计算效率,我们为每个去噪步骤预先采样高斯噪声并将其存储在缓存中。我们还预先计算每个去噪步骤的噪声强度系数。对于Latent Consistency Models (LCM),我们有特定的键值缓存设计,可以预先计算c skip和c out函数,以满足一定的方程式。

模型加速和微型自动编码器

我们使用TensorRT构建U-Net和VAE引擎,进一步加速推理速度。TensorRT是NVIDIA的优化工具包,用于高性能深度学习推理。它通过对神经网络进行多种优化,包括层融合、精度校准、内核自动调优、动态张量内存等,实现高吞吐量和高效率的深度学习应用。为了优化速度,我们配置系统使用静态批处理大小和固定的输入尺寸(高度和宽度)。这种方法确保计算图和内存分配针对特定的输入尺寸进行了优化,从而提高处理速度。然而,这意味着如果需要处理不同形状的图像(即高度和宽度不同)或使用不同的批处理大小(包括去噪步骤),则必须构建一个针对这些特定尺寸的新引擎。这是因为TensorRT中应用的优化和配置是针对最初定义的尺寸和批处理大小的,改变这些参数将需要在TensorRT中重新配置和重新优化网络。此外,我们还使用了一个小型的自动编码器(AutoEncoder),它被设计为传统稳定扩散自动编码器的简化和高效版本。TAESD在快速将潜变量转换为全尺寸图像和以显著降低的计算需求完成解码过程方面表现出色。

《UC Berkeley发表StreamDiffusion,单张4090每秒可生成90张图像,图像生成性能大幅提升》- 投稿作者:灵度智能 - 发布于:GetAI社区

《UC Berkeley发表StreamDiffusion,单张4090每秒可生成90张图像,图像生成性能大幅提升》- 投稿作者:灵度智能 - 发布于:GetAI社区

实验

我们在LCM、LCMLoRA和SD-turbo上实现了StreamDiffusion流水线。作为模型加速器,我们使用TensorRT,而对于轻量高效的VAE,我们使用TAESD。我们的流水线兼容消费级GPU。我们在NVIDIA RTX4090 GPU、Intel Core i9-13900K CPU、Ubuntu22.04.3 LTS和NVIDIA RTX3060 GPU、Intel Core i7-12700K、Windows11上测试了我们的流水线,用于图像生成。我们主要通过每张图像的平均推理时间来评估吞吐量,通过处理100张图像。

去噪批次的定量评价

使用批处理策略进行去噪可以显著提高处理时间,相比于传统的顺序去噪步骤,可以减少一半的时间。用TensorRT加速工具后,Stream Batch仍然能够大幅提高原始顺序扩散流程的效率。

 

《UC Berkeley发表StreamDiffusion,单张4090每秒可生成90张图像,图像生成性能大幅提升》- 投稿作者:灵度智能 - 发布于:GetAI社区

《UC Berkeley发表StreamDiffusion,单张4090每秒可生成90张图像,图像生成性能大幅提升》- 投稿作者:灵度智能 - 发布于:GetAI社区

《UC Berkeley发表StreamDiffusion,单张4090每秒可生成90张图像,图像生成性能大幅提升》- 投稿作者:灵度智能 - 发布于:GetAI社区

与Huggingface diffusers开发的AutoPipelineForImage2Image进行比较,我们的流程展示了显著的速度提升。在使用TensorRT时,StreamDiffusion在运行10个去噪步骤时最少提速13.0倍,在单个去噪步骤时最高提速59.6倍。即使没有使用TensorRT,StreamDiffusion在使用一个步骤去噪时也能提速29.7倍,在10个步骤去噪时提速8.3倍。

使用Self-Negative RCFG进行附加计算时,推理时间几乎与不使用Self-Negative相同。使用Onetime-Negative RCFG时,第一步去噪过程需要额外的UNet计算。因此,在单个去噪步骤的情况下,One-time-negative RCFG和传统CFG的推理时间几乎相同。随着去噪步骤的增加,从传统CFG到Self-Negative和Onetime-Negative RCFG的推理时间差异变得更加明显。在第5个去噪步骤时,Self-Negative RCFG的速度提升为2.05倍,Onetime-Negative RCFG的速度提升为1.79倍。

能源消耗

实验结果表明,当输入图像具有静态特征且相似度高时,SSF能够显著降低GPU的使用率,从而提高能源效率。在20帧视频序列和1000帧动态场景视频中,SSF的应用均能够有效降低GPU的平均功耗。这些发现强调了SSF在提高能源效率方面的有效性。

消融分析

本文通过消融实验评估了StreamDiffusion模型在不同配置下的平均推理时间,发现流式批处理、TensorRT、预计算和输入输出队列等组件对推理时间有影响。StreamDiffusion通过标准化变量和计算设备的精度,避免了在推理过程中进行张量精度转换或计算设备转移,因此即使没有任何优化,也能显著提高推理速度。此外,SSF和Self-Negative RCFG等附加模块对推理时间影响不大。

《UC Berkeley发表StreamDiffusion,单张4090每秒可生成90张图像,图像生成性能大幅提升》- 投稿作者:灵度智能 - 发布于:GetAI社区

定性评估

《UC Berkeley发表StreamDiffusion,单张4090每秒可生成90张图像,图像生成性能大幅提升》- 投稿作者:灵度智能 - 发布于:GetAI社区

StreamDiffusion管道使用实时图像到图像转换生成的结果如图1所示。该管道能够从实时摄像机或屏幕捕捉设备接收的输入图像中实时生成图像,并具有非常低的吞吐量。同时,它能够生成高质量的图像,有效地与指定的提示条件相匹配。这些能力展示了我们的管道在各种实时应用中的适用性,如实时游戏图形渲染、生成相机特效滤镜、实时人脸转换和AI辅助绘画。

《UC Berkeley发表StreamDiffusion,单张4090每秒可生成90张图像,图像生成性能大幅提升》- 投稿作者:灵度智能 - 发布于:GetAI社区

《UC Berkeley发表StreamDiffusion,单张4090每秒可生成90张图像,图像生成性能大幅提升》- 投稿作者:灵度智能 - 发布于:GetAI社区

使用残差分类器自由引导(RCFG)对生成图像与提示条件的对齐如图10所示。未使用任何形式的CFG生成的图像在与提示的对齐方面表现出较弱的效果,特别是在颜色变化或添加不存在的元素等方面没有有效实现。相比之下,使用CFG或RCFG增强了修改原始图像的能力,如改变发色、添加身体图案,甚至加入眼镜等物体。值得注意的是,与标准CFG相比,使用RCFG会导致提示的影响更强。RCFG虽然仅限于图像到图像的应用,但可以在连续参考输入图像和最初采样的噪声的潜在值的同时计算负条件的向量。这种方法相比于标准CFG在每个去噪步骤中使用UNet来计算负条件向量,可以得到更一致的负条件向量方向。因此,这导致了与原始图像更明显的变化。然而,生成结果的稳定性存在一定的折衷。虽然自我负条件RCFG增强了提示的有效性,但也增加了生成图像的对比度。为了解决这个问题,可以通过调整公式7中的delta来调节虚拟残余噪声向量的大小,从而减轻对比度的上升。此外,使用适当选择的负提示的一次性负条件RCFG可以有效地减轻对比度的增加,同时改善提示的遵循性,如图10所示。这种方法使生成的图像能够更自然地与原始图像融合。

本文介绍了一种基于StreamDiffusion的图像生成方法,使用sd-turbo模型可以在一步内生成高质量的图像。在GPU: RTX 4090,CPU: Core i9-13900K和OS: Ubuntu 22.04.3 LTS的环境下,该方法可以以超过100fps的速度生成高质量图像。此外,通过增加一次生成的图像批次大小到12,该方法可以连续产生约150张图像。使用LCM-LoRA的社区模型可以生成具有不同表情的图像,但需要多于一步的时间,速度降至约40fps。

总结

StreamDiffusion是一个用于交互式扩散生成的管道级解决方案。它包括了多种优化策略,如流批处理、无残差分类器引导、IO队列并行化、随机相似性过滤器、预计算、Tiny AutoEncoder和模型加速工具的使用。这些元素的协同组合使得效率得到显著提高。具体而言,StreamDiffusion在图像生成任务上可以达到每秒91.07帧的速度,这对于包括元宇宙、在线视频流和广播等各种应用领域都非常有益。此外,StreamDiffusion在GPU功耗方面也实现了显著降低,至少降低了1.99倍。这种显著的效率提升凸显了StreamDiffusion在商业应用中的潜力,为注重能源的高性能计算环境提供了一个引人注目的解决方案。

0

评论0

请先
显示验证码