vLLM-Omni 扩散模型缓存加速

4 分钟阅读
vLLM-Omni 团队

加速你的扩散模型推理

我们非常激动地宣布 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 中,提供了一种基于钩子 (hook) 的自适应缓存机制。它监测输入之间的差异,并动态决定何时重用上一个时间步的 Transformer 计算结果。

性能基准测试

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

模型后端配置时间加速比
Qwen-Image基准 (Baseline)20.0秒1.0倍
Qwen-ImageTeaCacherel_l1_thresh=0.210.47秒1.91倍
Qwen-ImageCache-DiTDBCache + TaylorSeer10.8秒1.85倍
No Cache
无缓存

无缓存

TeaCache
TeaCache

TeaCache

Cache-DiT
Cache-DiT

Cache-DiT

“编辑”模型

对于图像编辑任务,Cache-DiT 的表现更加亮眼。在 Qwen-Image-Edit 上,Cache-DiT 实现了 2.38 倍的巨大加速,将生成时间从 51.5 秒缩短至仅 21.6 秒。

模型后端配置时间加速比
Qwen-Image-Edit基准 (Baseline)51.5秒1.0倍
Qwen-Image-EditTeaCacherel_l1_thresh=0.235.0秒1.47倍
Qwen-Image-EditCache-DiTDBCache + TaylorSeer21.6秒2.38倍
No Cache
无缓存

无缓存

TeaCache
TeaCache

TeaCache

Cache-DiT
Cache-DiT

Cache-DiT

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

支持的模型

模型TeaCacheCache-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)

了解更多

准备好加速您的扩散模型流程了吗?查看我们的详细文档以获取高级配置指南:

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