Diffusers 文件

PEFT

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

PEFT

Diffusers 支援使用 PEFT 庫載入介面卡,例如 LoRA,透過 PeftAdapterMixin 類實現。這使得 Diffusers 中的模型類(如 UNet2DConditionModelSD3Transformer2DModel)能夠使用介面卡。

有關如何在 Diffusers 中使用 PEFT 進行推理的概述,請參閱 使用 PEFT 進行推理 教程。

PeftAdapterMixin

class diffusers.loaders.PeftAdapterMixin

< >

( )

一個包含所有用於載入和使用 PEFT 庫中支援的介面卡權重的函式類。有關介面卡及其在基礎模型中注入的更多詳細資訊,請檢視 PEFT 文件

安裝最新版本的 PEFT,並使用此混入類來

  • 在模型中附加新的介面卡。
  • 附加多個介面卡並迭代啟用/停用它們。
  • 啟用/停用模型中的所有介面卡。
  • 獲取活動介面卡列表。

active_adapters

< >

( )

獲取模型當前活動介面卡列表。

如果您不熟悉介面卡和 PEFT 方法,我們建議您在 PEFT 文件上了解更多資訊。

add_adapter

< >

( adapter_config adapter_name: str = 'default' )

引數

  • adapter_config ([~peft.PeftConfig]) — 要新增的介面卡配置;支援非字首調優和自適應提示方法。
  • adapter_name (str, 可選, 預設為 "default") — 要新增的介面卡名稱。如果未傳遞名稱,則為介面卡分配預設名稱。

為當前模型新增新的介面卡以進行訓練。如果未傳遞介面卡名稱,則為介面卡分配預設名稱,以遵循 PEFT 庫的約定。

如果您不熟悉介面卡和 PEFT 方法,我們建議您在 PEFT 文件上了解更多資訊。

delete_adapters

< >

( adapter_names: typing.Union[typing.List[str], str] )

引數

  • adapter_names (Union[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")

disable_adapters

< >

( )

停用附加到模型的所有介面卡,並僅回退到使用基礎模型進行推理。

如果您不熟悉介面卡和 PEFT 方法,我們建議您在 PEFT 文件上了解更多資訊。

disable_lora

< >

( )

停用基礎模型的活動 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()

enable_adapters

< >

( )

啟用附加到模型的介面卡。模型使用 self.active_adapters() 來檢索要啟用的介面卡列表。

如果您不熟悉介面卡和 PEFT 方法,我們建議您在 PEFT 文件上了解更多資訊。

enable_lora

< >

( )

啟用基礎模型的活動 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' )

引數

  • target_rank (int, 可選, 預設為 128) — 所有將要載入的介面卡中最高的秩。
  • check_compiled (str, 可選, 預設為 "error") — 如何處理模型已編譯的情況,通常應避免此情況。選項包括:

    • "error"(預設):引發錯誤
    • "warn":發出警告
    • "ignore":不執行任何操作

啟用 LoRA 介面卡的熱插拔功能。

僅當熱插拔介面卡以及模型已編譯或已載入介面卡的秩不同時,才需要呼叫此方法。

load_lora_adapter

< >

( pretrained_model_name_or_path_or_dict prefix = 'transformer' hotswap: bool = False **kwargs )

引數

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

    • 一個字串,即託管在 Hub 上的預訓練模型 *模型 ID*(例如 google/ddpm-celebahq-256)。
    • 一個 *目錄* 路徑(例如 ./my_model_directory),包含使用 ModelMixin.save_pretrained() 儲存的模型權重。
    • 一個 torch 狀態字典
  • 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 (strbool, 可選) — 用作遠端檔案 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 (stros.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

< >

( adapter_name: typing.Union[str, typing.List[str]] )

引數

  • adapter_name (Union[str, List[str]]) — 要設定的介面卡列表或單個介面卡名稱。

透過強制模型僅使用該介面卡並停用其他介面卡來設定特定介面卡。

如果您不熟悉介面卡和 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 )

引數

  • adapter_names (List[str]str) — 要使用的介面卡名稱。
  • adapter_weights (Union[List[float], float], 可選) — 用於 UNet 的介面卡權重。如果為 None,則所有介面卡的權重均設定為 1.0

設定當前活動的介面卡,以便在擴散網路(例如 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])
< > 在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.