菜单

采样器与调度器

相关源文件

本文档介绍了 ComfyUI 中的扩散采样系统,该系统协调去噪过程,将噪声转化为连贯的图像。采样系统包含两个主要组件:**调度器 (schedulers)**,用于确定噪声调度(随时间变化的 sigma 值);以及**采样器 (samplers)**,用于实现实际的去噪算法。

有关采样过程中条件设置和引导机制的信息,请参阅 条件设置和引导。有关采样过程中使用的底层 UNet 和注意力机制的详细信息,请参阅 UNet 和注意力

系统架构

ComfyUI 的采样系统构建在 k-diffusion 库之上,并提供程序化和基于节点的接口来控制去噪过程。

采样流程架构

来源:comfy/samplers.py1-50 comfy/k_diffusion/sampling.py1-30 comfy_extras/nodes_custom_sampler.py1-50 comfy/sample.py1-53

调度器和噪声调度

调度器决定了去噪过程中使用的噪声水平(sigma 值)的序列。每个调度器都实现了不同的数学方法来对这些噪声水平进行间隔。

核心调度器函数

调度器功能描述
简单simple_scheduler()Sigma 空间中的线性间隔
DDIMddim_scheduler()去噪扩散隐式模型间隔
普通用户normal_scheduler()Timestep 空间中的线性间隔
Betabeta_scheduler()基于 Beta 分布的间隔
Karrasget_sigmas_karras()Karras 等人的噪声调度
指数级get_sigmas_exponential()指数间隔

调度器实现细节

simple_scheduler() 函数在 sigma 空间中实现基本的线性间隔

Karras 调度器实现了“揭示扩散模型生成设计的空间”中的噪声调度

  • 使用具有参数 rho(默认为 7.0)的幂律分布
  • 为许多模型提供更好的采样质量
  • 公式:(sigma_max^(1/rho) + t * (sigma_min^(1/rho) - sigma_max^(1/rho)))^rho

来源:comfy/samplers.py401-492 comfy/k_diffusion/sampling.py18-54 comfy_extras/nodes_custom_sampler.py11-173

采样算法

采样器实现了迭代去噪算法,它们使用 sigma 调度来逐步去除潜在表示中的噪声。

可用采样方法

类别采样器特性
欧拉方法eulereuler_ancestral简单的低阶方法
海恩方法heunheunpp2二阶方法,精度更高
DPM 方法dpm_2dpm_2_ancestraldpm_fastdpm_adaptiveDPM-Solver 系列
DPM++ 方法dpmpp_2s_ancestraldpmpp_sdedpmpp_2mdpmpp_3m_sde改进的 DPM-Solver 变体
专业ddpmlcmuni_pc特定任务的采样器

采样器实现模式

所有 k-diffusion 采样器都遵循在 KSAMPLER 类中实现的通用模式

  1. 噪声缩放:基于第一个 sigma 值应用初始噪声缩放
  2. 迭代去噪:对于调度中的每个 sigma
    • 调用模型获取去噪预测
    • 应用采样器的特定步进算法
    • 祖先采样器的可选噪声注入
  3. 最终缩放:应用反向噪声缩放以获得最终结果

sample_euler() 函数演示了基本模式

来源:comfy/k_diffusion/sampling.py145-169 comfy/samplers.py721-775 comfy_extras/nodes_custom_sampler.py302-481

采样流程集成

采样系统通过处理条件设置、CFG 引导和模型执行的主要采样函数来集成调度器和采样器。

核心采样函数

sampling_function() 是核心协调点,它

  1. 处理 CFG 优化:当 CFG 比例为 1.0 时跳过无条件评估
  2. 处理条件:调用 calc_cond_batch() 来评估条件和无条件预测
  3. 应用 CFG:使用 cfg_function() 将预测与引导比例相结合

该函数签名显示了关键参数

条件批处理系统

calc_cond_batch() 函数实现了条件评估的高效批处理

  • 基于 Hook 的分组:按 Hook 配置对条件进行分组以进行高效处理
  • 基于区域的优化:通过区域掩码处理区域条件
  • 内存管理:根据可用 GPU 内存动态调整批次大小

来源:comfy/samplers.py367-384 comfy/samplers.py201-346 comfy/samplers.py777-813

自定义采样节点

ComfyUI 通过调度器节点和采样器节点提供了一个全面的基于节点的接口,用于自定义采样工作流程。

调度器节点

节点类目的关键参数
BasicScheduler使用内置调度器schedulerstepsdenoise
KarrasSchedulerKarras 噪声调度sigma_maxsigma_minrho
ExponentialScheduler指数间隔sigma_maxsigma_min
BetaSamplingSchedulerBeta 分布alphabeta
SDTurboSchedulerSD-Turbo 特有stepsdenoise

采样器节点

节点类目的关键参数
KSamplerSelect从内置采样器中选择sampler_name
SamplerDPMPP_3M_SDEDPM++ 3M SDE,带选项etas_noisenoise_device
SamplerDPMPP_2M_SDEDPM++ 2M SDE,带求解器类型solver_typeetas_noise
SamplerEulerAncestralEuler Ancestral,带控制etas_noise
SamplerDPMAdaptative自适应 DPM 求解器orderrtolatolh_init

自定义采样工作流

SamplerCustom 节点提供对采样过程的完全控制

节点处理

  • 噪声生成:根据 add_noise 参数创建随机或空的噪声
  • 进度回调:与 ComfyUI 的进度系统集成
  • 内存管理:自动将结果移至中间设备
  • 潜在通道固定:确保正确的通道尺寸

来源:comfy_extras/nodes_custom_sampler.py501-553 comfy_extras/nodes_custom_sampler.py11-300 comfy_extras/nodes_custom_sampler.py302-481

高级采样器

UniPC 采样器

UniPC (Unified Predictor-Corrector) 采样器实现了一个复杂的、具有预测-校正步骤的多步方法。它在单独的模块中实现,并提供

  • 自适应阶数:根据步数自动调整求解器阶数
  • 预测-校正:使用预测和校正两个阶段以获得更高的精度
  • 多种变体:支持“bh1”、“bh2”和“vary_coeff”变体

专用采样功能

图像修复支持KSamplerX0Inpaint 类通过以下方式处理图像修复:

  • 将去噪预测与原始潜在内容混合
  • 在每一步应用去噪掩码
  • 支持随机和固定噪声模式

CFG++ 变体:一些采样器包含 CFG++ (Classifier-Free Guidance++) 实现,该实现修改了传统的 CFG 公式以获得更好的结果。

祖先采样:祖先变体通过 get_ancestral_step() 函数添加受控噪声注入,以保持正确的噪声水平。

来源:comfy/extra_samplers/uni_pc.py352-830 comfy/samplers.py386-400 comfy_extras/nodes_advanced_samplers.py8-103