vLLM-Omni 扩散模型缓存加速
加速你的扩散模型推理
我们非常激动地宣布 vLLM-Omni 的重大性能更新。
vLLM-Omni 现在支持多种缓存加速方法,可以在极小质量损耗的情况下加速扩散模型推理,例如 Cache-DiT 和 TeaCache。这些缓存方法智能地缓存中间计算结果,从而避免在扩散时间步之间进行重复计算。
通过此次更新,用户现在可以在图像生成任务中实现 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-Image | TeaCache | rel_l1_thresh=0.2 | 10.47秒 | 1.91倍 ⚡ |
| Qwen-Image | Cache-DiT | DBCache + TaylorSeer | 10.8秒 | 1.85倍 ⚡ |

无缓存

TeaCache

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-Edit | TeaCache | rel_l1_thresh=0.2 | 35.0秒 | 1.47倍 ⚡ |
| Qwen-Image-Edit | Cache-DiT | DBCache + TaylorSeer | 21.6秒 | 2.38倍 ⚡ |

无缓存

TeaCache

Cache-DiT
这些缓存优化技术在华为昇腾 NPU 等异构平台上也展现出了同样令人印象深刻的效果。例如,使用 Cache-DiT 将昇腾 NPU 上的 Qwen-Image-Edit 推理时间从 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)了解更多
准备好加速您的扩散模型流程了吗?查看我们的详细文档以获取高级配置指南:
除了缓存,我们也在积极开发并行化、算子融合和量化方面的优化。敬请期待更多强大的功能!