Hugging Face 模块化 Diffusers 发布

Hugging Face 推出了 Modular Diffusers,这是一种框架,能够通过组合可重用的自包含块来构建扩散管道。该方法允许开发者混合搭配组件——例如文本编码、图像编码、去噪和解码——以创建定制工作流,而无需从头编写完整的管道。

可组合的管道架构

Modular Diffusers 通过引入 ModularPipeline 类来补充现有的 DiffusionPipeline 类。该架构将工作流的定义与模型权重的加载分离,从而在内存管理和管道修改方面提供更大的灵活性。

关键操作工作流

  • 工作流定义:使用 ModularPipeline.from_pretrained(),用户在不立即加载权重的情况下定义块的顺序。
  • 权重加载:使用 .load_components() 方法来配置数据类型、量化并加载实际的模型权重。
  • 块操作:由于管道由灵活的块组成,用户可以检查、添加、删除或交换块。例如,文本编码器块可以从管道中弹出,并使用 .init_pipeline() 作为独立的管道运行。

自定义块开发

用户可以通过定义一个继承自 ModularPipelineBlocks 的 Python 类来创建自定义块。自定义块必须指定三个主要属性:

  1. expected_components:定义所需模型及其默认的 Hugging Face Hub 仓库路径。
  2. inputs:定义必需和可选的输入参数。
  3. 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(inputsintermediate_outputsexpected_components),使得 Mellon 能够自动为块生成用户界面,而无需自定义 UI 代码。

Mellon 集成的关键特性包括:

  • 动态节点:节点根据所选模型自适应其界面。
  • 单节点工作流:能够将整个模块化管道折叠为单个节点,以减少画布杂乱。
  • Hub 集成:发布到 Hub 的自定义块可以通过 repo_id 加载到 Mellon 中,并自动配置。

Sources