下面我把范围先说清楚:
你问的“类似 Euler、Heun、DPM-Solver 这种定位的求解器”,我这里按扩散模型 / Flow Matching 推理阶段的通用采样器(scheduler / solver)来整理,而不把任务专用或模型专用的东西混进来,比如 RePaint、DDIM inverse、VQDiffusion、CogVideoX/Helios 专用调度器。这也是目前 Diffusers 文档对主流 scheduler 的组织方式:它把 Euler、Heun、LMS、PNDM、KDPM2、DPM-Solver、DEIS、UniPC、EDM、FlowMatch、LCM、TCD 等都放在同一类推理 scheduler 里。严格说不可能把学术史上“所有数值法”穷举完,所以下面给你的是今天主流生态里真正会用到的、比较完整的通用清单。(Hugging Face)
先给一句总判断:
- 老牌通用型:DDIM、Euler、Heun、LMS、PNDM、IPNDM、KDPM2
- 扩散特化高阶型:DEIS、DPM-Solver、DPM-Solver++、UniPC、DPM-Solver-v3
- 随机 / SDE / VE 型:Euler a、KDPM2 a、Karras VE、Score SDE VE/VP、SA-Solver
- 模型家族特化型:EDM Euler、EDM DPM-Solver、FlowMatch Euler/Heun、CM、LCM、TCD
这些方法的区别,主要不在“能不能生成图”,而在于:是 ODE 还是 SDE、是单步还是多步、是通用还是为某一模型家族特化、在 few-step 下是否更强。(Hugging Face)
1)通用确定性 ODE 求解器 / 历史基线
这一组最像“数值分析课里的通用 ODE 方法搬到扩散里来”。DDIM 是一阶隐式/确定性基线;Euler、Heun 来自 EDM 设计空间;LMS、PNDM、IPNDM 属于线性多步或伪数值方法;KDPM2 则是 k-diffusion 里 DPM2 那一路的二阶方法。它们共同特点是:兼容性强、容易理解、很多旧 UI / 老教程都能看到。(Hugging Face)
| 求解器 | 方法类型 | 随机性 | 核心特点 | 更适合的应用场景 | 不太适合 |
|---|---|---|---|---|---|
| DDIM | 一阶、隐式、非 Markov | 低/可近似无 | 老牌快速基线,逻辑清楚,兼容广 | 做基线对比、复现实验、旧模型兼容 | 极少步数时通常不如新高阶法 |
| Euler | 一阶 ODE | 低 | 简单、稳、快,很多框架默认好使 | 通用文生图、20~30 步左右的稳妥选择 | 5~8 步这种超低步数 |
| Heun | 二阶预测-修正 | 低 | 比 Euler 更准,但每步更贵 | 质量优先、愿意多花一点算力 | 极致追求吞吐量 |
| LMS | 线性多步 | 低 | 老牌多步法,历史上很常见 | 中等步数、老生态兼容 | 现在 few-step 常被新方法超过 |
| PNDM / PLMS | 伪数值法,RK + 线性多步 | 低 | 比早期 DDIM 更“数值法味儿” | 老的 latent diffusion / 老教程复现 | 现代 few-step 主战场 |
| IPNDM | 四阶改进伪线性多步 | 低 | 比 PNDM/PLMS 更高阶 | 想保留 PLMS 风格但更高阶 | 主流 UI 支持不如 DPM++ 普遍 |
| KDPM2 | 二阶 DPM2 路线 | 低 | 二阶、通常比一阶法更“讲究” | 中等步数下追求更好精度 | 超低步数未必占优 |
| KDPM2 a | 二阶 + ancestral | 高 | 在二阶基础上保留随机性 | 想要更多纹理感、风格发散 | 严格可复现、完全确定性场景 |
2)扩散特化的高阶快速求解器
这一组是现在最值得单独记住的。核心思想是:不要再把 diffusion ODE 完全当黑盒来解,而是利用它的特殊结构做高阶快速求解。DEIS 走的是 exponential integrator;DPM-Solver / DPM-Solver++ 是扩散专用高阶 ODE solver;UniPC 是统一的 predictor-corrector;DPM-Solver-v3 又在此基础上往 few-step 和大 guidance 做了进一步优化。总体上,这一组最适合“少步数还想保质量”。(Hugging Face)
| 求解器 | 方法类型 | 随机性 | 核心特点 | 更适合的应用场景 | 不太适合 |
|---|---|---|---|---|---|
| DEIS | 高阶 exponential integrator | 低 | 利用半线性结构减小离散误差 | 5~15 步 few-step 采样 | 生态支持不如 DPM++ 普及 |
| DPM-Solver (single-step) | 扩散专用高阶 ODE | 低 | 10~20 步就能出不错质量 | 无引导或轻引导的快速采样 | 强 guidance 下通常不如 ++ 稳 |
| DPM-Solver++ | 扩散专用高阶 ODE | 低 | 对 guided sampling 更友好 | 文生图、CFG 较高、现代通用默认首选之一 | 某些实现里参数较多,新手会迷糊 |
| DPMSolverMultistep / DPM++ 2M | 多步高阶 | 低 | 现在最常见的实战强项之一 | 日常文生图、图像质量和速度平衡 | 需要极强随机性的场景 |
| DPMSolverSinglestep / DPM++ 2S | 单步高阶 | 低 | 历史上常见,逻辑更直接 | 少步快速推理、便于理解 | 一般不如 2M 普遍 |
| DPM-Solver SDE / DPM++ SDE | 扩散特化 SDE 高阶 | 中/高 | 把高阶快解和随机性结合 | 想保留一点随机探索又想快 | 完全确定性复现 |
| UniPC | 统一预测-校正框架 | 低 | 尤其擅长极少步数 | 5~10 步的 few-step 采样 | 老旧框架不一定有 |
| DPM-Solver-v3 | 改进版高阶 ODE | 低 | 对 5~10 NFE、大 guidance 更强 | 追求 cutting-edge few-step 质量 | 工程落地还没 DPM++ 那么普及 |
| Cosine DPM-Solver | DPM-Solver 的 cosine 变体 | 低 | 面向 cosine/noise schedule 友好 | 音频扩散、Stable Audio Open 一类 | 一般图像模型默认首选并不是它 |
3)随机 / SDE / VE 家族求解器
这一组的思路是:不要完全走确定性 ODE,而是保留 SDE / ancestral 的随机性。它们常见于“我不只想稳,我还想要多样性、纹理感、发散感”的场景。Karras VE、Score SDE VE/VP 更偏 score-based / VE/VP 研究线;SA-Solver 则是把多步随机采样这件事做得更系统。(Hugging Face)
| 求解器 | 方法类型 | 随机性 | 核心特点 | 更适合的应用场景 | 不太适合 |
|---|---|---|---|---|---|
| Euler a | ancestral 一阶 | 高 | 简单直接,随机性足 | 想让结果更活、更有偶然性 | 严格复现、完全稳定 |
| Karras VE | VE 模型专用随机采样 | 高 | 专门给 variance-expanding 模型用 | VE 模型、需要 stochastic churn | VP / Flow Matching 模型 |
| Score SDE VE | VE-SDE | 高 | score-based VE 路线标准做法 | 研究 / 复现 VE score model | 主流 latent diffusion 实战 |
| Score SDE VP | VP-SDE | 高 | score-based VP 路线标准做法 | 研究 / 复现 VP score model | A1111/ComfyUI 日常出图 |
| SA-Solver | 随机 Adams 多步 SDE | 中/高 | 随机 few-step 的代表方法 | 想在少步数里兼顾质量与多样性 | 生态支持不如 DPM++ 普及 |
4)模型家族特化:EDM / Flow Matching / Consistency
这组非常重要,因为它们不是“万能黑盒 solver”,而是跟模型训练范式高度绑定。
- EDM 系:更适合按 Karras/EDM 参数化训练出来的模型。
- FlowMatch 系:更适合 SD3、FLUX 这类 Flow Matching / rectified flow 风格模型。
- CM / LCM / TCD 系:更适合 consistency / distilled few-step 模型,本来就是为“一步或极少步”服务的。(Hugging Face)
| 求解器 | 绑定的模型家族 | 随机性 | 核心特点 | 更适合的应用场景 | 不太适合 |
|---|---|---|---|---|---|
| EDMEuler | EDM / Karras 公式化 | 低 | EDM 里非常经典,20~30 步很稳 | EDM 训练模型的标准默认之一 | 非 EDM 模型硬套 |
| EDMDPMSolverMultistep | EDM + DPM-Solver++ | 低 | 把高阶快解放到 EDM 公式化里 | EDM 模型 + few-step | 普通 VP 模型不一定最优 |
| FlowMatch Euler | Flow Matching | 低 | FM 模型最自然的默认选项之一 | SD3/FLUX/LTX-Video 一类 FM 模型 | 非 FM 模型 |
| FlowMatch Heun | Flow Matching | 低 | 比 FM Euler 更精细 | FM 模型里偏质量优先 | 极限吞吐量 |
| CM Stochastic Iterative | Consistency Models | 中 | 原生支持一步和少步 | 原生 consistency model | 普通扩散模型直接换 solver |
| LCM Scheduler | Latent Consistency Models | 低/中 | 1~8 步非常快 | LCM / LCM-LoRA 极少步出图 | 追求最高保真、很多步慢慢磨 |
| TCD Scheduler | Trajectory Consistency Distillation | 中 | 比 LCM 更强调低步清晰度和细节 | TCD 模型、few-step 质量优先 | 非 TCD 权重直接套用 |
| DDIM(若放到这里看) | 扩散基线 | 低 | 很多蒸馏/一致性工作会拿它作老师或对照 | 做老师模型、做速度对照 | 现代强 few-step 首选 |
5)怎么选:直接给你实战版结论
如果你在普通文生图里只想先选一个稳妥默认,通常先试
DPM-Solver++ 多步(DPM++ 2M)或UniPC。前者是现代扩散采样里的常用强基线,后者在少步数时尤其强。(Hugging Face)
如果你想要更多随机性、更多风格发散,通常会优先试
Euler a、KDPM2 a、SA-Solver;如果模型本身是 VE 路线,再看Karras VE / Score SDE VE。(Hugging Face)
如果你的预算极低,只给 5~10 步,优先关注
UniPC、DEIS、DPM-Solver++、DPM-Solver-v3;如果模型本来就是蒸馏好的 few-step 模型,那就直接上LCM / TCD / CM。(Hugging Face)
如果你的模型是 Flow Matching,别再优先想 DPM++,通常先试
FlowMatch Euler,想更稳一点再试FlowMatch Heun。(Hugging Face)
如果你的模型是 EDM 训练出来的,先看
EDMEuler或EDMDPMSolverMultistep,因为它们就是按 EDM 公式化写的。(Hugging Face)
6)一句话记忆版
你可以把这些求解器粗暴记成下面四句:
- Euler / Heun / LMS / PNDM / IPNDM / KDPM2:通用数值法系
- DEIS / DPM-Solver / UniPC / DPM-Solver-v3:扩散特化高阶快解系
- Euler a / Karras VE / Score SDE / SA-Solver:随机 / SDE 系
- EDM / FlowMatch / CM / LCM / TCD:模型家族绑定系
如果你愿意,我下一条可以继续给你整理一版“这些 solver 在 A1111 / ComfyUI / Diffusers 里的对应关系表”。
二、以上哪些是Diffusion、哪些属于Flow-matching,哪些两者都能用?
可以,最不容易混淆的分法是:
按“实际模型家族兼容性”来分,不按数学名字来分。
因为像Euler、Heun这种名字,本质上是通用 ODE 数值法;
但在工程里,通常会分成:
- Diffusion 版实现:
EulerDiscreteScheduler、HeunDiscreteScheduler - Flow-Matching 版实现:
FlowMatchEulerDiscreteScheduler、FlowMatchHeunDiscreteScheduler
所以如果只看“Euler”这两个字,会误判。Hugging Face 的 scheduler 总览把这些实现明确分开列出;Flow Matching 原论文也明确说,FM 采样可以用现成的 ODE solver。(Hugging Face)
一句话总结
属于 Diffusion 的
大部分你上面提到的求解器,默认都属于 Diffusion 生态:
- DDIM
- EulerDiscrete / EDMEuler
- HeunDiscrete
- LMS
- PNDM / IPNDM
- KDPM2 / KDPM2 a
- DEIS
- DPM-Solver / DPM-Solver++
- DPM-Solver SDE
- UniPC
- DPM-Solver-v3
- Cosine DPM-Solver
- Euler a
- Karras VE
- Score SDE VE / VP
- SA-Solver
- EDMDPMSolverMultistep
- CM / LCM / TCD(它们不是 FM,更接近 consistency / distillation 路线,通常仍站在 diffusion 这边)
这些方法的官方文档或论文都直接写明是给diffusion ODE / diffusion models / VE/VP diffusion / score-based models用的。(Hugging Face)
属于 Flow-Matching 的
明确属于 FM 的,是名字里就写了FlowMatch的这两个:
- FlowMatch Euler
- FlowMatch Heun
Diffusers 文档把它们单独作为 FlowMatch scheduler 列出来;FlowMatchEulerDiscreteScheduler文档还直接写了它基于 Stable Diffusion 3 的 flow-matching sampling。(Hugging Face)
两者都能用的
如果你说的是数学方法层面,那真正“两边都能用”的主要是:
- Euler
- Heun
原因是它们本来就是通用 ODE solver,而 Flow Matching 论文明确说 FM 可以用现成的 ODE solver 来采样。与此同时,Diffusion 侧也早就有 Euler / Heun 版本。(arXiv)
但要特别注意:
“两者都能用”说的是数学方法,不代表你在代码里可以把同一个 scheduler 类直接乱套到两种模型上。
实际工程里一般还是要选对应实现:
- Diffusion 模型 →
EulerDiscreteScheduler/HeunDiscreteScheduler - Flow-Matching 模型 →
FlowMatchEulerDiscreteScheduler/FlowMatchHeunDiscreteScheduler(Hugging Face)
按你上面那一整份清单重新分类
| 名称 | 分类 | 说明 |
|---|---|---|
| DDIM | Diffusion | 来自 DDPM/DDIM 扩散采样线,不是 FM (Hugging Face) |
| Euler | 两者都能用 | 数学上是通用 ODE solver;工程上分 Diffusion 版和 FlowMatch 版 (arXiv) |
| Heun | 两者都能用 | 和 Euler 一样,数学上通用;工程上有 Diffusion 版和 FlowMatch 版 (arXiv) |
| LMS | Diffusion | Diffusers 放在 diffusion schedulers 里,历史上用于扩散采样 (Hugging Face) |
| PNDM | Diffusion | 伪数值法扩散采样器 (Hugging Face) |
| IPNDM | Diffusion | PNDM 改进版,仍属 diffusion 线 (Hugging Face) |