加速你的扩散推理

我们很高兴地宣布 vLLM-Omni 的一项重大性能更新。

vLLM-Omni 现在支持各种缓存加速方法,以最小的质量下降加速扩散模型推理,例如 Cache-DiTTeaCache。这些缓存方法智能地缓存中间计算,以避免在扩散时间步中进行冗余工作。

通过此更新,用户现在可以在图像生成任务中实现 1.5倍到2倍以上的加速,且配置极少,质量损失可忽略不计。

瓶颈:扩散中的冗余

扩散模型以其高计算成本而闻名。生成一张图像需要几十个推理步骤。然而,相邻步骤通常处理非常相似的特征。

vLLM-Omni 现在利用了这种时间冗余。通过智能地缓存和重用中间计算结果,我们可以在后续步骤中跳过昂贵的计算,而无需重新训练模型。

两个强大的加速后端

vLLM-Omni 现在支持两种不同的缓存后端,以满足你的特定需求

1. Cache-DiT:高级控制 & 最大性能

Cache-DiT 是一个全面的基于库的加速解决方案。它提供了一套复杂的技巧来最大化效率

  • DBCache(双块缓存):根据残差差异智能地缓存 Transformer 块输出。
  • TaylorSeer:利用基于泰勒展开的预测来预测特征,进一步减少计算负载。
  • SCM(步计算掩码):应用自适应掩码以选择性地跳过计算步骤。

2. TeaCache:简单 & 自适应

TeaCache 在 vLLM-Omni 内部原生实现,提供了一种基于钩子的自适应缓存机制。它监控输入之间的差异,并动态决定何时重用前一个时间步的 transformer 计算。

性能基准

我们使用 Qwen-Image(1024x1024 生成)在 NVIDIA H200 GPU 上对这些方法进行了基准测试。结果令人印象深刻

模型 后端 配置 时间 加速比
Qwen-Image 基线 20.0秒 1.0倍
Qwen-Image TeaCache rel_l1_thresh=0.2 10.47秒 1.91倍
Qwen-Image Cache-DiT DBCache + TaylorSeer 10.8秒 1.85倍
No Cache

无缓存

TeaCache

TeaCache

Cache-DiT

Cache-DiT

“编辑”模型

对于图像编辑任务,Cache-DiT 表现更为出色。在 Qwen-Image-Edit 上,Cache-DiT 实现了惊人的 2.38倍加速,将生成时间从 51.5秒 缩短到仅 21.6秒。

模型 后端 配置 时间 加速比
Qwen-Image-Edit 基线 51.5秒 1.0倍
Qwen-Image-Edit TeaCache rel_l1_thresh=0.2 35.0秒 1.47倍
Qwen-Image-Edit Cache-DiT DBCache + TaylorSeer 21.6秒 2.38倍
No Cache

无缓存

TeaCache

TeaCache

Cache-DiT

Cache-DiT

这些缓存优化技术在异构平台(如昇腾 NPU)上也显示出同样令人印象深刻的结果。例如,使用 Cache-DiT 将 Qwen-Image-Edit 在昇腾 NPU 上的推理时间从 142.38秒 缩短到 64.07秒,实现了超过 2.2倍的加速。

支持的模型

模型 TeaCache Cache-DiT
Qwen-Image
Z-Image
Qwen-Image-Edit

快速开始

在 vLLM-Omni 中开始加速是无缝的。只需在初始化 Omni 类时定义你的 cache_backend

使用 TeaCache 加速

from vllm_omni import Omni

omni = Omni(
    model="Qwen/Qwen-Image",
    cache_backend="tea_cache",
    cache_config={"rel_l1_thresh": 0.2} 
)

outputs = omni.generate(prompt="A cat sitting on a windowsill", num_inference_steps=50)

使用 Cache-DiT 加速

from vllm_omni import Omni

omni = Omni(
    model="Qwen/Qwen-Image",
    cache_backend="cache_dit",
    cache_config={
        "Fn_compute_blocks": 1,
        "Bn_compute_blocks": 0,
        "max_warmup_steps": 8,
        "enable_taylorseer": True, # Enable Taylor expansion forecasting
        "taylorseer_order": 1,
    }
)

outputs = omni.generate(prompt="A cat sitting on a windowsill", num_inference_steps=50)

了解更多

准备好加速你的扩散管道了吗?查看我们的详细文档以获取高级配置

除了缓存,我们还在积极开发并行化、内核融合和量化方面的优化。敬请期待更强大的功能!