Diffusers 文档
PEFT
并获得增强的文档体验
开始使用
PEFT
Diffusers 支持使用 LoRA 等 adapters,通过 PEFT 库和 PeftAdapterMixin 类。这允许 Diffusers 中的建模类(如 UNet2DConditionModel、SD3Transformer2DModel)与 adapter 一起运行。
请参阅 Inference with PEFT 教程,概述如何在 Diffusers 中使用 PEFT 进行推理。
PeftAdapterMixin
一个类,包含用于加载和使用 PEFT 库中支持的 adapters 权重的所有功能。有关 adapters 以及如何将它们注入基础模型的更多详细信息,请查看 PEFT 文档。
安装最新版本的 PEFT,并使用此 mixin 来
- 在模型中附加新的 adapters。
- 附加多个 adapters 并迭代地激活/停用它们。
- 激活/停用模型中的所有 adapters。
- 获取活动 adapters 的列表。
获取模型的当前活动 adapters 列表。
如果您不熟悉 adapters 和 PEFT 方法,我们邀请您在 PEFT 文档中阅读更多相关信息。
add_adapter
< source >( adapter_config adapter_name: str = 'default' )
向当前模型添加新的 adapter 以进行训练。如果未传递 adapter 名称,则会为 adapter 分配一个默认名称,以遵循 PEFT 库的约定。
如果您不熟悉 adapters 和 PEFT 方法,我们邀请您在 PEFT 文档中阅读更多相关信息。
delete_adapters
< source >( adapter_names: typing.Union[typing.List[str], str] )
从底层模型中删除适配器的 LoRA 层。
示例
from diffusers import AutoPipelineForText2Image
import torch
pipeline = AutoPipelineForText2Image.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16
).to("cuda")
pipeline.load_lora_weights(
"jbilcke-hf/sdxl-cinematic-1", weight_name="pytorch_lora_weights.safetensors", adapter_names="cinematic"
)
pipeline.delete_adapters("cinematic")
禁用附加到模型的所有适配器,并回退到仅使用基础模型进行推理。
如果您不熟悉 adapters 和 PEFT 方法,我们邀请您在 PEFT 文档中阅读更多相关信息。
禁用底层模型的活动 LoRA 层。
示例
from diffusers import AutoPipelineForText2Image
import torch
pipeline = AutoPipelineForText2Image.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16
).to("cuda")
pipeline.load_lora_weights(
"jbilcke-hf/sdxl-cinematic-1", weight_name="pytorch_lora_weights.safetensors", adapter_name="cinematic"
)
pipeline.disable_lora()
启用附加到模型的适配器。模型使用 self.active_adapters()
来检索要启用的适配器列表。
如果您不熟悉 adapters 和 PEFT 方法,我们邀请您在 PEFT 文档中阅读更多相关信息。
启用底层模型的活动 LoRA 层。
示例
from diffusers import AutoPipelineForText2Image
import torch
pipeline = AutoPipelineForText2Image.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16
).to("cuda")
pipeline.load_lora_weights(
"jbilcke-hf/sdxl-cinematic-1", weight_name="pytorch_lora_weights.safetensors", adapter_name="cinematic"
)
pipeline.enable_lora()
load_lora_adapter
< 源代码 >( pretrained_model_name_or_path_or_dict prefix = 'transformer' **kwargs )
参数
- pretrained_model_name_or_path_or_dict (
str
或os.PathLike
或dict
) — 可以是以下之一:- 一个字符串,Hub 上托管的预训练模型的模型 ID(例如
google/ddpm-celebahq-256
)。 - 一个目录的路径(例如
./my_model_directory
),其中包含使用 ModelMixin.save_pretrained() 保存的模型权重。 - 一个 torch 状态字典。
- 一个字符串,Hub 上托管的预训练模型的模型 ID(例如
- prefix (
str
, 可选) — 用于过滤状态字典的前缀。 - 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 Bearer 授权的令牌。如果为True
,则使用从diffusers-cli login
生成的令牌(存储在~/.huggingface
中)。 - revision (
str
, 可选, 默认为"main"
) — 要使用的特定模型版本。它可以是分支名称、标签名称、提交 ID 或 Git 允许的任何标识符。 - subfolder (
str
, 可选, 默认为""
) — Hub 或本地更大的模型仓库中模型文件的子文件夹位置。 - network_alphas (
Dict[str, float]
) — 用于稳定学习和防止下溢的网络 alpha 值。此值的含义与 kohya-ss 训练器脚本中的--network_alpha
选项相同。请参阅此链接。 - low_cpu_mem_usage (
bool
, 可选) — 通过仅加载预训练的 LoRA 权重而不初始化随机权重来加速模型加载。
将 LoRA 适配器加载到底层模型中。
save_lora_adapter
< 源代码 >( save_directory adapter_name: str = 'default' upcast_before_saving: bool = False safe_serialization: bool = True weight_name: typing.Optional[str] = None )
参数
- save_directory (
str
或os.PathLike
) — 用于保存 LoRA 参数的目录。如果不存在,将创建该目录。 - adapter_name — (
str
, 默认为 “default”): 要序列化的适配器的名称。当底层模型加载了多个适配器时很有用。 - upcast_before_saving (
bool
, 默认为False
) — 是否在序列化之前将底层模型转换为torch.float32
。 - save_function (
Callable
) — 用于保存状态字典的函数。在分布式训练中,当您需要将torch.save
替换为其他方法时很有用。可以使用环境变量DIFFUSERS_SAVE_MODE
进行配置。 - safe_serialization (
bool
, 可选, 默认为True
) — 是否使用safetensors
或传统的 PyTorch 方式pickle
保存模型。 - weight_name — (
str
, 可选, 默认为None
): 用于序列化状态字典的文件名。
保存与底层模型对应的 LoRA 参数。
set_adapter
< 源代码 >( adapter_name: typing.Union[str, typing.List[str]] )
通过强制模型仅使用特定适配器并禁用其他适配器来设置特定适配器。
如果您不熟悉 adapters 和 PEFT 方法,我们邀请您在 PEFT 文档中阅读更多相关信息。
set_adapters
< 源代码 >( adapter_names: typing.Union[typing.List[str], str] weights: typing.Union[float, typing.Dict, typing.List[float], typing.List[typing.Dict], typing.List[NoneType], NoneType] = None )
设置当前活动的适配器以在 UNet 中使用。
示例
from diffusers import AutoPipelineForText2Image
import torch
pipeline = AutoPipelineForText2Image.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16
).to("cuda")
pipeline.load_lora_weights(
"jbilcke-hf/sdxl-cinematic-1", weight_name="pytorch_lora_weights.safetensors", adapter_name="cinematic"
)
pipeline.load_lora_weights("nerijs/pixel-art-xl", weight_name="pixel-art-xl.safetensors", adapter_name="pixel")
pipeline.set_adapters(["cinematic", "pixel"], adapter_weights=[0.5, 0.5])