菜单

模型系统

相关源文件

ComfyUI 的模型系统负责加载、管理和执行扩散模型及其相关组件(VAE、CLIP、ControlNet 等)。该系统处理内存优化、模型打补丁(通过 LoRA 等技术)并确保在不同硬件配置下的高效执行。

有关在工作流中执行模型的更多信息,请参阅执行系统。有关模型内存管理方式的详细信息,请参阅内存管理

架构概述

模型系统围绕几个关键组件构建,这些组件协同工作以处理模型加载、管理和执行的各个方面。

来源: comfy/model_patcher.py comfy/model_management.py comfy/model_base.py comfy/lora.py nodes.py534-571

ModelPatcher

ModelPatcher 类是管理模型和应用各种补丁的核心组件。

ModelPatcher 封装了模型,并提供了几个关键功能:

  1. 模型加载/卸载:控制模型何时加载到 VRAM 以及何时将其卸载
  2. 打补丁:在不更改原始权重的情况下,对模型进行修改(例如 LoRA 权重)
  3. 钩子:允许在模型执行的各个点注入代码
  4. 模型选项:管理影响模型执行的选项

当通过像 CheckpointLoaderSimple 这样的节点加载检查点时,会创建一个 ModelPatcher 实例来管理该模型。

来源: comfy/model_patcher.py nodes.py551-571

BaseModel 和模型类型

BaseModel 类为 ComfyUI 中的不同类型的扩散模型提供了基础。

不同的模型类型使用不同的采样策略和计算。ModelType 枚举定义了可用的类型:

  • EPS:传统噪声预测,用于原始 Stable Diffusion
  • V_PREDICTION:速度预测,用于一些较新的模型
  • EDM:使用 EDM(Elucidating Diffusion Models)公式的模型
  • STABLE_CASCADE:用于 Stable Cascade 模型
  • 以及其他用于专用模型变体的类型。

BaseModel 实现的主要方法是 apply_model,该方法负责运行扩散过程的单个步骤。

来源: comfy/model_base.py comfy/model_base.py

模型加载与管理

ComfyUI 会根据可用 VRAM 智能地管理模型的加载和卸载。

模型管理系统通过以下主要功能工作:

  1. load_models_gpu():将模型加载到 GPU,决定每个模型的 VRAM 占用量
  2. free_memory():在需要 VRAM 来加载新模型时卸载模型
  3. 各种模型状态管理功能,用于跟踪已加载的模型及其内存使用情况。

该系统还根据硬件功能和用户设置处理不同的模型精度模式(fp32、fp16、bf16)。

来源: comfy/model_management.py comfy/model_management.py comfy/model_management.py

支持的模型架构

ComfyUI 通过配置系统支持各种模型架构。

每个模型架构类定义了:

  • UNet 配置:扩散模型结构的参数
  • 潜在格式:潜在表示的处理方式
  • 内存使用:内存优化因子
  • 状态字典处理器:用于处理模型不同部分的 state_dict 的方法

加载检查点时,ComfyUI 会检测架构类型并创建适当的模型实例。

来源: comfy/supported_models.py comfy/supported_models.py comfy/supported_models_base.py

CLIP、VAE 及其他模型组件

除了主要的扩散 UNet 之外,模型系统还管理着几个重要的模型组件。

这些组件在生成过程中协同工作:

  1. CLIP(Contrastive Language-Image Pre-training):将文本提示编码为嵌入,以指导扩散过程。
  2. VAE(Variational Autoencoder):将图像编码为/从扩散发生的潜在空间进行解码。
  3. ControlNet:基于输入图像对扩散过程进行条件控制。
  4. UNet:生成图像的核心扩散模型。

每个组件都有自己的加载器节点,并在 ModelPatcher 系统中进行管理。

来源: comfy/sd.py comfy/sd.py nodes.py nodes.py776-791

模型修补和 LoRA

LoRA(Low-Rank Adaptation)系统允许在不更改模型原始权重的情况下修改模型。

LoRA 打补丁过程包括:

  1. 从文件加载 LoRA 权重
  2. 为模型中每个受影响的权重创建补丁函数
  3. 将这些补丁添加到原始模型的克隆中
  4. 在模型执行期间,应用补丁来修改模型的行为。

ComfyUI 支持各种 LoRA 格式,并提供可调节的强度参数来控制 LoRA 对模型的强大程度。

来源: comfy/lora.py comfy/model_patcher.py nodes.py631-671

模型执行流程

模型执行时,会经历以下过程:

执行过程处理:

  1. 确保模型已加载到 VRAM 中
  2. 应用任何补丁(LoRA 等)
  3. 运行实际的模型前向传播
  4. 对结果进行后处理
  5. 如果 VRAM 不足,可选的模型卸载。

这种协调流程使 ComfyUI 能够有效地管理生成过程中的模型资源。

来源: comfy/model_base.py comfy/model_patcher.py execution.py266-392

高级模型配置

模型可以通过多种影响其行为的选项进行配置

这些选项允许

  • 对注意力层进行精细控制
  • 自定义分类器自由引导(CFG)的应用方式
  • 替换模型中的特定模块
  • 调整模型不同部分的权重

诸如区域提示、交叉注意力控制和注意力精炼等高级技术通过这些选项实现。

来源: comfy/model_patcher.py51-83 comfy/model_base.py146-161

模型检测与推断

ComfyUI 可以自动从检查点文件中检测模型类型

模型检测系统会检查状态字典的键和配置以确定

  • 模型架构(SD1.5、SD2.0、SDXL 等)
  • 模型类型(EPS、V-prediction 等)
  • 各种模型参数和配置

这使得 ComfyUI 能够以最少的用户配置加载检查点。

来源: comfy/model_detection.py9-34 comfy/model_detection.py37-79 comfy/sd.py566-605

总结

ComfyUI 中的模型系统是一个复杂的框架,用于管理不同架构和硬件约束下的 AI 模型。它提供

  1. 高效的模型加载和内存管理
  2. 支持各种模型架构和类型
  3. 灵活的补丁系统用于自定义模型
  4. 自动模型检测和配置
  5. 用于控制模型行为的高级选项

通过理解模型系统,用户和开发人员可以更好地利用 ComfyUI 的能力来创建和微调 AI 图像生成工作流程。

来源: comfy/model_patcher.py comfy/model_base.py comfy/model_management.py comfy/sd.py comfy/lora.py