Diffusers 文档

UNet

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

UNet

一些训练方法 - 如 LoRA 和 Custom Diffusion - 通常以 UNet 的注意力层为目标,但这些训练方法也可以针对其他非注意力层。与训练模型的所有参数不同,仅训练参数的子集,这样更快且更高效。如果您将权重加载到 UNet 中,则此类非常有用。如果您需要将权重加载到文本编码器或文本编码器和 UNet 中,请尝试使用 load_lora_weights() 函数。

UNet2DConditionLoadersMixin 类提供了用于加载和保存权重、融合和解融合 LoRA、禁用和启用 LoRA 以及设置和删除适配器的函数。

要了解有关如何加载 LoRA 权重的更多信息,请参阅 LoRA 加载指南。

UNet2DConditionLoadersMixin

class diffusers.loaders.UNet2DConditionLoadersMixin

< >

( )

将 LoRA 层加载到 UNet2DCondtionModel 中。

load_attn_procs

< >

( pretrained_model_name_or_path_or_dict: typing.Union[str, typing.Dict[str, torch.Tensor]] **kwargs )

参数

  • pretrained_model_name_or_path_or_dict (stros.PathLikedict) — 可以是:

    • 一个字符串,Hub 上托管的预训练模型的模型 ID(例如 google/ddpm-celebahq-256)。
    • 一个目录的路径(例如 ./my_model_directory),其中包含使用 ModelMixin.save_pretrained() 保存的模型权重。
    • 一个 torch 状态字典
  • cache_dir (Union[str, os.PathLike], 可选) — 如果未使用标准缓存,则用于缓存下载的预训练模型配置的目录路径。
  • force_download (bool, 可选, 默认为 False) — 是否强制(重新)下载模型权重和配置文件,覆盖缓存的版本(如果存在)。
  • proxies (Dict[str, str], 可选) — 按协议或端点使用的代理服务器字典,例如,{'http': 'foo.bar:3128', 'http://hostname': 'foo.bar:4012'}。代理用于每个请求。
  • local_files_only (bool, 可选, 默认为 False) — 是否仅加载本地模型权重和配置文件。如果设置为 True,则不会从 Hub 下载模型。
  • token (strbool, 可选) — 用作远程文件 HTTP Bearer 授权的令牌。如果为 True,则使用从 diffusers-cli login 生成的令牌(存储在 ~/.huggingface 中)。
  • revision (str, 可选, 默认为 "main") — 要使用的特定模型版本。它可以是分支名称、标签名称、提交 ID 或 Git 允许的任何标识符。
  • subfolder (str, 可选, 默认为 "") — Hub 或本地更大的模型仓库中模型文件的子文件夹位置。
  • network_alphas (Dict[str, float]) — 用于稳定学习和防止下溢的网络 alpha 值。此值的含义与 kohya-ss 训练脚本中的 --network_alpha 选项相同。请参阅 此链接
  • adapter_name (str, 可选, 默认为 None) — 用于引用加载的适配器模型的适配器名称。如果未指定,将使用 default_{i},其中 i 是正在加载的适配器总数。
  • weight_name (str, 可选, 默认为 None) — 序列化状态字典文件的名称。
  • low_cpu_mem_usage (bool, 可选) — 通过仅加载预训练的 LoRA 权重而不初始化随机权重来加速模型加载。

将预训练的注意力处理器层加载到 UNet2DConditionModel 中。注意力处理器层必须在 attention_processor.py 中定义,并且是 torch.nn.Module 类。目前支持:LoRA、Custom Diffusion。对于 LoRA,必须安装 peftpip install -U peft

示例

from diffusers import AutoPipelineForText2Image
import torch

pipeline = AutoPipelineForText2Image.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16
).to("cuda")
pipeline.unet.load_attn_procs(
    "jbilcke-hf/sdxl-cinematic-1", weight_name="pytorch_lora_weights.safetensors", adapter_name="cinematic"
)

save_attn_procs

< >

( save_directory: typing.Union[str, os.PathLike] is_main_process: bool = True weight_name: str = None save_function: typing.Callable = None safe_serialization: bool = True **kwargs )

参数

  • save_directory (stros.PathLike) — 用于保存注意力处理器的目录(如果不存在将创建)。
  • is_main_process (bool, 可选, 默认为 True) — 调用此过程是否为主进程。在分布式训练期间很有用,您需要在所有进程上调用此函数。在这种情况下,仅在主进程上设置 is_main_process=True,以避免竞争条件。
  • save_function (Callable) — 用于保存状态字典的函数。在分布式训练期间很有用,当您需要将 torch.save 替换为另一种方法时。可以使用环境变量 DIFFUSERS_SAVE_MODE 进行配置。
  • safe_serialization (bool, 可选, 默认为 True) — 是否使用 safetensorspickle 保存模型。

将注意力处理器层保存到目录,以便可以使用 load_attn_procs() 方法重新加载。

示例

import torch
from diffusers import DiffusionPipeline

pipeline = DiffusionPipeline.from_pretrained(
    "CompVis/stable-diffusion-v1-4",
    torch_dtype=torch.float16,
).to("cuda")
pipeline.unet.load_attn_procs("path-to-save-model", weight_name="pytorch_custom_diffusion_weights.bin")
pipeline.unet.save_attn_procs("path-to-save-model", weight_name="pytorch_custom_diffusion_weights.bin")
< > 更新 在 GitHub 上