Diffusers 中文指南:图像、视频与音频扩散模型库的三大组件、设计哲学与官方 Pipeline 全景
【免费下载链接】diffusers🤗 Diffusers: State-of-the-art diffusion models for image, video, and audio generation in PyTorch.项目地址: https://gitcode.com/GitHub_Trending/di/diffusers
🤗 Diffusers 是一个面向 PyTorch 的模块化扩散模型工具箱,提供覆盖图像、视频、音频乃至 3D 分子结构等多种模态的预训练扩散模型,既能以几行代码完成推理,也能支撑自定义模型训练。本文以官方中文首页 docs/source/zh/index.md 为核心骨架,结合仓库源码深入讲解库的三大核心组件(Pipelines、Schedulers、Models)、设计哲学、核心 API 用法以及官方支持的全部 Pipeline 一览表,帮助你快速建立对 Diffusers 的整体认知,并能够在此基础上按图索骥深入各个子模块。
库的定位:一个为推理与训练而生的模块化工具箱
🤗 Diffusers 的设计目标是成为生成式 AI 领域的首选扩散模型库:无论你只是想用预训练模型快速做推理,还是想从头训练自己的扩散模型,这个库都以"模块化工具箱"的形式为你提供支持。与一些追求"开箱即用黑盒"的库不同,Diffusers 明确宣称其设计更偏重于:
- 可用而非高性能(Usability over Performance)
- 简明而非简单(Simple over Easy)
- 易用而非抽象(Tweakable, contributor-friendly over Abstraction)
这三条原则的具体内涵在仓库文档 docs/source/en/conceptual/philosophy.md 中有完整阐述,后文会逐一展开。
从代码结构上看,库的主体位于 src/diffusers,其中三个最核心的子包恰好对应官方首页宣称的三大组件:
- src/diffusers/pipelines:最先进的扩散管道,几行代码即可完成推理;
- src/diffusers/schedulers:可互换的噪声调度器,用于平衡生成速度与质量;
- src/diffusers/models:可组合的预训练模型,作为构建端到端扩散系统的积木。
三大组件:Pipelines、Schedulers 与 Models
官方首页将库抽象为三个彼此独立、又可自由组合的部分,这是理解 Diffusers 一切用法的钥匙。
Diffusion Pipelines:端到端推理的最简入口
DiffusionPipeline是一个把"文本编码器 + 去噪模型 + 调度器 + VAE 解码器"等组件打包在一起的高级端到端类,设计目标就是"只需几行代码"完成推理。它在源码中的定义位于 src/diffusers/pipelines/pipeline_utils.py,继承自ConfigMixin与PushToHubMixin,并提供了两个核心类方法:
from_pretrained(pipeline_utils.py 第 640 行):从 Hugging Face Hub 或本地目录加载整个管道,自动下载并缓存所有子组件;save_pretrained(pipeline_utils.py 第 254 行):将管道连同model_index.json配置一起保存,便于分享与复用。
一个典型的推理调用只需三步:
from diffusers import DiffusionPipeline # 1. 加载管道(自动下载并缓存全部组件) pipeline = DiffusionPipeline.from_pretrained("stable-diffusion-v1-5/stable-diffusion-v1-5") # 2. 与 PyTorch 一致的设备管理 pipeline.to("cuda") # 3. 传入提示词,一步生成 image = pipeline("An image of a squirrel in Picasso style").images[0] image.save("image_of_squirrel_painting.png")from_pretrained加载后,管道内部会按model_index.json组装子组件。以 Stable Diffusion 为例,其管道由UNet2DConditionModel(去噪骨干)、AutoencoderKL(图像与潜空间互转)、PNDMScheduler(去噪调度器)以及 CLIP 文本编码器等组成,这些组件同时以同名属性暴露在管道对象上,因此可以像下面这样自由更换调度器:
from diffusers import StableDiffusionPipeline, EulerDiscreteScheduler pipeline = StableDiffusionPipeline.from_pretrained("stable-diffusion-v1-5/stable-diffusion-v1-5") pipeline.scheduler = EulerDiscreteScheduler.from_config(pipeline.scheduler.config)这也印证了首页"调度器可交替使用"的描述——更换调度器不需要重新加载模型权重。
Noise Schedulers:掌控去噪节奏的算法组件
调度器负责定义两件事:训练时如何逐步向样本添加噪声(前向加噪),推理时如何从噪声中一步步还原出数据样本(反向去噪)。它们是无参数的纯算法组件,全部位于 src/diffusers/schedulers,一个 Python 文件对应一种调度算法。当前仓库中已经收录了相当丰富的调度器家族,例如:
- 经典家族:
DDPM(scheduling_ddpm.py)、DDIM(scheduling_ddim.py)、PNDM(scheduling_pndm.py); - 高阶求解器:
DPMSolverMultistep(scheduling_dpmsolver_multistep.py)、UniPC、DEIS、SASolver等; - 离散步进家族:
EulerDiscrete(scheduling_euler_discrete.py)、EulerAncestralDiscrete、LMSDiscrete、KDPM2Discrete; - 蒸馏/一致性家族:
LCM(scheduling_lcm.py)、TCD、SCM、ConsistencyModels; - 流匹配家族:
FlowMatchEulerDiscrete(scheduling_flow_match_euler_discrete.py)、FlowMatchHeunDiscrete,广泛用于 Flux、SD3、LTX 等现代模型。
调度器的可互换性来自统一的接口约定:每个调度器都通过set_num_inference_steps设置去噪步数、通过timesteps属性暴露需要循环的时间步序列、通过step方法根据模型预测输出计算"更干净"的上一时刻样本。在快速上手文档 docs/source/zh/quicktour.md 中,给出了一个把UNet2DModel与DDPMScheduler组合起来手写去噪循环的完整示例,是理解"管道内部到底发生了什么"的最佳起点。
Models:可自由混搭的预训练构建模块
模型是可配置、可微调、可替换的构建模块,默认以最高精度加载。所有模型都继承自ModelMixin与ConfigMixin,并通过from_pretrained加载、save_pretrained保存。从源码目录 src/diffusers/models 可以看到,模型按架构类型分目录组织:
- src/diffusers/models/autoencoders:各类 VAE 自动编码器,例如
AutoencoderKL(定义于 autoencoder_kl.py),负责图像与潜空间的编解码,其关键超参数包括in_channels、latent_channels、scaling_factor(用于对潜空间做方差归一化)等; - src/diffusers/models/transformers:以 Transformer 为骨干的扩散模型,如
transformer_flux.py、transformer_wan.py等; - src/diffusers/models/unets:U-Net 架构的去噪模型,如
UNet2DConditionModel; - 以及
embeddings.py、normalization.py等被各模型共享的标准模块。
官方首页特别强调"模型可作为构建模块,与调度器结合创建你自己的端到端扩散系统"。由于模型与调度器之间依赖极小、接口清晰,你可以像搭积木一样把不同论文中的组件拼装起来做实验,这也是 Diffusers 区别于"一把梭"式推理框架的核心价值。
设计哲学:为什么 Diffusers 长这样
要正确使用和贡献 Diffusers,理解其设计哲学比记忆 API 更重要。官方首页用三句话概括,而 philosophy 文档 给出了完整论证:
可用性优先于高性能(Usability over Performance)
- 模型默认以最高精度(float32)加载,且默认不做任何激进优化,确保在不同平台和加速器上开箱即用,无需复杂安装;
- 库保持轻量:必需依赖极少,把
accelerate、safetensors、onnx等作为可选的软依赖,性能优化(如半精度、量化、卸载)按需开启; - 代码追求自解释,避免过度使用 lambda 和魔法语法。
简明优先于简单(Simple over Easy)
- 遵循 PyTorch 的 API 习惯,例如设备管理交给用户的
pipeline.to(...); - 倾向于抛出清晰明确的错误信息,而不是静默"纠正"错误输入——教用户理解,而不是纵容用户偷懒;
- 模型与调度器分离:去噪循环由用户显式编写,虽然"麻烦",但换来的是更易调试、更自由地改造去噪过程、随时切换组件;
- 管道各组件独立成类、独立序列化:文本编码器、UNet、VAE 各自有独立文件,这直接催生了 DreamBooth、Textual Inversion 等只需微调单个组件的训练范式(相关训练脚本见 examples/dreambooth 与 examples/textual_inversion)。
可调优、对贡献者友好优先于抽象(Tweakable, contributor-friendly over Abstraction)
- 借鉴 Transformers 的单文件策略(single-file policy):一个类(管道/调度器/模型)的几乎全部代码写在单个自包含文件中,宁可复制粘贴,也不急于抽象;
- 这与流行的 DRY(Don't Repeat Yourself)原则背道而驰,但对快速演进的机器学习社区反而更有效:范式变化太快,难以建立长久有效的抽象;研究者希望直接改代码做实验;新贡献者不必担心改动会破坏库的其他核心功能。
从源码结构看,这一策略得到了严格执行:pipelines/下每个目录对应一个论文/项目/版本,schedulers/下一个文件对应一种调度算法,models/下按架构家族分文件存放,相似代码通过# Copied from注释机制保持同步。
官方 Pipeline 一览表(含任务与对应论文)
官方首页完整汇总了当时所有官方支持的 pipelines 及其对应论文,下表完整继承该清单,并补充了"当前仓库源码中可确认的新增管道"供对照。读者可根据任务类型(文本生成图像、图生图、修复、超分、视频生成、音频生成等)快速定位到最合适的管道,再进入对应源码目录深入研读。
首页官方管道清单(按任务分类)
| 管道 | 论文/来源 | 任务 |
|---|---|---|
| alt_diffusion | AltCLIP: Altering the Language Encoder in CLIP for Extended Language Capabilities | 文本引导的图像到图像生成 |
| audio_diffusion | Audio Diffusion | 无条件音频生成 |
| controlnet | Adding Conditional Control to Text-to-Image Diffusion Models | 文本引导的图像到图像生成(条件控制) |
| cycle_diffusion | Unifying Diffusion Models' Latent Space, with Applications to CycleDiffusion and Guidance | 文本引导的图像到图像生成 |
| dance_diffusion | Dance Diffusion | 无条件音频生成 |
| ddpm | Denoising Diffusion Probabilistic Models | 无条件图像生成 |
| ddim | Denoising Diffusion Implicit Models | 无条件图像生成 |
| if / if_img2img / if_inpainting | DeepFloyd IF(对应源码目录 src/diffusers/pipelines/deepfloyd_if) | 图像生成 / 图像到图像生成 |
| latent_diffusion / latent_diffusion_uncond | High-Resolution Image Synthesis with Latent Diffusion Models | 文生图 / 超分图像到图像 / 无条件图像生成 |
| paint_by_example | Paint by Example: Exemplar-based Image Editing with Diffusion Models | 图像引导的图像修复 |
| pndm | Pseudo Numerical Methods for Diffusion Models on Manifolds | 无条件图像生成 |
| score_sde_ve | Score-Based Generative Modeling through Stochastic Differential Equations | 无条件图像生成 |
| semantic_stable_diffusion | Semantic Guidance | 文本引导生成 |
| stable_diffusion_text2img | Stable Diffusion | 文本到图像生成 |
| stable_diffusion_img2img | Stable Diffusion | 文本引导的图像到图像生成 |
| stable_diffusion_inpaint | Stable Diffusion | 文本引导图像修复 |
| stable_diffusion_panorama | MultiDiffusion | 文本到全景图生成 |
| stable_diffusion_pix2pix | InstructPix2Pix | 文本引导图像编辑 |
| stable_diffusion_pix2pix_zero | Zero-shot Image-to-Image Translation | 文本引导图像编辑 |
| stable_diffusion_attend_and_excite | Attend-and-Excite: Attention-Based Semantic Guidance | 文本到图像生成 |
| stable_diffusion_self_attention_guidance | Improving Sample Quality Using Self-Attention Guidance | 文生图 / 无条件图像生成 |
| stable_diffusion_image_variation | Stable Diffusion Image Variations | 图像到图像生成 |
| stable_diffusion_latent_upscale | Stable Diffusion Latent Upscaler | 文本引导超分图像到图像 |
| stable_diffusion_model_editing | Editing Implicit Assumptions in Text-to-Image Diffusion Models | 文生图模型编辑 |
| stable_diffusion_2 | Stable Diffusion 2 | 文生图 / 修复 / 深度条件生成 / 超分 |
| stable_diffusion_safe | Safe Stable Diffusion | 文本引导生成(安全过滤) |
| stable_unclip | Stable unCLIP | 文生图 / 文本引导图像到图像 |
| text_to_video_sd | Modelscope's Text-to-video-synthesis Model in Open Domain | 文本到视频生成 |
| unclip | Hierarchical Text-Conditional Image Generation with CLIP Latents | 文本到图像生成 |
| versatile_diffusion | Versatile Diffusion: Text, Images and Variations All in One | 文生图 / 图像变体 / 图文双引导生成 |
| vq_diffusion | Vector Quantized Diffusion Model for Text-to-Image Synthesis | 文本到图像生成 |
当前仓库源码中可确认的新增管道
值得注意的是,首页表格反映的是文档编写时期的官方支持列表。随着仓库持续演进,src/diffusers/pipelines 目录下已新增大量管道目录,以下均可在当前仓库中直接找到源码确认存在,覆盖了图像、视频、音频等更广泛的模态:
- 图像生成类:
stable_diffusion、stable_diffusion_3、stable_diffusion_xl、flux、flux2、pixart_alpha、pixart_sigma、sana、qwenimage、kolors、kandinsky、kandinsky2_2、kandinsky3、kandinsky5、lumina、lumina2、hunyuan_image、ideogram4、krea2、glm_image、helios、anyflow等; - 视频生成类:
cogvideo、cogview3、cogview4、wan、ltx、ltx2、mochi、animatediff、stable_video_diffusion、hunyuan_video、hunyuan_video1_5、cosmos、latte、easyanimate等; - 音频生成类:
audioldm2、stable_audio、stable_audio_3等; - 条件控制与编辑类:
controlnet、controlnet_sd3、controlnet_hunyuandit、t2i_adapter、ip_adapters、pag、marigold、ledits_pp、chronoedit等; - 经典研究类:
ddpm、ddim、latent_diffusion、pndm、vq_diffusion、kandinsky等。
这种"管道目录即功能清单"的组织方式本身就是设计哲学的体现:想了解某个管道,直接打开对应目录下的pipeline_*.py文件即可通读全部逻辑。
学习路径导航:从快速上手到深度定制
官方首页为不同需求的读者规划了四条学习路线,对应仓库 docs 目录下的不同模块,本文一并整理如下(链接已转换为仓库根目录相对路径):
Tutorials(入门教程):掌握生成输出、搭建自定义扩散系统、训练扩散模型的基础技能,推荐首次接触 Diffusers 的读者从这里开始。中文版教程位于 docs/source/zh/tutorials,其中 autopipeline.md 讲解自动管道切换、basic_training.md 讲解基础训练、using_peft_for_inference.md 讲解用 PEFT/LoRA 做推理;此外 quicktour.md 是快速上手的必读入口。
How-to guides(操作指南):解决"如何加载管道、模型、调度器""如何针对特定任务使用管道""如何控制输出""如何优化推理速度""如何训练"等实战问题。中文版指南位于 docs/source/zh/using-diffusers,其中 schedulers.md 详细讲解调度器的加载、访问、更换与比较。
Conceptual guides(概念指南):理解库为什么这样设计,以及使用库的伦理准则与安全实现,核心文档即 docs/source/en/conceptual/philosophy.md。
Reference(API 参考):逐类逐方法的技术说明,见 docs/source/en/api(注意:首页表格中的
api/pipelines/overview等路径在文档目录中对应的是各管道与调度器的 API 详解)。
安装与快速开始
按照 docs/source/zh/quicktour.md 的说明,运行 Diffusers 需要三个基础依赖:
pip install --upgrade diffusers accelerate transformersaccelerate:加速推理与训练过程中的模型加载;transformers:运行 Stable Diffusion 等最流行扩散模型所必需的库(提供文本编码器等)。
如果你使用中文版首页进行学习,官方推荐从 quicktour.md 开始:先体验DiffusionPipeline的一键推理,再动手把UNet2DModel与DDPMScheduler组合起来手写去噪循环,从而真正理解管道内部的每一个步骤。更进一步,examples 目录下汇集了各类官方训练脚本(DreamBooth、LoRA、ControlNet、文本反转等),可以在此基础上微调出自己的模型。
小结
本文以官方中文首页为骨架,完整梳理了 Diffusers 的三大组件(Pipelines、Schedulers、Models)及其在 src/diffusers 源码中的对应实现,深入解读了"可用性优先、简明优先、贡献者友好优先"的设计哲学,并给出了覆盖图像、视频、音频多种模态的官方管道全景清单。理解这些底层设计,你就掌握了阅读 Diffusers 源码、自由组合模型与调度器、乃至向社区贡献新管道的方法论。后续无论是做推理、微调还是研究实验,都可以沿着本文给出的源码路径与文档路径继续深入。
【免费下载链接】diffusers🤗 Diffusers: State-of-the-art diffusion models for image, video, and audio generation in PyTorch.项目地址: https://gitcode.com/GitHub_Trending/di/diffusers
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考