使用 Pruna 为 Flux 和 Stable Diffusion 提供更快的 ComfyUI 节点

在当今快速发展的机器学习领域,可访问性和效率至关重要。ComfyUI 通过提供直观的、基于节点的界面彻底改变了图像生成,使从初学者到专家等所有用户都能创建强大的工作流来服务于图像生成模型,例如 Stable Diffusion 或 Flux。然而,随着模型变得更大、更复杂,生成时间可能会变慢,从而增加计算需求和成本。
Pruna 通过优化模型,使其更快、更小、更便宜、更环保,从而直接应对这些挑战。通过将 Pruna 的高级优化技术通过我们的自定义节点直接集成到 ComfyUI 中,您可以加速 Stable Diffusion 和 Flux 推理,同时最大限度地减少输出质量的下降。这意味着即使您的模型不断扩展,也能实现更流畅、更高效的图像生成。
在本博客文章中,您将学习如何将 Pruna 节点集成到 ComfyUI 中,以提升您的 Stable Diffusion 和 Flux 工作流。我们将引导您完成每个步骤,并向您展示这些优化如何带来更快、更高效的图像生成。此外,我们将包含一个基准测试,使用一系列图像质量和性能指标,将 Pruna 节点与其他流行的效率节点进行比较。如需更多资源和更新,请访问我们的 仓库——如果您觉得它有用,请考虑给它点赞!
开始
在 ComfyUI 中设置 Pruna 非常简单。只需几个步骤,您就可以在 ComfyUI 界面中优化 Stable Diffusion 或 Flux 模型,以实现更快的推理。以下是快速入门指南。
步骤 1 - 先决条件
要运行我们的节点,您需要一个带有 GPU 的 Linux 系统。首先,设置一个 conda 环境,然后安装 ComfyUI 和 Pruna
创建一个 conda 环境,例如使用
conda create -n comfyui python=3.11 && conda activate comfyui
安装 Pruna 或 Pruna Pro ****
要使用 Pruna Pro,您还需要将 Pruna 令牌导出为环境变量
export PRUNA_TOKEN=<your_token_here>
[可选] 如果您想使用 x-fast
或 stable-fast
编译器,您需要安装额外的依赖项
pip install pruna[stable-fast]==0.2.3
注意:要使用我们的缓存节点或 x_fast
编译器,您需要访问 Pruna Pro。
步骤 2 - Pruna 节点集成
环境准备就绪后,您就可以将 Pruna 节点集成到您的 ComfyUI 设置中。按照以下步骤克隆仓库并启动 ComfyUI
导航到您的 ComfyUI 安装的 custom_nodes 文件夹
cd <path_to_comfyui>/custom_nodes
克隆 ComfyUI_pruna 仓库
git clone https://github.com/PrunaAI/ComfyUI_pruna.git
启动 ComfyUI
cd <path_to_comfyui> && python main.py --disable-cuda-malloc --gpu-only
完成这些步骤后,您应该能够在节点菜单的 Pruna 类别下看到所有 Pruna 节点。
Pruna 节点 - 简要说明
Pruna 为 ComfyUI 添加了四个强大的节点
- 一个编译节点,通过模型编译优化推理速度。虽然这种技术保留了输出质量,但性能提升可能因模型而异。
- 三个不同的缓存节点,每个节点都实现了独特的策略,通过重用中间计算来加速推理
通过调整每个节点的超参数,您可以为您的特定用例实现速度和输出质量之间的最佳权衡。有关更多详细信息,请查看我们仓库中的详细指南或文档。
Pruna 实战:加速 Stable Diffusion 和 Flux
在我们的仓库中,我们提供了多种工作流,以帮助您开始使用 Pruna——专为以下模型设计:
Stable Diffusion 或 Flux。在下面的示例中,我们使用了强大的 Pruna Cache Auto
节点。
您可以通过将提供的 JSON 文件拖放到 ComfyUI 窗口中,或者通过单击“工作流”选项卡中的“打开”来加载工作流,如此处所示。
示例 1 - Stable Diffusion
在此示例中,我们加速 Stable Diffusion v1.4 模型的推理。要开始,请下载模型并将其放置在适当的文件夹中
- 下载模型。
- 将其放置在
<path_to_comfyui>/models/checkpoints
中。
然后,如上所述使用 Stable Diffusion 工作流生成图像。
示例 2 - Flux
对于 Flux,由于其多组件管道,设置会稍微复杂一些。要使用 Flux 工作流,您需要单独下载模型的每个组件。具体来说
- 对于 CLIP,下载 clip_l.safetensors 和 t5xxl_fp16.safetensors 文件,并将其放置在
<path_to_comfyui>/models/clip/
中。 - 对于 VAE,下载 VAE 模型并将其放置在
<path_to_comfyui>/models/vae/
中。 - 对于 Flux 模型,下载 权重并将其放置在
<path_to_comfyui>/models/diffusion_models/
中。如果您无法访问该链接,可以在 Hugging Face 上请求模型访问权限。
现在,加载 Flux 工作流,您就可以开始使用了!
享受加速吧!🎉
Flux 模型的基准测试和评估
为了评估我们优化算法的性能,我们将 Pruna 的 自动缓存(Taylor 模式)与 Flux 开发模型以及两种成熟的缓存技术:TeaCache 和 First Block Cache 进行了基准测试。对于 TeaCache,我们使用了 rel_l1_thresh = 0.4
和 max_skip_steps = 3
,而对于 First Block Cache,我们设置了 residual_diff_threshold = 0.12
。我们测量了延迟、加速、排放量、能耗和图像质量指标,在 NVIDIA L40S GPU 上使用 PartiPrompts 数据集的 65 个提示生成了单张 1024×1024 图像,并进行了 50 个去噪步骤。排放量和能耗使用 CodeCarbon 包估算。所有缓存算法均额外与 torch_compile
编译器结合使用。
指标 | 基础模型 | 泰勒 + 自动 - 0.4 | 泰勒 + 自动 - 0.3 | 泰勒 + 自动 - 0.2 | TeaCache | First Block Cache |
---|---|---|---|---|---|---|
耗时 (秒) ↓ | 23.88 | 8.16 | 6.24 | 4.24 | 7.82 | 6.06 |
加速 ↑ | x1.00 | x2.93 | x3.83 | x5.63 | x3.05 | x3.94 |
排放量 (kgCO₂eq) ↓ | 9.9 × 10⁻⁴ | 3.4 × 10⁻⁴ | 2.6 × 10⁻⁴ | 1.8 × 10⁻⁴ | 3.2 × 10⁻⁴ | 2.5 × 10⁻⁴ |
能耗 (千瓦时) ↓ | 2.7× 10⁻³ | 9.2 × 10⁻⁴ | 7.0 × 10⁻⁴ | 4.7 × 10⁻⁴ | 8.8 × 10⁻⁴ | 6.9 × 10⁻⁴ |
CLIP 分数 ↑ | 17.55 | 17.43 | 17.38 | 17.62 | 17.36 | 17.40 |
FID ↓ | 不适用 | 70.84 | 74.93 | 91.11 | 87.76 | 92.66 |
PSNR ↑ | 不适用 | 17.50 | 17.26 | 15.71 | 16.19 | 16.15 |
SSIM ↑ | 不适用 | 0.77 | 0.76 | 0.72 | 0.72 | 0.72 |
LPIPS ↓ | 不适用 | 0.209 | 0.220 | 0.265 | 0.267 | 0.274 |
清晰度 ↑ | 7365 | 6967 | 7179 | 6699 | 6986 | 6749 |
检查表格,speed_factor = 0.4
的自动缓存提供与 TeaCache 相同的加速,而在 0.3
时与 First Block Cache 相当。然而,在两种情况下,Pruna 都保持了卓越的质量指标。您可以争取更大的增益(在 0.2
时最高可达 5.6 倍),尽管由此导致保真度下降可能对要求更高的用例造成影响。为了更直观地比较每种缓存策略如何平衡延迟、能效和图像质量指标,以下雷达图总结了所有方法之间的这些权衡。
为了提供视觉上的检查,我们还展示了使用各种提示通过不同方法生成的图像。我们观察到,在 0.4 的速度因子下——甚至在大多数情况下为 0.3——自动缓存生成的视觉效果几乎与基本模型无法区分。
提示(从上到下):1. “一只猫跳到空中抓鸟” 2. “一辆黄色 2017 款 Corvette 四分之三前视图,在多云的天气里绕着山路的一个弯道行驶,俯瞰着绿色山谷。” 3. “一只水豚” 4. “一个城市交叉路口” 5. “一个有十本书垂直堆叠的书架”
结语
我们很高兴看到 Pruna 的高级优化技术如何赋能 ComfyUI 提升您的图像生成工作流程。我们的基准测试展示了显著的性能提升,使您能够突破创意项目的界限 🚀
如有任何问题、反馈或社区讨论,欢迎加入我们的 Discord,您也可以在那里从我们专门的帮助台频道获得帮助。
如需错误报告或技术问题,请在我们的 仓库中提出问题。