采样器详解
采样器(Sampler)决定扩散模型在反向去噪过程中「怎么走」——同样的噪声起点,不同采样器会走出截然不同的轨迹,最终图像的质量、速度、风格全因采样器而异。本页梳理从 DDPM 到 DPM++、再到 Rectified Flow(流匹配)的完整采样器谱系,并覆盖 2023-2025 年围绕一致性模型(Consistency Model)、少步蒸馏与 SD3/FLUX 流采样器的最新进展。前置阅读:扩散模型。
想象你从一座浓雾笼罩的山顶下山——山顶就是纯随机噪声,山脚是清晰图像——每一步该怎么走?
- DDPM(原始采样器)= 每步只往下挪一小步,走 1000 步才到山脚。风景很精细,但路途漫长。每一步还会被随机风(噪声)吹偏一点,所以每次下山的脚印都不一样。
- DDIM= 发现山路其实是「连续的」,不必每步都停——可以跳着走大步,20-50 步就能下山,快了 20-50 倍。关键在于关掉那股随机风(设噪声项为 0),让路径变成确定性的。
- Euler= 最朴素的「直线走」。给定当前点,沿梯度方向一步迈出。简单但偶尔会走过头——尤其步子迈大的时候。
- DPM / DPM++= 数学上更聪明的走法——把过去几步的「方向趋势」记下来,用常微分方程(ODE,一种描述连续变化的方程)预测最优路线。10-20 步就能出高质量图。
- Euler a(ancestral)= 每走一步就往身上撒点沙子(随机噪声)。路径不固定、画面更有「创造性」,但每次结果不一样,步数太少会模糊。
- Rectified Flow / 流匹配(2023-2025 新主流)= 不再沿着弯曲的山路绕行,而是先用一次「拉直」操作把山路整成一条几乎笔直的捷径,于是 4-8 步就能走完。Stable Diffusion 3、FLUX、SDXL Lightning 都采用了这条路。
- Consistency Model(一致性模型)= 干脆把整座山压缩成一步——训练一个网络,输入任意时刻的「半成品」都能直接预测山脚的最终图像,1-4 步出图。
关键区分:ancestral(带噪声)vs deterministic(确定性)。确定性采样器给定相同噪声种子永远出同一张图;ancestral 采样器每次都不同。第二条关键区分是 离散时间(DDPM/DDIM/DPM++)vs 连续时间 + 流匹配(Rectified Flow/Flow Matching)——后者把噪声到图像的路径当作一条「概率流」整体建模,而不是 1000 个离散小步。
反向扩散的基本框架
Section titled “反向扩散的基本框架”扩散模型的反向过程(详见扩散模型)本质上是在求解一个随机微分方程(SDE,Stochastic Differential Equation——一种带随机噪声项的微分方程)或其对应的常微分方程(ODE)。从纯噪声 x(T) 出发,每一步根据模型预测的噪声 ε 来计算 x(t-1)。
术语速解:模型真正学到的能力,是在任意噪声水平 t 下预测当前输入里「混进去了多少噪声」ε。知道了噪声就能反推出当前应有的干净图像 x₀,再据此往「更干净」的方向走一小步。
通用更新公式可以概括为:
不同采样器的区别在于三点:(1) 衰减系数怎么算(决定了「方向」的精度);(2) 要不要加噪声项(决定了是 ancestral 还是 deterministic);(3) 要不要利用历史梯度信息(决定了是低阶还是高阶方法)。
噪声调度(Noise Schedule):决定每步走多远
Section titled “噪声调度(Noise Schedule):决定每步走多远”噪声调度(noise schedule)定义了前向加噪时每一步加入多少噪声——反向采样时则等价地决定了每步要走多远。它是一组随时间 t 单调递增/递减的系数 β₁,…,β_T(或其累积形式 ᾱₜ)。
- 线性调度(DDPM 原始):β 从 0.0001 线性增到 0.02,简单但末端信噪比(SNR,Signal-to-Noise Ratio,信号与噪声的强度之比)过低,浪费步数。
- 余弦调度(Nichol & Dhariwal 2021):按余弦曲线衰减 ᾱ,使 SNR 在各步分布更均匀,同样步数下质量更高。
- Karras 调度(EDM 论文):基于 σ 参数化(用噪声标准差而非 ᾱ 表示时间),给出一条理论最优的 σ(t) 曲线,被 SDXL/SD3 默认采用。
- 流匹配 / Rectified Flow 的线性插值调度:直接在「噪声」和「图像」之间做线性插值 x(t) = (1−t)·noise + t·data,路径近乎直线——这就是 SD3/FLUX 的核心。
DDPM:ancestral 始祖
Section titled “DDPM:ancestral 始祖”DDPM(Denoising Diffusion Probabilistic Models)的反向过程每步都加入随机高斯噪声。更新公式为:
其中 z ~ N(0, I) 是标准高斯噪声(每次重新采样,故每次结果不同),α(t) 是单步系数、ᾱ(t) 是累积系数(cumalpha),σ(t) 控制每步加入的噪声量(与 β 调度直接相关)。DDPM 需要 1000 步才能生成高质量图像,速度极慢——在 2020 年初,生成一张 256×256 图像需要几十秒到数分钟。
DDIM:跳步加速
Section titled “DDIM:跳步加速”DDIM(Denoising Diffusion Implicit Models)的关键洞察是:去掉噪声项(设 σ(t) = 0),反向过程变成确定性 ODE。这允许大幅跳步——从 1000 步压缩到 20-50 步而质量几乎不降。DDIM 的更新公式:
其中第一步先预测干净图像 ,第二步再「重新加噪」到 时刻。
注意 DDIM 不加随机噪声,是确定性采样器。它还有个 eta 参数:η=0 完全确定性,η=1 退化为 DDPM,0 < η < 1 是中间态——通过调 η 可以在「稳定」与「多样」之间滑动。
数学直觉:DDIM 证明了一件事——前向加噪是一个马尔可夫链(每步只依赖上一步),但反向采样不必是马尔可夫链。只要保证边际分布(每步噪声的统计特性)正确,跳跃路径可以任意选取。这就是「跳步」得以成立的概率论根据。
DPM++:ODE 求解器家族
Section titled “DPM++:ODE 求解器家族”DPM-Solver 系列把扩散反向过程看作一个 ODE,并用高阶数值方法求解。这里「高阶」指的是用更多历史信息来估计导数(方向),从而允许更大步长而不丢失精度:
- DPM-Solver(一阶):相当于把 DDIM 的 ODE 用更准确的系数重写一遍。
- DPM++ 2M(二阶多步,multistep):只做一次模型前向(开销和一阶一样),但用前两步的预测 ε 做线性外推修正方向。10-20 步即可达到 DDIM 50 步的质量——是 SDXL 时代最常用的默认采样器。
- DPM++ 3M SDE(三阶多步 + 随机项):用前三步信息,方向估计更准,但步数太少时反而会过冲。
- UniPC(Unified Predictor-Corrector,2023):统一框架,在预测步后加一个校正步(corrector),10 步以内质量极佳,被纳入 ComfyUI 与新版 WebUI。
术语速解——多步法(multistep):低阶方法(如 Euler)只看「当前点 + 当前方向」就走;多步法额外记住前一两步的方向,相当于估计了「加速度」,所以能在同样步数下走得更准。代价是需要「启动」前几步(warm-up),通常用低阶方法补齐。
Ancestral 变体
Section titled “Ancestral 变体”在确定性采样器基础上每步注入随机噪声就得到 ancestral 版本(名称带 a 后缀),如 Euler a、DPM++ 2M a、DPM++ SDE。噪声带来「创造性」但也带来不稳定——步数太少时画面模糊、细节缺失。一个经验规律:ancestral 采样器的有效步数需要翻倍才能逼近对应确定性版本的质量。
Rectified Flow 与流匹配(2023-2025 新范式)
Section titled “Rectified Flow 与流匹配(2023-2025 新范式)”Rectified Flow(Liu et al. 2022/2023)和 Flow Matching(Lipman et al. 2023)提出了一个更优雅的视角:与其走弯曲的概率流 ODE,不如把「噪声 → 图像」的整条传输路径拉直(rectify)。具体做法分两步:
- 训练阶段:先用任意方法(如标准扩散)生成一批「噪声-图像」配对,然后拟合一条连接两者的直线路径 x(t) = (1−t)·x_noise + t·x_data。模型学的是这条直线上的速度场 v(x(t), t) = ∂x/∂t。
- 采样阶段:因为路径近乎直线,沿 v 方向走只需极少步数——经验上 4-8 步即可,且可以用最简单的 Euler 法。
Stable Diffusion 3(2024)和 Black Forest Labs 的 FLUX.1(2024)都采用了 Rectified Flow + MM-DiT(多模态 Diffusion Transformer,详见 DiT 架构)。SD3 的文本指出,相比传统余弦噪声调度,Rectified Flow 在少步采样(<25 步)下显著占优。
和 DPM++ 的关系:DPM++ 是在「旧的弯曲路径」上做高阶数值求解来减少步数;Rectified Flow 是直接「换一条更直的路」。后者从源头解决问题,所以即便是 Euler 这种一阶方法也能在 5 步内出好图。
一致性模型与少步蒸馏(2023-2025)
Section titled “一致性模型与少步蒸馏(2023-2025)”一致性模型(Consistency Model, Song et al. 2023)走得更极端:训练一个网络 f(x(t), t),使得对同一条采样轨迹上的任意时刻 t,f 都输出同一个 x₀(即满足「一致性」性质 f(x(t), t) = f(x(t’), t’) = x₀)。一旦训练好,一步就能从噪声得到图像。
两条训练路径:
- 一致性蒸馏(Consistency Distillation, CD):把一个已训练好的扩散模型作为老师,学生只学一致性约束。
- 一致性训练(Consistency Training, CT):从零开始,无需老师。
实际落地最广的是 潜在一致性模型(Latent Consistency Model, LCM)——把一致性蒸馏用在潜空间(latent space,VAE 压缩后的低维表示,详见 VAE)。LCM-SDXL、SDXL Lightning(ByteDance,2024)、Hyper-SD(2024)等可在 4-8 步生成接近 30 步 DPM++ 的质量,是 2024-2025 年最主流的「极速出图」方案。
术语速解——蒸馏(distillation):用一个强大但慢的「老师」模型,去训练一个轻量但快的「学生」模型,让学生的输出逼近老师。在采样器语境下,老师是 50 步的扩散模型,学生是 4 步的 LCM。
EDM / EDM2 统一框架(Karras 2022/2024)
Section titled “EDM / EDM2 统一框架(Karras 2022/2024)”Karras 等人在「Elucidating the Design Space of Diffusion-Based Generative Models」(EDM,NeurIPS 2022)中,把 DDPM、DDIM、score-based 等看似不同的采样器统一到一个参数化框架下——核心是用噪声标准差 σ 作为唯一的时间变量,并对网络的输入/输出做归一化(preconditioning),使模型在所有噪声水平下都处于数值稳定的范围。EDM2(2024) 进一步把这套框架扩展到 ImageNet 512×512 等高分辨率,并给出了精调训练超参的完整配方,被认为是当前「理论最干净」的扩散框架。
确定性 vs Ancestral 路径
Section titled “确定性 vs Ancestral 路径”三种范式对比:离散步、流匹配、一致性
Section titled “三种范式对比:离散步、流匹配、一致性”用 diffusers 对比不同采样器
Section titled “用 diffusers 对比不同采样器”import torchfrom diffusers import StableDiffusionPipelinefrom diffusers import ( DDIMScheduler, EulerDiscreteScheduler, DPMSolverMultistepScheduler, EulerAncestralDiscreteScheduler, FlowMatchEulerDiscreteScheduler, # SD3 / FLUX 用)
# 加载 Stable Diffusion 1.5pipe = StableDiffusionPipeline.from_pretrained( "runwayml/stable-diffusion-v1-5", torch_dtype=torch.float16).to("cuda")
prompt = "a cyberpunk cat, neon lights, highly detailed"
# 对比四种采样器,固定种子以保证公平schedulers = { "ddim": DDIMScheduler.from_config(pipe.scheduler.config), "euler": EulerDiscreteScheduler.from_config(pipe.scheduler.config), "dpm++_2m": DPMSolverMultistepScheduler.from_config(pipe.scheduler.config), "euler_a": EulerAncestralDiscreteScheduler.from_config(pipe.scheduler.config),}
for name, sched in schedulers.items(): pipe.scheduler = sched generator = torch.Generator("cuda").manual_seed(42) image = pipe(prompt, num_inference_steps=20, generator=generator).images[0] image.save(f"cat_{name}.png") print(f"{name}: 20步生成完成")# 经验结论:dpm++_2m 在 20 步内质量最优;euler_a 更有创造性但每次不同用 FLUX + Rectified Flow 做少步采样(2024-2025 主流)
Section titled “用 FLUX + Rectified Flow 做少步采样(2024-2025 主流)”import torchfrom diffusers import FluxPipeline
# FLUX.1-schnell 原生采用 Rectified Flow,4 步即可出图pipe = FluxPipeline.from_pretrained( "black-forest-labs/FLUX.1-schnell", torch_dtype=torch.bfloat16).to("cuda")
# FLUX 的时间步调度已被「拉直」,4 步足够image = pipe( "a cyberpunk cat, neon lights, highly detailed", num_inference_steps=4, guidance_scale=0.0, # schnell 版本经蒸馏,无需 CFG).images[0]image.save("flux_cat_4step.png")# 对比:传统 DPM++ 出同等质量需要 20+ 步用 LCM-LoRA 把任意 SDXL 加速到 4 步
Section titled “用 LCM-LoRA 把任意 SDXL 加速到 4 步”import torchfrom diffusers import StableDiffusionXLPipeline, LCMSchedulerfrom diffusers import AutoPipelineForText2Image
pipe = AutoPipelineForText2Image.from_pretrained( "stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16).to("cuda")
# 加载 LCM-LoRA 权重(无需重训,即插即用)pipe.load_lora_weights("latent-consistency/lcm-lora-sdxl")pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)
image = pipe( "a cyberpunk cat, neon lights, highly detailed", num_inference_steps=4, # 4 步! guidance_scale=1.5, # LCM 需要极低的 CFG).images[0]image.save("lcm_cat_4step.png")- 默认首选 DPM++ 2M:20-30 步即可出高质量图像,速度和质量的最佳平衡。大多数 SD1.5/SDXL 社区工作流默认使用它。
- SD3 / FLUX 用 Euler(Flow 版):这两类模型原生采用 Rectified Flow,调度器必须是
FlowMatchEulerDiscreteScheduler,搭配 4-20 步。混用旧调度器会得到严重失真的结果。 - 4-8 步极速出图用 LCM / Lightning / Hyper-SD:LCM-LoRA 可即插即用地给任意 SDXL 加速;ByteDance 的 SDXL Lightning 和 Tencent 的 Hyper-SD(2024)质量更稳,但需要换对应的 UNet 权重。
- 追求稳定用 Euler / DPM++(确定性):可复现,适合搭配 ControlNet(详见ControlNet 与可控生成)做精确控制——确定性采样器能保证结构条件被严格遵守。
- 追求多样性用 Euler a / DPM++ SDE:每次出图都有变化,适合探索创意方向,但不适合需要稳定复现的场景。
- 步数不是越多越好:超过一定步数(如 DPM++ 2M 超过 30 步),质量提升微乎其微,纯浪费时间。相反 ancestral 采样器步数太少会导致模糊。Rectified Flow / LCM 在超过推荐步数后甚至会变差(过冲)。
- CFG Scale 与采样器联动:CFG 高(8-12)时用确定性采样器更稳定;CFG 低(3-5)时 ancestral 采样器的噪声能增加自然感。LCM 系列必须用极低 CFG(1-2)。关于 CFG 的原理见 CFG 引导。
- 噪声调度与采样器要匹配:Karras 调度适合 DPM++ 系列;SD3/FLUX 必须用其专属的 flow 匹配调度。在 ComfyUI 中切换模型后记得检查 scheduler 是否匹配。
- 在 ComfyUI 中自由切换:ComfyUI 把采样器(sampler)和调度器(scheduler)拆成两个独立节点,可以零成本组合对比——详见ComfyUI 与节点式生成。
- Stable Diffusion WebUI / ComfyUI:采样器选择是出图调参的第一步,UI 直接提供下拉菜单切换。2024-2025 的 ComfyUI 已默认包含
euler、dpmpp_2m、dpmpp_2m_sde、uni_pc、euler_ancestral以及 FLUX 专用的 flow 采样器。 - 快速预览生成:用 LCM / FLUX schnell 4 步快速预览 prompt 效果,满意后再切 20-30 步 DPM++ 精修。
- 批量生成筛选:ancestral 采样器配合不同种子批量生成,从多张结果中挑选最佳——详见主流图像生成模型对比。
- 视频/动画生成:必须使用确定性采样器,否则帧间会闪烁——详见AnimateDiff 与 AI 动画。AnimateDiff 官方推荐 DPM++ 2M Karras + 25 步。
- 商业 API(Replicate / fal.ai / Together):2024-2025 的主流 API 默认走 FLUX + 4-8 步 flow 采样,或 SDXL Lightning + 4 步,在速度和质量间取平衡。fal.ai 的 FLUX schnell 端到端低于 0.5 秒。
- 实时生成(2024-2025 趋势):1-4 步的 LCM/Turbo/Lightning 使「实时绘画」「逐笔生成」(如 Krea、Freepik Mystic)成为可能——延迟从分钟级压到亚秒级,催生了一批交互式创意工具。
典型类库与工具
Section titled “典型类库与工具”| 类库 | 语言 | 说明 |
|---|---|---|
| diffusers schedulers | Python | HuggingFace diffusers 的采样器模块:DDIM、Euler、DPM++、UniPC、FlowMatchEuler、LCM 等 |
| ComfyUI KSampler | Python | ComfyUI 核心采样节点,支持几乎所有主流采样器,sampler 与 scheduler 拆分 |
| AUTOMATIC1111 WebUI | Python | 界面下拉菜单直接切换采样器,内置中文标注 |
| k-diffusion | Python | Kohya 的采样器实现库,ComfyUI 底层使用 |
| sgm / generative-models | Python | Stability AI 的库,含 SD3 专用 Rectified Flow 采样器 |
| FlowMatchEulerDiscreteScheduler | Python | diffusers 中专为 SD3/FLUX 提供的流匹配 Euler 采样器 |
| 术语 | 英文 | 解释 |
|---|---|---|
| 采样器 | Sampler | 扩散模型反向去噪过程的算法,决定从噪声到图像的路径 |
| 调度器 | Scheduler | diffusers 中采样器的正式名称,管理时间步和噪声调度 |
| 确定性采样器 | Deterministic Sampler | 给定相同噪声种子永远生成相同图像,不加随机噪声 |
| Ancestral 采样器 | Ancestral Sampler | 每步注入随机噪声,同一种子每次结果不同 |
| DDPM | DDPM | 最早的扩散采样器,1000 步加噪声,质量高但极慢 |
| DDIM | DDIM | 确定性跳步采样器,将 1000 步压缩到 20-50 步 |
| DPM++ | DPM-Solver++ | 基于高阶 ODE 求解的采样器家族,10-20 步出高质量图 |
| UniPC | Unified Predictor-Corrector | 预测 + 校正统一框架,10 步以内质量极佳(2023) |
| Euler | Euler | 最朴素的 ODE 一阶采样器,简单快速 |
| Rectified Flow | Rectified Flow | 把噪声到图像的传输路径「拉直」,使少步采样成为可能(SD3/FLUX) |
| 流匹配 | Flow Matching | 训练时拟合直线传输速度场的范式,与 Rectified Flow 等价 |
| 一致性模型 | Consistency Model | 训练网络使任意时刻输出同一最终图像,可 1 步生成 |
| LCM | Latent Consistency Model | 在潜空间做一致性蒸馏,4-8 步极速出图 |
| CFG Scale | Classifier-Free Guidance Scale | 控制生成结果对 prompt 的遵循程度,值越高越遵循但越僵 |
| 噪声调度 | Noise Schedule | 定义每一步加入/去除的噪声量随时间变化的函数 |
| Karras 调度 | Karras Schedule | EDM 论文提出的 σ 参数化调度,SDXL/SD3 默认采用 |
| 蒸馏 | Distillation | 用慢而强的老师模型训练快而轻的学生模型 |
| 步数 | Steps / num_inference_steps | 反向去噪的总步数,越多越精细但越慢(Rectified Flow/LCM 例外) |
- Ho et al.,「Denoising Diffusion Probabilistic Models」(NeurIPS 2020):DDPM 原始论文,提出逐步加噪去噪的完整框架,采样器谱系的起点。
- Song et al.,「Denoising Diffusion Implicit Models」(ICLR 2021):DDIM 论文,证明去掉随机噪声后可大幅跳步,将采样速度提升 20-50 倍。
- Lu et al.,「DPM-Solver: A Fast ODE Solver for Diffusion Models」(NeurIPS 2022):DPM-Solver 论文,用高阶 ODE 方法在 10-20 步内达到高质量采样。后续 DPM-Solver++、DPM-Solver v3 持续改进。
- Karras et al.,「Elucidating the Design Space of Diffusion-Based Generative Models」(NeurIPS 2022):EDM 论文,系统分析采样器设计空间,统一了不同采样器的理论框架。EDM2(2024) 进一步扩展到高分辨率。
- Liu et al.,「Flow Straight and Fast: Learning to Generate and Transfer Data with Rectified Flow」(ICLR 2023):Rectified Flow 原始论文,提出「拉直传输路径」的核心思想。
- Lipman et al.,「Flow Matching for Generative Modeling」(ICLR 2023):流匹配的等价形式,与 Rectified Flow 同源,是 SD3/FLUX 的理论基础。
- Esser et al.,「Scaling Rectified Flow Transformers for High-Resolution Image Synthesis」(SD3 论文, 2024):Stable Diffusion 3,首次把 Rectified Flow + MM-DiT 工业化落地,展示了流匹配在少步采样上的优势。
- Song et al.,「Consistency Models」(ICML 2023):一致性模型原始论文,开辟了 1-4 步生成的新范式。
- Luo et al.,「Latent Consistency Models」(2023):LCM 论文,把一致性蒸馏引入潜空间,催生了 LCM-LoRA 等即插即用加速方案。
- Zhao et al.,「UniPC: A Unified Predictor-Corrector Framework for Fast Sampling of Diffusion Models」(2023):UniPC 论文,统一预测-校正框架。
- ComfyUI 文档 - Sampling:ComfyUI 官方文档对各采样器的实用对比与推荐,偏工程实践。2024 年版已加入 FLUX flow 采样器说明。