Hugging Face 模块化 Diffusers 发布
Hugging Face 推出了 Modular Diffusers,这是一种框架,能够通过组合可重用的自包含块来构建扩散管道。该方法允许开发者混合搭配组件——例如文本编码、图像编码、去噪和解码——以创建定制工作流,而无需从头编写完整的管道。
可组合的管道架构
Modular Diffusers 通过引入 ModularPipeline 类来补充现有的 DiffusionPipeline 类。该架构将工作流的定义与模型权重的加载分离,从而在内存管理和管道修改方面提供更大的灵活性。
关键操作工作流
- 工作流定义:使用
ModularPipeline.from_pretrained(),用户在不立即加载权重的情况下定义块的顺序。 - 权重加载:使用
.load_components()方法来配置数据类型、量化并加载实际的模型权重。 - 块操作:由于管道由灵活的块组成,用户可以检查、添加、删除或交换块。例如,文本编码器块可以从管道中弹出,并使用
.init_pipeline()作为独立的管道运行。
自定义块开发
用户可以通过定义一个继承自 ModularPipelineBlocks 的 Python 类来创建自定义块。自定义块必须指定三个主要属性:
expected_components:定义所需模型及其默认的 Hugging Face Hub 仓库路径。inputs:定义必需和可选的输入参数。intermediate_outputs:定义块为下游组件产生的数据。
计算逻辑在 __call__ 方法中实现。定义后,这些块可以插入到现有工作流中。例如,使用 Depth Anything V2 的 DepthProcessorBlock 可以插入到 ControlNet 工作流的开头,其输出会自动流向后续需要它的块。
模块化仓库与 Hub 集成
Modular Diffusers 引入了 “Modular Repositories”,允许仓库引用其原始模型仓库中的组件,而不是本地托管所有权重。这通过 modular_model_index.json 文件进行管理。
自定义块可以发布到 Hugging Face Hub,并通过 trust_remote_code=True 被其他用户加载。该生态系统使社区能够共享不仅是模型权重,还包括在模块化管道中执行块所需的特定 Python 逻辑。
社区实现
已经有多个高性能管道使用 Modular Diffusers 框架实现:
- Krea 实时视频:一个从 Wan 2.1 蒸馏得到的 14B 参数模型,在单个 B200 GPU 上实现 11fps,支持文本到视频以及流式视频到视频。
- Waypoint-1:来自 Overworld 的 2.3B 参数实时扩散世界模型,可根据文本提示和控制输入生成交互式环境。
与 Mellon 的集成
Modular Diffusers 与 Mellon(一个基于节点的可视化工作流界面)集成。该集成依赖于模块块的一致 API(inputs、intermediate_outputs 和 expected_components),使得 Mellon 能够自动为块生成用户界面,而无需自定义 UI 代码。
Mellon 集成的关键特性包括:
- 动态节点:节点根据所选模型自适应其界面。
- 单节点工作流:能够将整个模块化管道折叠为单个节点,以减少画布杂乱。
- Hub 集成:发布到 Hub 的自定义块可以通过
repo_id加载到 Mellon 中,并自动配置。