Diffusers documentation

Pipelines

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Pipelines

Pipelines 提供了一种简单的方式来运行最先进的扩散模型进行推理,它将所有必要的组件(多个独立训练的模型、调度器和处理器)封装到一个端到端的类中。Pipelines 具有灵活性,可以适配使用不同的调度器,甚至不同的模型组件。

所有流水线都基于 DiffusionPipeline 基类构建,该基类提供了加载、下载和保存所有组件的基本功能。使用 from_pretrained() 加载的特定流水线类型(例如 StableDiffusionPipeline)会被自动检测,其流水线组件会被加载并传递给流水线的 __init__ 函数。

不建议使用 DiffusionPipeline 类进行训练。扩散管线的各个组件(例如 UNet2DModel 和 UNet2DConditionModel)通常是单独训练的,因此我们建议直接对这些组件进行操作。


Pipelines 不提供任何训练功能。您会注意到,由于 torch.no_grad 装饰器应用于 __call__() 方法,PyTorch 的 autograd 已被禁用,因为 pipelines 不应用于训练。如果您对训练感兴趣,请查看 Training 指南!

使用侧边栏中的 API > Pipelines 可按模态浏览所有 pipeline 参考文档。对于面向任务的工作流,请从 Quickstart 或诸如 text-to-image、image-to-image、inpainting 或 video generation 等指南开始。

DiffusionPipeline

类 diffusers.DiffusionPipeline

< >

( )

所有管道的基类。

DiffusionPipeline 存储扩散流水线的所有组件(模型、调度器和处理器),并提供用于加载、下载和保存模型的方法。它还包含以下方法:

  • 将所有 PyTorch 模块移动到您选择的设备上
  • 启用/禁用去噪迭代的进度条

类属性:

  • config_name (str) — 用于存储扩散流水线所有组件的类名和模块名的配置文件名。
  • _optional_components (List[str]) — 所有无需传递给 pipeline 即可正常工作的可选组件列表(应由子类重写)。

__call__

( *args**kwargs )

将 self 作为函数调用。

设备

< >

( ) → torch.device

返回值

torch.device

流水线所在的 torch 设备。当组件分布在多个设备上时(例如,文本编码器在 CPU 上,而去噪主干网络在加速器上运行),将返回加速器设备。

到

< >

( *args**kwargs ) → DiffusionPipeline

参数

  • dtype (torch.dtype,可选) — 返回一个具有指定 dtype 的 pipeline
  • device (torch.Device,可选) — 返回一个使用指定 device 的 pipeline
  • silence_dtype_warnings (str,可选,默认为 False) — 如果目标 dtype 与目标 device 不兼容,是否省略警告。

Pipeline 已转换为指定的 dtype 和/或 dtype。

执行 Pipeline 的 dtype 和/或 device 转换。torch.dtype 和 torch.device 是从 self.to(*args, **kwargs). 的参数中推断出来的。

> 如果 pipeline 已经具有正确的 torch.dtype 和 torch.device,则直接返回该 pipeline。 否则,> 返回的 pipeline 是 self 的副本,并应用了所需的 torch.dtype 和 torch.device。

以下是调用 to 的方式:

  • to(dtype, silence_dtype_warnings=False) → DiffusionPipeline 返回一个具有指定 dtype 的 pipeline
  • to(device, silence_dtype_warnings=False) → DiffusionPipeline 用于返回一个使用指定 device 的 pipeline
  • to(device=None, dtype=None, silence_dtype_warnings=False) → DiffusionPipeline 返回一个具有指定 device 和 dtype 的 pipeline

组件

< >

( )

self.components 属性可用于在不重新分配额外内存的情况下,使用相同的权重和配置运行不同的流水线。

返回 (dict): 一个包含初始化流水线所需所有模块的字典。

示例:

>>> from diffusers import (
...     StableDiffusionPipeline,
...     StableDiffusionImg2ImgPipeline,
...     StableDiffusionInpaintPipeline,
... )

>>> text2img = StableDiffusionPipeline.from_pretrained("stable-diffusion-v1-5/stable-diffusion-v1-5")
>>> img2img = StableDiffusionImg2ImgPipeline(**text2img.components)
>>> inpaint = StableDiffusionInpaintPipeline(**text2img.components)

disable_attention_slicing

< >

( )

禁用切片注意力计算。如果之前调用过 enable_attention_slicing,则注意力将一次性计算完成。

disable_xformers_memory_efficient_attention

< >

( )

禁用来自 xFormers 的内存高效注意力。

下载

< >

( pretrained_model_name**kwargs ) → os.PathLike

参数

  • pretrained_model_name (str 或 os.PathLike,可选) — 一个字符串,即托管在 Hub 上的预训练流水线的 repository id(例如 CompVis/ldm-text2im-large-256)。
  • custom_pipeline (str, 可选) — 可以是以下之一:
    • 一个字符串,即托管在 Hub 上的预训练repository id(例如 CompVis/ldm-text2im-large-256)。该仓库必须包含一个名为 pipeline.py 的文件,用于定义自定义 pipeline。

    • 一个字符串,表示托管在 GitHub 上 Community 下的社区流水线的文件名。有效的文件名必须与文件名匹配,而不是流水线脚本(应为 clip_guided_stable_diffusion,而非 clip_guided_stable_diffusion.py)。社区流水线始终从 GitHub 的当前 main 分支加载。

    • 指向包含自定义流水线的目录(./my_pipeline_directory/)的路径。该目录必须包含一个名为 pipeline.py 的文件,用于定义该自定义流水线。

    > 🧪 这是一个实验性功能,未来可能会发生变化。

    有关如何加载和创建自定义管道的更多信息,请参阅如何贡献社区管道。

  • force_download (bool,可选,默认为 False) — 是否强制(重新)下载模型权重和配置文件,如果存在缓存版本则覆盖它们。
  • proxies (Dict[str, str],可选) — 按协议或端点使用的代理服务器字典,例如 {'http': 'foo.bar:3128', 'http://hostname': 'foo.bar:4012'}。每次请求都会使用这些代理。
  • output_loading_info(bool, 可选,默认为 False) — 是否同时返回一个包含缺失键、意外键和错误消息的字典。
  • local_files_only (bool,可选,默认为 False) — 是否仅加载本地的模型权重和配置文件。如果设置为 True,则不会从 Hub 下载模型。
  • token (str 或 bool,可选) — 用于远程文件的 HTTP bearer 授权令牌。如果为 True,则使用由 diffusers-cli login 生成的令牌(存储在 ~/.huggingface 中)。
  • revision (str, 可选, 默认为 "main") — 要使用的特定模型版本。它可以是分支名称、标签名称、提交 id,或 Git 允许的任何标识符。
  • custom_revision (str,可选,默认为 "main") — 要使用的特定模型版本。它可以是分支名称、标签名称或提交 ID,类似于从 Hub 加载自定义流水线时的 revision。当从 GitHub 加载自定义流水线时,它可以是 🤗 Diffusers 的版本号;否则,从 Hub 加载时默认为 "main"。
  • mirror (str, 可选) — 镜像源,用于解决在中国下载模型时可能遇到的访问问题。我们不保证该源的时效性或安全性,详情请参阅镜像站点。
  • variant (str, 可选) — 从指定的变体文件名(例如 "fp16" 或 "ema")加载权重。
  • use_safetensors (bool,可选,默认为 None) — 如果设置为 None,则在 safetensors 权重可用且已安装 safetensors 库的情况下,会下载 safetensors 权重。如果设置为 True,则强制从 safetensors 权重加载模型。如果设置为 False,则不加载 safetensors 权重。
  • use_onnx (bool,可选,默认为 False) — 如果设置为 True,则只要存在 ONNX 权重,就始终会下载它们。如果设置为 False,则永远不会下载 ONNX 权重。默认情况下,use_onnx 的默认值取决于 _is_onnx 类属性,对于非 ONNX 流水线,该属性为 False;对于 ONNX 流水线,该属性为 True。ONNX 权重包括以 .onnx 和 .pb 结尾的两种文件。
  • trust_remote_code (bool,可选,默认为 False) — 是否允许使用在 Hub 上以独立文件形式定义的自定义 pipeline 和组件。此选项仅应针对您信任且已阅读过其代码的仓库设置为 True,因为它会在您的本地机器上执行 Hub 上存在的代码。
  • use_flashpack (bool,可选,默认为 False) — 如果设置为 True,只要存在 FlashPack 权重,就始终会下载它们。如果设置为 False,则永远不会下载 FlashPack 权重。

返回值

os.PathLike

已下载流水线的路径。

从预训练流水线权重中下载并缓存一个 PyTorch 扩散流水线。

> 若要使用私有或 受控模型,请先通过 `hf > auth login` 登录

enable_attention_slicing

< >

( slice_size: str | int = 'auto' )

参数

  • slice_size (str 或 int,可选,默认为 "auto") — 当值为 "auto" 时,将输入到注意力头的数据减半,因此注意力计算将分两步进行。如果值为 "max",则每次只运行一个切片,从而节省最大量的内存。如果提供了数字,则使用 attention_head_dim // slice_size 个切片。在这种情况下,attention_head_dim 必须是 slice_size 的倍数。

启用切片注意力计算。启用此选项后,注意力模块会将输入张量切分为多个切片,分步计算注意力。当存在多个注意力头时,计算将按顺序针对每个头执行。此功能可用于节省部分内存,代价是速度略有下降。

> ⚠️ 如果您已经在使用 PyTorch > 2.0 或 xFormers 中的 scaled_dot_product_attention(SDPA),请勿启用注意力切片。这些注意力计算本身已经非常节省内存,因此您无需启用 > 此功能。如果在 SDPA 或 xFormers 上启用注意力切片,可能会导致严重的性能下降!

示例:

>>> import torch
>>> from diffusers import StableDiffusionPipeline

>>> pipe = StableDiffusionPipeline.from_pretrained(
...     "stable-diffusion-v1-5/stable-diffusion-v1-5",
...     dtype=torch.float16,
...     use_safetensors=True,
... )

>>> prompt = "a photo of an astronaut riding a horse on mars"
>>> pipe.enable_attention_slicing()
>>> image = pipe(prompt).images[0]

enable_group_offload

< >

( onload_device: deviceoffload_device: device = torch.device()offload_type: str = 'block_level'num_blocks_per_group: int | None = Nonenon_blocking: bool = Falseuse_stream: bool = Falserecord_stream: bool = Falselow_cpu_mem_usage = Falseoffload_to_disk_path: str | None = Noneexclude_modules: str | list[str] | None = None )

参数

  • onload_device (torch.device) — 模块组被加载到的设备。
  • offload_device (torch.device,默认为 torch.device("cpu")) — 模块组被卸载到的设备。通常应为 CPU。默认值为 CPU。
  • offload_type (str 或 GroupOffloadingType,默认为 “block_level”) — 要应用的卸载类型。可以是 “block_level” 或 “leaf_level” 之一。默认为 “block_level”。
  • offload_to_disk_path (str,可选,默认为 None) — 参数将被卸载到的目录路径。在内存受限的环境中,若希望获得合理的速度与内存之间的权衡,设置此选项会很有用。
  • num_blocks_per_group (int, 可选) — 当使用 offload_type=“block_level” 时,每个组中的块数。使用 offload_type=“block_level” 时,此参数为必填项。
  • non_blocking (bool,默认为 False) — 如果为 True,则使用非阻塞数据传输进行卸载和加载。
  • use_stream (bool,默认为 False) — 如果为 True,则使用 CUDA 流异步执行卸载和加载操作。这有助于重叠计算和数据传输。
  • record_stream (bool,默认为 False) — 当与 use_stream 一起启用时,它会将当前张量标记为已被此流使用。这种方式速度更快,但会略微增加内存占用。有关更多详细信息,请参阅 PyTorch 官方文档。
  • low_cpu_mem_usage (bool,默认为 False) — 如果为 True,将通过即时固定张量(而非预先固定)来最小化 CPU 内存使用。 此选项仅在使用流式 CPU 卸载(即 use_stream=True)时才有意义。当 CPU 内存成为瓶颈时,此选项可能有用,但可能会抵消使用流所带来的好处。
  • exclude_modules (Union[str, List[str]],默认为 None) — 要从 offloading 中排除的模块列表。

对 torch.nn.Module 的内部层应用组卸载。要了解什么是组卸载以及它在哪些场景下有益,我们首先需要介绍其他受支持的卸载方法的工作原理。

通常,卸载操作在两个层面进行:

  • 模块级:在 Diffusers 中,可以使用 ModelMixin::enable_model_cpu_offload() 方法启用此功能。其工作原理是将 pipeline 的每个组件卸载到 CPU 上进行存储,并在需要计算时加载到加速器设备上。与将所有组件都保留在加速器上相比,此方法在内存效率上更优,但内存需求仍然相当高。要使此方法正常工作,所需的内存量相当于运行时数据类型下模型的大小加上最大的中间激活张量的大小,以便能够完成前向传播。
  • 叶级:在 Diffusers 中,可以使用 ModelMixin::enable_sequential_cpu_offload() 方法启用此功能。 其工作原理是将计算图中最底层的叶级参数卸载到 CPU 上进行存储, 并在计算时仅将这些叶级参数加载到加速器设备上。这种方式使用的加速器内存最少,但由于设备同步次数过多,速度可能会变慢。

Group offloading 是介于这两种方法之间的折中方案。它通过卸载内部层的分组(即 torch.nn.ModuleList 或 torch.nn.Sequential)来工作。与模块级卸载相比,该方法使用的内存更少。同时,由于减少了设备同步的次数,它也比 leaf-level/sequential offloading 更快。

另一个受支持的功能(适用于支持异步数据传输流的 CUDA 设备)是能够重叠数据传输与计算,从而与顺序卸载相比缩短整体执行时间。这通过带流的层预取来实现,即在执行当前层的同时,下一层开始向加速器设备加载——这会略微增加内存需求。请注意,此实现也支持叶级卸载,但在使用流时可以显著提速。

示例:

>>> from diffusers import DiffusionPipeline
>>> import torch

>>> pipe = DiffusionPipeline.from_pretrained("Qwen/Qwen-Image", dtype=torch.bfloat16)

>>> pipe.enable_group_offload(
...     onload_device=torch.device("cuda"),
...     offload_device=torch.device("cpu"),
...     offload_type="leaf_level",
...     use_stream=True,
... )
>>> image = pipe("a beautiful sunset").images[0]

enable_model_cpu_offload

< >

( gpu_id: int | None = Nonedevice: typing.Union[torch.device, str] = None )

参数

  • gpu_id (int, 可选) — 用于推理的加速器 ID。如果未指定,则默认为 0。
  • device (torch.Device 或 str,可选,默认为 None) — 用于推理的加速器的 PyTorch 设备类型。如果未指定,将自动检测可用的加速器并使用。

使用 accelerate 将所有模型卸载到 CPU,在性能影响较小的情况下降低内存占用。与 enable_sequential_cpu_offload 相比,该方法在调用某个模型的 forward 方法时,将整个模型一次性移至加速器,并且该模型会一直保留在加速器上,直到下一个模型开始运行。与 enable_sequential_cpu_offload 相比,此方法的内存节省幅度较小,但由于 unet 的迭代执行,其性能要好得多。

enable_sequential_cpu_offload

< >

( gpu_id: int | None = Nonedevice: typing.Union[torch.device, str] = None )

参数

  • gpu_id (int, 可选) — 用于推理的加速器 ID。如果未指定,则默认为 0。
  • device (torch.Device 或 str,可选,默认为 None) — 用于推理的加速器的 PyTorch 设备类型。如果未指定,将自动检测可用的加速器并使用。

使用 🤗 Accelerate 将所有模型卸载到 CPU,从而显著降低内存占用。调用时,所有 torch.nn.Module 组件(self._exclude_from_cpu_offload 中的除外)的状态字典会被保存到 CPU,然后移至 torch.device('meta'),仅当特定子模块的 forward 方法被调用时才加载到加速器上。卸载以子模块为单位进行。与 enable_model_cpu_offload 相比,内存节省更多,但性能较低。

enable_xformers_memory_efficient_attention

< >

( attention_op: typing.Optional[typing.Callable] = None )

参数

启用来自 xFormers 的内存高效注意力机制。启用此选项后,您应能观察到更低的 GPU 内存占用,并且在推理期间可能会获得加速。训练期间的加速并不保证。

> ⚠️ 当同时启用 memory efficient attention 和 sliced attention 时,memory efficient attention 具有 > 优先权。

示例:

>>> import torch
>>> from diffusers import DiffusionPipeline
>>> from xformers.ops import MemoryEfficientAttentionFlashAttentionOp

>>> pipe = DiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-2-1", dtype=torch.float16)
>>> pipe = pipe.to("cuda")
>>> pipe.enable_xformers_memory_efficient_attention(attention_op=MemoryEfficientAttentionFlashAttentionOp)
>>> # Workaround for not accepting attention shape using VAE for Flash Attention
>>> pipe.vae.enable_xformers_memory_efficient_attention(attention_op=None)

from_pipe

< >

( pipeline**kwargs ) → DiffusionPipeline

参数

  • pipeline (DiffusionPipeline) — 用于创建新 pipeline 的源 pipeline。

返回值

DiffusionPipeline

一个具有与 pipeline 相同权重和配置的新流水线。

从给定的 pipeline 创建一个新的 pipeline。此方法适用于利用现有 pipeline 的组件创建新 pipeline,而无需重新分配额外的内存。

示例:

>>> from diffusers import StableDiffusionPipeline, StableDiffusionSAGPipeline

>>> pipe = StableDiffusionPipeline.from_pretrained("stable-diffusion-v1-5/stable-diffusion-v1-5")
>>> new_pipe = StableDiffusionSAGPipeline.from_pipe(pipe)

from_pretrained

< >

( pretrained_model_name_or_path: str | os.PathLike**kwargs )

参数

  • pretrained_model_name_or_path (str 或 os.PathLike, 可选) — 可以是以下之一: Hub 上托管的预训练管道的仓库 ID(例如 CompVis/ldm-text2im-large-256)。 一个目录的路径(例如 ./my_pipeline_directory/),其中包含使用 save_pretrained() 保存的管道权重。
    • 一个字符串,即托管在 Hub 上的预训练流水线的 repo id(例如 CompVis/ldm-text2im-large-256)。
    • 指向一个 目录(例如 ./my_pipeline_directory/)的路径,该目录包含使用 save_pretrained() 保存的流水线权重。
  • dtype (torch.dtype 或 dict[str, Union[str, torch.dtype]],可选) — 覆盖默认的 torch.dtype,并使用其他 dtype 加载模型。若要为不同的子模型加载不同的 dtype,请传入一个 dict(例如 {'transformer': torch.bfloat16, 'vae': torch.float16})。使用 default 为未指定的组件设置默认 dtype(例如 {'transformer': torch.bfloat16, 'default': torch.float16})。如果某个组件未指定且未设置默认值,则使用 torch.float32。
  • custom_pipeline (str, 可选) —

    > 🧪 这是一个实验性功能,未来可能会发生变化。

    可以是以下之一:

    • 一个字符串,即托管在 Hub 上的自定义流水线的 repo id(例如 hf-internal-testing/diffusers-dummy-pipeline)。该仓库必须包含一个名为 pipeline.py 的文件,用于定义该自定义流水线。
    • 一个字符串,表示托管在 GitHub 上 Community 下的社区流水线的文件名。有效的文件名必须与文件名匹配,而不是流水线脚本(应为 clip_guided_stable_diffusion,而非 clip_guided_stable_diffusion.py)。社区流水线始终从 GitHub 的当前 main 分支加载。
    • 指向包含自定义 pipeline 的目录的路径(./my_pipeline_directory/)。该目录必须包含一个名为 pipeline.py 的文件,用于定义该自定义 pipeline。

    有关如何加载和创建自定义管道的更多信息,请参阅加载和添加自定义管道

  • force_download (bool,可选,默认为 False) — 是否强制(重新)下载模型权重和配置文件,如果存在缓存版本则覆盖它们。
  • cache_dir (Union[str, os.PathLike], 可选) — 如果未使用标准缓存,则用于缓存已下载的预训练模型配置的目录路径。
  • proxies (Dict[str, str],可选) — 按协议或端点使用的代理服务器字典,例如 {'http': 'foo.bar:3128', 'http://hostname': 'foo.bar:4012'}。每次请求都会使用这些代理。
  • output_loading_info(bool, 可选,默认为 False) — 是否同时返回一个包含缺失键、意外键和错误消息的字典。
  • local_files_only (bool,可选,默认为 False) — 是否仅加载本地的模型权重和配置文件。如果设置为 True,则不会从 Hub 下载模型。
  • token (str 或 bool,可选) — 用于远程文件的 HTTP bearer 授权令牌。如果为 True,则使用由 diffusers-cli login 生成的令牌(存储在 ~/.huggingface 中)。
  • revision (str, 可选, 默认为 "main") — 要使用的特定模型版本。它可以是分支名称、标签名称、提交 id,或 Git 允许的任何标识符。
  • custom_revision (str, 可选) — 要使用的特定模型版本。它可以是分支名称、标签名称或提交 ID,类似于从 Hub 加载自定义流水线时的 revision。默认使用最新的稳定版 🤗 Diffusers 版本。
  • mirror (str, 可选) — 镜像源,用于解决在中国下载模型时可能遇到的访问问题。我们不保证该源的时效性或安全性,详情请参阅镜像站点。
  • device_map (str, 可选) — 指定流水线各组件应如何放置在可用设备上的策略。目前仅支持“balanced” device_map。有关更多信息,请参阅 此处。
  • max_memory (Dict, 可选) — 用于指定最大内存的设备标识符字典。如果未设置,则默认为每个 GPU 的最大可用内存以及可用的 CPU 内存。
  • offload_folder (str 或 os.PathLike,可选) — 如果 device_map 包含值 "disk",则用于卸载权重的路径。
  • offload_state_dict (bool, 可选) — 如果为 True,则临时将 CPU 状态字典卸载到硬盘,以避免在 CPU 状态字典的权重加上检查点中最大的分片无法容纳时耗尽 CPU 内存。当存在磁盘卸载时,默认值为 True。
  • low_cpu_mem_usage (bool,可选,如果 torch 版本 >= 1.9.0 则默认为 True,否则为 False) — 通过仅加载预训练权重而不初始化权重来加速模型加载。在加载模型时,这也试图将 CPU 内存(包括峰值内存)的使用量控制在不超过 1 倍模型大小。仅支持 PyTorch >= 1.9.0。如果您使用的是旧版本的 PyTorch,将此参数设置为 True 将引发错误。
  • use_safetensors (bool,可选,默认为 None) — 如果设置为 None,则在 safetensors 权重可用且已安装 safetensors 库的情况下,会下载 safetensors 权重。如果设置为 True,则强制从 safetensors 权重加载模型。如果设置为 False,则不加载 safetensors 权重。
  • use_onnx (bool,可选,默认为 None) — 如果设置为 True,只要存在 ONNX 权重,就始终会下载它们。如果设置为 False,则永远不会下载 ONNX 权重。默认情况下,use_onnx 的默认值为 _is_onnx 类属性,对于非 ONNX 流水线,该属性为 False;对于 ONNX 流水线,该属性为 True。ONNX 权重包括以 .onnx 和 .pb 结尾的两种文件。
  • kwargs(其余关键字参数字典,可选) — 可用于覆盖加载和可保存变量(特定流水线类的流水线组件)。被覆盖的组件会直接传递给流水线的 __init__ 方法。更多信息请参见下方示例。
  • variant (str, 可选) — 从指定的变体文件名(例如 "fp16" 或 "ema")加载权重。
  • disable_mmap('bool',可选,默认为 'False')— 是否在加载 Safetensors 模型时禁用 mmap。当模型位于网络挂载或硬盘上时,此选项可能表现更佳,因为这些存储设备可能无法很好地处理 mmap 的频繁寻址操作。

从预训练流水线权重实例化一个 PyTorch 扩散流水线。

默认情况下,pipeline 会设置为评估模式(model.eval())。

如果出现以下错误消息,您需要针对下游任务微调权重:

Some weights of UNet2DConditionModel were not initialized from the model checkpoint at stable-diffusion-v1-5/stable-diffusion-v1-5 and are newly initialized because the shapes did not match:
- conv_in.weight: found shape torch.Size([320, 4, 3, 3]) in the checkpoint and torch.Size([320, 9, 3, 3]) in the model instantiated
You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.

> 若要使用私有或 受限 模型,请使用 hf > auth login 登录。

示例:

>>> from diffusers import DiffusionPipeline

>>> # Download pipeline from huggingface.co and cache.
>>> pipeline = DiffusionPipeline.from_pretrained("CompVis/ldm-text2im-large-256")

>>> # Download pipeline that requires an authorization token
>>> # For more information on access tokens, please refer to this section
>>> # of the documentation](https://huggingface.co/docs/hub/security-tokens)
>>> pipeline = DiffusionPipeline.from_pretrained("stable-diffusion-v1-5/stable-diffusion-v1-5")

>>> # Use a different scheduler
>>> from diffusers import LMSDiscreteScheduler

>>> scheduler = LMSDiscreteScheduler.from_config(pipeline.scheduler.config)
>>> pipeline.scheduler = scheduler

maybe_free_model_hooks

< >

( )

执行以下操作的方法:

  • 卸载所有组件。
  • 移除使用 enable_model_cpu_offload 时添加的所有模型钩子,然后重新应用它们。 如果模型未被卸载,此函数将不执行任何操作。
  • 如果去噪器组件的状态ful diffusers 钩子是通过 register_hook() 添加的,则重置这些钩子。

请务必将此函数添加到您的 pipeline 的 __call__ 函数末尾,以确保在应用 enable_model_cpu_offload 时能够正确运行。

numpy_to_pil

< >

( images )

将 NumPy 图像或一批图像转换为 PIL 图像。

remove_all_hooks

< >

( )

移除使用 enable_sequential_cpu_offload 或 enable_model_cpu_offload 时添加的所有钩子。

reset_device_map

< >

( )

将设备映射(如果存在)重置为 None。

save_pretrained

< >

( save_directory: str | os.PathLikesafe_serialization: bool = Truevariant: str | None = Nonemax_shard_size: int | str | None = Nonepush_to_hub: bool = Falseuse_flashpack: bool = False**kwargs )

参数

  • save_directory (str 或 os.PathLike) — 用于保存 pipeline 的目录。如果该目录不存在,将会自动创建。
  • safe_serialization(bool,可选,默认为 True)—— 是否使用 safetensors 保存模型,还是使用传统的基于 pickle 的 PyTorch 方式。
  • variant (str, 可选) — 如果指定,权重将以 pytorch_model.<variant>.bin 格式保存。
  • max_shard_size(int 或 str,默认为 None)— 检查点在分片前的最大大小。分片后的每个检查点大小都将小于该值。如果以字符串形式表示,则必须为数字后跟单位(例如 "5GB")。如果以整数形式表示,单位为字节。请注意,从 2024 年 10 月开始,经过一段时间后,此限制将会降低,以便用户升级到 diffusers 的最新版本。这是为了在 Hugging Face 生态系统的不同库(例如 transformers 和 accelerate)之间为此参数建立统一的默认大小。
  • push_to_hub (bool,可选,默认为 False) — 是否在保存模型后将其推送到 Hugging Face 模型库。您可以使用 repo_id 指定要推送到的仓库(默认使用您命名空间中 save_directory 的名称)。
  • kwargs (Dict[str, Any], 可选) — 传递给 push_to_hub() 方法的额外关键字参数。

将流水线中所有可保存的变量保存到指定目录。如果流水线变量的类同时实现了保存和加载方法,则该变量可以被保存和加载。您可以使用 from_pretrained() 类方法轻松重新加载流水线。

diffusers.StableDiffusionMixin.enable_freeu

< >

( s1: floats2: floatb1: floatb2: float )

参数

  • s1 (float) — 用于第一阶段的比例因子,用于衰减跳跃特征的贡献。这样做是为了缓解增强去噪过程中的“过度平滑效应”。
  • s2 (float) — 用于衰减跳跃特征贡献的第二阶段缩放因子。这样做是为了缓解增强去噪过程中的“过度平滑效应”。
  • b1 (float) — 用于放大骨干网络特征贡献的第一阶段缩放因子。
  • b2 (float) — 用于放大骨干网络特征贡献的第二阶段缩放因子。

启用 https://huggingface.co/papers/2309.11497 中所述的 FreeU 机制。

缩放因子后面的后缀表示它们被应用的阶段。

有关适用于 Stable Diffusion v1、v2 和 Stable Diffusion XL 等不同流水线的已知良好参数组合,请参阅官方仓库。

diffusers.StableDiffusionMixin.disable_freeu

< >

( )

如果已启用,则禁用 FreeU 机制。

PushToHubMixin

class diffusers.utils.PushToHubMixin

< >

( )

一个用于将模型、调度器或流水线推送到 Hugging Face Hub 的 Mixin。

push_to_hub

< >

( repo_id: strcommit_message: str | None = Noneprivate: bool | None = Nonetoken: str | None = Nonecreate_pr: bool = Falsesafe_serialization: bool = Truevariant: str | None = Nonesubfolder: str | None = None )

参数

  • repo_id (str) — 要推送模型、调度器或流水线文件的目标仓库名称。推送到组织时,应包含组织名称。repo_id 也可以是本地目录的路径。
  • commit_message (str, 可选) — 推送时提交的提交信息。默认为 "Upload {object}"。
  • private (bool,可选) — 是否将仓库设为私有。如果为 None(默认值),除非组织的默认设置为私有,否则仓库将是公开的。如果仓库已存在,则忽略此值。
  • token (str, 可选) — 用于远程文件的 HTTP bearer 授权令牌。即运行 hf auth login 时生成的令牌(存储在 ~/.huggingface 中)。
  • create_pr (bool,可选,默认为 False) — 是否使用上传的文件创建 PR,还是直接提交。
  • safe_serialization(bool,可选,默认为 True)—— 是否将模型权重转换为 safetensors 格式。
  • variant (str, 可选) — 如果指定,权重将以 pytorch_model.<variant>.bin 格式保存。

将模型、调度器或流水线文件上传到 🤗 Hugging Face Hub。

示例:

from diffusers import UNet2DConditionModel

unet = UNet2DConditionModel.from_pretrained("stabilityai/stable-diffusion-2", subfolder="unet")

# Push the `unet` to your namespace with the name "my-finetuned-unet".
unet.push_to_hub("my-finetuned-unet")

# Push the `unet` to an organization with the name "my-finetuned-unet".
unet.push_to_hub("your-org/my-finetuned-unet")

回调

class diffusers.callbacks.PipelineCallback

< >

( cutoff_step_ratio = 1.0cutoff_step_index = None )

所有在流水线中使用的官方回调的基类。该类为自定义回调的实现提供了结构,并确保所有回调具有一致的接口。

请实现以下内容:tensor_inputs:此方法应返回一个列表,其中包含特定于您的回调的张量输入。您只能包含流水线类中 ._callback_tensor_inputs 属性里列出的变量。callback_fn:此方法定义了您的回调的核心功能。

class diffusers.callbacks.SDCFGCutoffCallback

< >

( cutoff_step_ratio = 1.0cutoff_step_index = None )

Stable Diffusion 管道的回调函数。在达到特定步数(由 cutoff_step_ratio 或 cutoff_step_index 设置)后,此回调将禁用 CFG。

注意:此回调会通过在截止步骤后将 _guidance_scale 属性更改为 0.0 来修改流水线。

class diffusers.callbacks.SDXLCFGCutoffCallback

< >

( cutoff_step_ratio = 1.0cutoff_step_index = None )

基础 Stable Diffusion XL 管道的回调函数。在达到特定步数(由 cutoff_step_ratio 或 cutoff_step_index 设置)后,此回调将禁用 CFG。

注意:此回调会通过在截止步骤后将 _guidance_scale 属性更改为 0.0 来修改流水线。

class diffusers.callbacks.SDXLControlnetCFGCutoffCallback

< >

( cutoff_step_ratio = 1.0cutoff_step_index = None )

Controlnet Stable Diffusion XL 管道的回调函数。在达到特定步数(由 cutoff_step_ratio 或 cutoff_step_index 设置)后,此回调将禁用 CFG。

注意:此回调会通过在截止步骤后将 _guidance_scale 属性更改为 0.0 来修改流水线。

class diffusers.callbacks.IPAdapterScaleCutoffCallback

< >

( cutoff_step_ratio = 1.0cutoff_step_index = None )

适用于任何继承自 IPAdapterMixin 的 pipeline 的回调函数。在达到特定步数(由 cutoff_step_ratio 或 cutoff_step_index 设置)后,此回调会将 IP Adapter 的 scale 设置为 0.0。

注意:此回调会在 cutoff 步骤之后将 IP Adapter 注意力处理器的 scale 设置为 0.0,从而修改这些处理器。

class diffusers.callbacks.SD3CFGCutoffCallback

< >

( cutoff_step_ratio = 1.0cutoff_step_index = None )

Stable Diffusion 3 管道的回调函数。在达到特定步数(由 cutoff_step_ratio 或 cutoff_step_index 设置)后,此回调将禁用 CFG。

注意:此回调会通过在截止步骤后将 _guidance_scale 属性更改为 0.0 来修改流水线。

Update on GitHub