Diffusers 文件
PEFT
並獲得增強的文件體驗
開始使用
PEFT
Diffusers 支援使用 PEFT 庫載入介面卡,例如 LoRA,透過 PeftAdapterMixin 類實現。這使得 Diffusers 中的模型類(如 UNet2DConditionModel、SD3Transformer2DModel)能夠使用介面卡。
有關如何在 Diffusers 中使用 PEFT 進行推理的概述,請參閱 使用 PEFT 進行推理 教程。
PeftAdapterMixin
一個包含所有用於載入和使用 PEFT 庫中支援的介面卡權重的函式類。有關介面卡及其在基礎模型中注入的更多詳細資訊,請檢視 PEFT 文件。
安裝最新版本的 PEFT,並使用此混入類來
- 在模型中附加新的介面卡。
- 附加多個介面卡並迭代啟用/停用它們。
- 啟用/停用模型中的所有介面卡。
- 獲取活動介面卡列表。
add_adapter
< 來源 >( adapter_config adapter_name: str = 'default' )
為當前模型新增新的介面卡以進行訓練。如果未傳遞介面卡名稱,則為介面卡分配預設名稱,以遵循 PEFT 庫的約定。
如果您不熟悉介面卡和 PEFT 方法,我們建議您在 PEFT 文件上了解更多資訊。
delete_adapters
< 來源 >( 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.unet.delete_adapters("cinematic")
停用附加到模型的所有介面卡,並僅回退到使用基礎模型進行推理。
如果您不熟悉介面卡和 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.unet.disable_lora()
啟用附加到模型的介面卡。模型使用 self.active_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.unet.enable_lora()
enable_lora_hotswap
< 來源 >( target_rank: int = 128 check_compiled: typing.Literal['error', 'warn', 'ignore'] = 'error' )
啟用 LoRA 介面卡的熱插拔功能。
僅當熱插拔介面卡以及模型已編譯或已載入介面卡的秩不同時,才需要呼叫此方法。
load_lora_adapter
< 來源 >( pretrained_model_name_or_path_or_dict prefix = 'transformer' hotswap: bool = False **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 授權的 token。如果為True
,則使用從diffusers-cli login
生成的 token(儲存在~/.huggingface
中)。 - revision (
str
, 可選, 預設為"main"
) — 要使用的特定模型版本。它可以是分支名稱、標籤名稱、提交 ID 或 Git 允許的任何識別符號。 - subfolder (
str
, 可選, 預設為""
) — Hub 或本地較大模型倉庫中模型檔案的子資料夾位置。 - network_alphas (
Dict[str, float]
) — 用於穩定學習和防止下溢的 network alpha 值。此值與 kohya-ss 訓練器指令碼中的--network_alpha
選項含義相同。請參閱 此連結。 - low_cpu_mem_usage (
bool
, 可選) — 透過僅載入預訓練的 LoRA 權重而不初始化隨機權重來加快模型載入速度。 - hotswap — (
bool
, 可選) 預設為False
。是否用新載入的介面卡就地替換現有(LoRA)介面卡。這意味著,這將不是載入額外的介面卡,而是獲取現有介面卡權重並將其替換為新介面卡的權重。這可以更快、更節省記憶體。但是,熱插拔的主要優點是,當模型使用 torch.compile 編譯時,載入新介面卡不需要重新編譯模型。使用熱插拔時,傳入的adapter_name
應該是已載入介面卡的名稱。如果新介面卡和舊介面卡具有不同的秩和/或 LoRA alpha(即縮放),您需要在載入介面卡之前呼叫一個額外的方法:
將 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
。 - safe_serialization (
bool
, 可選, 預設為True
) — 是否使用safetensors
而不是傳統的 PyTorch 方式(使用pickle
)儲存模型。 - weight_name — (
str
, 可選, 預設為None
):用於序列化狀態字典的檔名。
儲存對應於底層模型的 LoRA 引數。
set_adapter
< source >( adapter_name: typing.Union[str, typing.List[str]] )
透過強制模型僅使用該介面卡並停用其他介面卡來設定特定介面卡。
如果您不熟悉介面卡和 PEFT 方法,我們建議您在 PEFT 文件上了解更多資訊。
set_adapters
< source >( 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、transformer 等)中使用。
示例
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.unet.set_adapters(["cinematic", "pixel"], adapter_weights=[0.5, 0.5])