huggingface / diffusers

huggingface/diffusers

open_in_new前往仓库

🤗 Diffusers:基于PyTorch的图像、视频和音频生成扩散模型,采用最先进技术。

项目概览

项目概述

🤗 Diffusers 是 Hugging Face 团队开发的一个用于生成图像、音频和 3D 分子结构的先进扩散模型库。它基于 PyTorch,提供了一套模块化的工具箱,既支持简单的推理,也支持训练自定义扩散模型。该库的设计理念强调可用性优先于性能、简单优于复杂、可定制性优于抽象。

核心功能

  • 扩散管道(Pipelines):提供多种预训练扩散模型的推理管道,只需几行代码即可生成图像、视频和音频。
  • 噪声调度器(Schedulers):支持多种可互换的噪声调度器,用于控制扩散速度和输出质量。
  • 预训练模型(Models):提供可作为构建模块的预训练模型,可与调度器组合,构建端到端的扩散系统。
  • 训练支持:支持训练自定义扩散模型,包括 DreamBooth、LoRA 等训练方法。
  • 社区贡献:支持社区管道(Community Pipelines)和社区训练示例,鼓励开源贡献。

适用与不适用场景

适用场景:

  • 文本到图像生成(如 Stable Diffusion、Flux 等)
  • 图像到图像转换(如 img2img、inpainting、outpainting)
  • 文本到视频生成(如 CogVideoX、HunyuanVideo 等)
  • 音频生成(如 ACE-Step)
  • 超分辨率、图像变化等高级图像处理
  • 研究和教育目的,学习和实验扩散模型

不适用场景:

  • 需要极高性能的实时生成场景(库设计优先考虑可用性而非性能)
  • 非 PyTorch 框架的项目(库基于 PyTorch)
  • 需要完全抽象化的场景(库强调可定制性,可能暴露较多底层细节)

技术架构与依赖

  • 编程语言:Python
  • 深度学习框架:PyTorch
  • 主要依赖:torch、transformers、accelerate、safetensors、PIL 等(具体依赖列表见仓库的 setup.py)
  • 可选依赖:controlnet_aux(用于 ControlNet 辅助工具)、peft(用于 LoRA 等适配器)等
  • 架构组件:
    • 管道(Pipelines):如 DiffusionPipeline、StableDiffusionPipeline 等
    • 模型(Models):如 UNet2DModel、AutoencoderKL、Transformer2DModel 等
    • 调度器(Schedulers):如 DDPMScheduler、DDIMScheduler 等
    • 加载器(Loaders):如 FromSingleFileMixin、LoraLoaderMixin 等

安装与快速开始

安装(推荐在虚拟环境中):

使用 pip:

pip install --upgrade diffusers[torch]

使用 conda:

conda install -c conda-forge diffusers

快速开始:

文本到图像生成:

from diffusers import DiffusionPipeline
import torch

pipeline = DiffusionPipeline.from_pretrained("stable-diffusion-v1-5/stable-diffusion-v1-5", dtype=torch.float16)
pipeline.to("cuda")
pipeline("An image of a squirrel in Picasso style").images[0]

自定义扩散系统(使用模型和调度器):

from diffusers import DDPMScheduler, UNet2DModel
from PIL import Image
import torch

scheduler = DDPMScheduler.from_pretrained("google/ddpm-cat-256")
model = UNet2DModel.from_pretrained("google/ddpm-cat-256").to("cuda")
scheduler.set_timesteps(50)

sample_size = model.config.sample_size
noise = torch.randn((1, 3, sample_size, sample_size), device="cuda")
input = noise

for t in scheduler.timesteps:
    with torch.no_grad():
        noisy_residual = model(input, t).sample
        prev_noisy_sample = scheduler.step(noisy_residual, t, input).prev_sample
        input = prev_noisy_sample

image = (input / 2 + 0.5).clamp(0, 1)
image = image.cpu().permute(0, 2, 3, 1).numpy()[0]
image = Image.fromarray((image * 255).round().astype("uint8"))
image

典型使用方法

  • 加载预训练模型:使用 from_pretrained 方法从 Hugging Face Hub 加载模型、管道或调度器。
  • 推理:直接调用管道对象生成图像、视频或音频。
  • 训练:使用 examples 目录下的训练脚本(如 DreamBooth、LoRA)训练自定义模型。
  • 加载单文件模型:使用 from_single_file 方法加载 Automatic1111 等生态的单文件模型。
  • 使用适配器:通过 PEFT 库加载 LoRA 等适配器,实现个性化生成。
  • 社区管道:通过 custom_pipeline 参数加载社区贡献的管道。

配置与部署要点

  • 硬件要求:建议使用 NVIDIA GPU 以获得最佳性能,支持 Apple Silicon(M1/M2)的 MPS 加速。
  • 内存优化:可参考官方文档中的优化指南(如 FP16、注意力切片等)以减少内存占用。
  • 模型存储:模型默认从 Hugging Face Hub 下载,可设置环境变量 HF_HOME 等控制缓存位置。
  • 日志配置:可通过环境变量 DIFFUSERS_VERBOSITY 控制日志级别,DIFFUSERS_NO_ADVISORY_WARNINGS 禁用警告。
  • 部署:可结合 BentoML 等工具进行模型服务化部署。

限制、风险与许可证

  • 许可证:Apache-2.0
  • 限制:
    • 库设计优先考虑可用性,可能牺牲部分性能。
    • 依赖 PyTorch,不支持其他深度学习框架。
    • 部分高级功能(如某些模型)可能需要额外的依赖或硬件支持。
  • 风险:
    • 生成内容可能包含不适宜内容(NSFW),需自行处理安全过滤。
    • 模型可能受各自许可证限制,使用前需检查模型卡。
    • 社区贡献的代码可能未经充分测试,使用时需谨慎。

官方链接

信息来源和分析时间

  • 信息来源:GitHub 仓库 README、CONTRIBUTING.md、文档目录及 API 文档。
  • 分析时间:2026-07-03(基于最新发布版本日期)