可部署于所有设备上的开源加速 Stable-Diffusion.cpp:让 AI 图像生成更快、更高效!

在 AI 生成图像领域,Stable Diffusion 已经成为一个里程碑式的工具,凭借其强大的图像生成能力,被广泛应用于艺术创作、商业设计等领域。然而,生成高质量图像的过程常常需要付出大量的时间和内存,这对于硬件资源有限的设备来说是一大挑战。

为了应对这一问题,我们优化了Stable-Diffusion.cpp (简称 Sdcpp 。Sdcpp 是 Stable Diffusion 模型的 C/C++ 实现,旨在无需外部依赖的情况下在 CPU(以及可能配置 GPU)上实现高效推理。Sdcpp 作为一个高效的推理框架,不仅能够显著加速模型的运行,还能大幅减少内存占用。今天,我们就来深入了解 Sdcpp 的技术优势和我们的优化方法。

为什么需要加速

Sdcpp 的实现中,计算密集型的 2D 卷积运算 是图像生成的主要瓶颈。现有方法虽然功能强大,但效率却不够理想,推理速度较慢,内存占用高。为了解决这些问题,我们在 Sdcpp 的基础上,引入了 Winograd 算法 ,对 Sdcpp 中的卷积操作进行了革命性的改进,最终实现了性能与资源利用率的双提升

技术亮点: Winograd 算法加

为了让 Sdcpp 的卷积操作更高效,从而加速生成过程并降低计算和内存成本,我们引入了 Winograd 算法,并结合以下优化策略:

  1. 分步处理:将卷积拆解为滤波器和激活权重的预处理、预处理张量的逐元素乘法和中间结果的后处理三个阶段,提高运算效率。
  2. 局部优化:通过调整数据加载方式(散点存储和聚集加载优化),减少 L1 缓存的切换,最大限度地减少缓存交换,提升内存使用效率。
  3. 并行处理:分析算子间的关联性,将关联性较小的运算动态分配到不同的计算线程与核心上,充分利用多线程和多核心架构,动态分配计算任务,充分发挥硬件性能,减少图像生成延迟。

尤其是在 M 系列 Mac 设备上,我们优化了性能核心(P-core)和效率核心(E-core)的分工,使推理速度得到了显著提升。

多设备、多模型支

我们优化后的 Sdcpp 框架支持多个设备和模型,包括:

  • 主流 Stable Diffusion 模型:SDv1.4、v1.5、v2.1、SDXL 和 SDXL-Turbo;
  • 不同硬件平台:Mac、Android、AMD 等;
  • 扩展模块:如支持 LoRA,以及支持算子量化等,为用户提供更高的灵活性。

此外,我们还支持并且优化了diffusion transformer 模型中的算子,进一步拓展了应用场景。

速度提升究竟有多快

通过实际测试,我们的优化成果令人振奋!

  • 单卷积层的加速表现 :对于多种卷积层配置,推理速度平均提升超过 2
    • 我们选择了一些在 SD 生成图片过程中出现比较频繁的卷积层,计算了在这些单卷积层上,我们优化的 Sdcpp 相较于原版 Sdcpp 的加速效果。在不同的卷积层上,我们的推理速度提升至少达到 2 倍
  • 整图生成速度对比 :最高加速比达到 4 .79 倍
    • 面对越大的图像分辨率,我们的方法的加速效果越明显。在生成 1024×1024 分辨率图像时,相比于原版 Sdcpp,我们优化的 Sdcpp 在 M1 Pro 以及 M2 Max 上的推理速度提升可超过 4.6 (FP32 类型)。
    • 对于其他图像尺寸和 SD 模型,我们优化的 Sdcpp 的加速效果也十分显著(如 SDv1.5 模型生成 512×512 图像时在M1 Pro上加速 1.84 )。
    • 这显著的加速比主要得益于我们的局部优化(降低缓存交换并且提高内存使用效率),以及并行处理(动态分配计算任务并且提高运算并行度)。

更快的速度,不仅节省时间,更让创作更自由

实例展示:更真实的生成效

下图展示了使用 SDXL-Turbo 模型,原版 Sdcpp 以及我们优化的 Sdcpp 使用 5 步采样,所生成的图像对比:

可以看出,在相同配置和提示词下,我们优化后的 Sdcpp 不仅速度更快,生成的图像也更加细腻逼真,细节丰富,层次分明。我们优化的 Sdcpp 能够支持不同硬件平台上(Mac、Android、AMD 等)各种主流 SD 模型(如SDv1.4、v1.5、v2.1、SDXL 和 SDXL-Turbo)的所有算子,确保使用这些 SD 模型能够生成高质量的图片。

未来计

尽管我们在加速方面取得了显著成效,但我们并不会止步于此。未来,我们将继续:

  1. 优化更多操作符,提升兼容性;
  2. 进一步提高模型量化的效率;
  3. 探索在更多设备上的性能提升。

Sdcpp 的推出,不仅大幅加速了图像生成过程,还降低了硬件门槛,让更多人能以更低成本享受 AI 创作的乐趣!如果你对 AI 图像生成感兴趣,不妨试试我们优化后的 Stable-Diffusion.cpp

项目主页GitHub - SealAILab/stable-diffusion-cpp: SealAI's stable diffusion implementation

技术报告: https://arxiv.org/abs/2412.05781

欢迎关注我们,了解更多技术细节!

相关推荐
正在走向自律4 分钟前
当AI Agent遇上CRM:客户关系管理的智能化变革(29/30)
人工智能·crm系统·ai agent·ai智能体
滴滴哒哒答答1 小时前
《自动驾驶与机器人中的SLAM技术》ch8:基于预积分和图优化的紧耦合 LIO 系统
人工智能·机器人·自动驾驶
从零开始学习人工智能1 小时前
傅里叶变换在语音识别中的关键作用
人工智能·语音识别
Landy_Jay2 小时前
深度学习:大模型Decoding+MindSpore NLP分布式推理详解
人工智能·深度学习
一点一木2 小时前
从零开始:使用 Brain.js 创建你的第一个神经网络(一)
前端·javascript·人工智能
cooldream20092 小时前
数据可视化:让数据讲故事的艺术
人工智能·知识图谱
paixiaoxin2 小时前
解读CVPR2024-3DGS论文分享|DNGaussian: Optimizing Sparse-View 3D Gaussian Radiance Fields with .....
人工智能·深度学习·算法·机器学习·3d·cvpr·3dgs
咸鱼葵2 小时前
SIBR详细介绍:基于图像的渲染系统及3DGS实例展示【3DGS实验复现】
人工智能·计算机视觉·3d
一叶青枫2 小时前
解决Docker中使用 Open WebUI识别不到本地ollama中的模型
ui·docker·语言模型·容器
Natsuagin2 小时前
在Windows上轻松部署本地大语言模型:Ollama与Open-WebUI的完整指南
windows·ai·语言模型