Comfy-WaveSpeed开发指南:如何为自定义模型添加FBCache支持
Comfy-WaveSpeed是ComfyUI的一站式推理优化解决方案,提供通用、灵活且快速的性能增强功能。本文将详细介绍如何为自定义模型添加FBCache(First Block Cache)支持,以实现推理速度的显著提升。## 什么是FBCache?FBCache是Comfy-WaveSpeed中的核心优化技术,通过缓存模型第一层的计算结果并在后续步骤中复用,有效减少重复计算,从而加速
Comfy-WaveSpeed开发指南:如何为自定义模型添加FBCache支持
Comfy-WaveSpeed是ComfyUI的一站式推理优化解决方案,提供通用、灵活且快速的性能增强功能。本文将详细介绍如何为自定义模型添加FBCache(First Block Cache)支持,以实现推理速度的显著提升。
什么是FBCache?
FBCache是Comfy-WaveSpeed中的核心优化技术,通过缓存模型第一层的计算结果并在后续步骤中复用,有效减少重复计算,从而加速推理过程。实验数据显示,启用FBCache后,Flux模型的推理速度从1.63it/s提升至4.33it/s,效率提升超过165%。
图1:未启用FBCache的原始推理速度(1.63it/s)
FBCache工作原理
FBCache通过以下机制实现性能优化:
- 缓存第一层输出:在模型推理过程中,缓存Transformer或UNet的第一层输出
- 残差比较:通过比较连续步骤间的残差差异判断是否可以复用缓存
- 状态管理:维护缓存上下文,处理不同采样阶段的缓存有效性
核心实现位于first_block_cache.py和fbcache_nodes.py文件中,通过模块化设计支持多种模型架构。
为自定义模型添加FBCache支持的步骤
1. 准备工作
首先确保你的模型满足以下条件:
- 基于PyTorch框架实现
- 具有明确的层级结构(如Transformer blocks或UNet输入/输出块)
- 支持模型输入/输出的缓存机制
2. 实现模型适配代码
根据模型类型,你需要实现对应的FBCache适配代码:
对于UNet类模型
# 参考 first_block_cache.py 中的 create_patch_unet_model__forward 函数
def create_patch_your_unet_forward(model, residual_diff_threshold, validate_can_use_cache_function):
# 实现自定义UNet模型的前向传播补丁
# 1. 提取第一层输出作为缓存基准
# 2. 实现剩余块的调用逻辑
# 3. 添加残差比较和缓存逻辑
pass
对于Transformer类模型
# 参考 CachedTransformerBlocks 类
class YourModelCachedBlocks(torch.nn.Module):
def __init__(self, transformer_blocks, residual_diff_threshold):
super().__init__()
self.transformer_blocks = transformer_blocks
self.residual_diff_threshold = residual_diff_threshold
def forward(self, hidden_states, encoder_hidden_states):
# 实现缓存逻辑
# 1. 处理第一层并缓存结果
# 2. 比较残差决定是否使用缓存
# 3. 复用缓存或继续计算剩余块
pass
3. 添加节点定义
在fbcache_nodes.py中添加你的模型支持:
class ApplyFBCacheOnYourModel(ApplyFBCacheOnModel):
@classmethod
def INPUT_TYPES(s):
return {
"required": {
"model": ("YOUR_MODEL_TYPE",),
# 添加你的模型特定参数
"residual_diff_threshold": ("FLOAT", {"default": 0.12, "min": 0.0, "max": 1.0, "step": 0.001}),
}
}
def patch(self, model, residual_diff_threshold):
# 应用你的模型补丁函数
patch_forward = create_patch_your_model_forward(model, residual_diff_threshold)
# 设置模型包装器
model.set_model_unet_function_wrapper(your_model_function_wrapper)
return (model,)
4. 配置ComfyUI工作流
在ComfyUI中添加FBCache节点到你的工作流:
关键参数设置:
residual_diff_threshold:残差差异阈值,建议从0.1开始调整max_consecutive_cache_hits:最大连续缓存命中次数,默认-1(无限制)start/end:缓存生效的采样阶段百分比
5. 测试与优化
完成实现后,进行以下测试:
- 验证模型输出是否与未启用FBCache时一致
- 测量推理速度提升,调整阈值参数获得最佳性能
- 测试不同输入尺寸和采样步数下的稳定性
常见问题解决
精度问题
如果启用FBCache后出现输出质量下降:
- 降低
residual_diff_threshold值,提高缓存判断的严格性 - 限制连续缓存命中次数,增加模型更新频率
兼容性问题
对于不支持的模型架构:
- 检查模型是否有类似Transformer或UNet的层级结构
- 实现自定义的缓存逻辑,参考first_block_cache.py中的缓存上下文管理
性能未提升
若未观察到明显性能提升:
- 确保缓存逻辑正确实现且被调用
- 检查模型是否受限于内存带宽而非计算能力
- 尝试调整缓存阈值和采样阶段参数
总结
通过添加FBCache支持,自定义模型可以显著提升推理速度,同时保持输出质量。关键是正确实现第一层缓存逻辑和残差比较机制,并根据模型特性调整参数。完整的实现示例可参考项目中的flux.json工作流配置。
希望本指南能帮助你为自己的模型添加FBCache支持,享受Comfy-WaveSpeed带来的性能提升!
更多推荐





所有评论(0)