UNet
一些训练方法——例如 LoRA 和自定义扩散——通常针对 UNet 的注意力层,但这些训练方法也可以针对其他非注意力层。与其训练模型的所有参数,不如只训练一部分参数,这样速度更快,效率更高。如果您*仅*将权重加载到 UNet 中,此类很有用。如果您需要将权重加载到文本编码器或文本编码器和 UNet 中,请尝试改用 load_lora_weights() 函数。
UNet2DConditionLoadersMixin
类提供了用于加载和保存权重、融合和分离 LoRA、禁用和启用 LoRA 以及设置和删除适配器的函数。
要了解有关如何加载 LoRA 权重的更多信息,请参阅 LoRA 加载指南。
UNet2DConditionLoadersMixin
将 LoRA 层加载到 UNet2DCondtionModel
中。
load_attn_procs
< 源代码 >( pretrained_model_name_or_path_or_dict: Union **kwargs )
参数
- pretrained_model_name_or_path_or_dict (
str
或os.PathLike
或dict
) — 可以是以下之一:- 一个字符串,模型 ID(例如
google/ddpm-celebahq-256
),表示托管在 Hub 上的预训练模型。 - 一个目录路径(例如
./my_model_directory
),其中包含使用 ModelMixin.save_pretrained() 保存的模型权重。 - 一个 torch 状态字典。
- 一个字符串,模型 ID(例如
- 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 (
str
或 bool, 可选) — 用作远程文件 HTTP 授权的令牌。如果为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) — 序列化状态字典文件的名称。
将预训练的注意力处理器层加载到 UNet2DConditionModel 中。注意力处理器层必须在 attention_processor.py
中定义,并且必须是 torch.nn.Module
类。当前支持:LoRA、自定义扩散。对于 LoRA,必须安装 peft
:pip 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
< source >( save_directory: Union is_main_process: bool = True weight_name: str = None save_function: Callable = None safe_serialization: bool = True **kwargs )
参数
- 保存目录 (
str
或os.PathLike
) — 用于保存注意力处理器的目录(如果不存在则会创建)。 - 是否为主进程 (
bool
, 可选, 默认为True
) — 调用此函数的进程是否为主进程。在分布式训练期间很有用,您需要在所有进程上调用此函数。在这种情况下,仅在主进程上将is_main_process=True
设置为避免竞争条件。 - 保存函数 (
Callable
) — 用于保存状态字典的函数。在分布式训练期间很有用,当您需要用其他方法替换torch.save
时。可以使用环境变量DIFFUSERS_SAVE_MODE
配置。 - 安全序列化 (
bool
, 可选, 默认为True
) — 是否使用safetensors
或pickle
保存模型。
将注意力处理器层保存到目录中,以便可以使用 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")