Diffusers documentation
PEFT
PEFT
Diffusersは、PeftAdapterMixinクラスを用いることで、PEFTライブラリによるLoRAなどのアダプターの読み込みをサポートしています。これにより、UNet2DConditionModelやSD3Transformer2DModelといったDiffusersのモデリングクラスが、アダプターを併用して動作するようになります。
DiffusersでPEFTを使用して推論を行う方法の概要については、Inference with PEFTチュートリアルを参照してください。
PeftAdapterMixin
PEFTライブラリでサポートされているアダプター重みの読み込みと使用に関するすべての関数を含むクラスです。アダプターおよびベースモデルへの注入の詳細については、PEFTのドキュメントを参照してください。
PEFTの最新バージョンをインストールし、このミックスインを使用して、次のことを実行します。
- モデルに新しいアダプターをアタッチします。
- 複数のアダプターをアタッチし、それらを反復的にアクティブ化/非アクティブ化します。
- モデルからすべてのアダプターを有効化/無効化します。
- アクティブなアダプターのリストを取得します。
モデルの現在アクティブなアダプターの一覧を取得します。
アダプターやPEFT手法に詳しくない場合は、PEFTのドキュメントで詳しくお読みください。
add_adapter
< source >( adapter_configadapter_name: str = 'default' )
現在のモデルに学習用の新しいアダプターを追加します。アダプター名が指定されない場合、PEFTライブラリの慣例に従って、アダプターにデフォルトの名前が割り当てられます。
アダプターやPEFT手法に詳しくない場合は、PEFTのドキュメントで詳しくお読みください。
delete_adapters
< source >( adapter_names: 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
< source >( target_rank: int = 128check_compiled: typing.Literal['error', 'warn', 'ignore'] = 'error' )
LoRAアダプターをホットスワップする機能を有効にします。
このメソッドを呼び出す必要があるのは、アダプターをホットスワップする場合で、かつモデルがコンパイルされているか、読み込まれたアダプターのランクが異なる場合のみです。
load_lora_adapter
< source >( pretrained_model_name_or_path_or_dictprefix = 'transformer'hotswap: bool = False**kwargs )
パラメータ
- pretrained_model_name_or_path_or_dict (
strまたはos.PathLikeまたはdict) — 以下のいずれかです:- Hub にホストされている事前学習済みモデルの model id(例:
google/ddpm-celebahq-256)を表す文字列。 ./my_model_directoryのように、ModelMixin.save_pretrained() で保存されたモデルの重みを含むディレクトリへのパス。- torch state dictです。
- Hub にホストされている事前学習済みモデルの model id(例:
- prefix (
str, 任意) — state dict をフィルタリングするためのプレフィックス。 - cache_dir (
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]) — 安定した学習とアンダーフローの防止に使用されるネットワークアルファの値です。この値は、kohya-ss トレーナースクリプトの--network_alphaオプションと同じ意味を持ちます。このリンクを参照してください。 - low_cpu_mem_usage (
bool、省略可) — 事前学習済み LoRA 重みのみを読み込み、ランダム重みの初期化を行わないことで、モデルの読み込みを高速化します。 - hotswap — (
bool, 省略可能) デフォルトはFalse. 既存の (LoRA) アダプターを、新しく読み込まれたアダプターでその場で置き換えるかどうか。つまり、追加のアダプターを読み込むのではなく、既存のアダプターの重みを新しいアダプターの重みで置き換えます。これにより、より高速かつメモリ効率の高い処理が可能になります。ただし、hotswap の主な利点は、モデルが torch.compile でコンパイルされている場合、新しいアダプターを読み込んでもモデルの再コンパイルが不要になる点です。hotswap を使用する際は、渡すadapter_nameは、すでに読み込まれているアダプターの名前である必要があります。新しいアダプターと古いアダプターでランクや LoRA alpha (つまりスケーリング) が異なる場合、アダプターを読み込む前に追加のメソッドを呼び出す必要があります: pipeline = ... # diffusers パイプラインを読み込む max_rank = ... # 読み込みたいすべての LoRA 中最も高いランク # LoRA アダプターをコンパイルおよび読み込む*前*に呼び出す pipeline.enable_lora_hotswap(target_rank=max_rank) pipeline.load_lora_weights(file_name) # 必要に応じて、ここでモデルをコンパイルする テキストエンコーダーのアダプターの hotswap はまだサポートされていません。この技術にはいくつかの制限があり、以下にドキュメント化されています: https://huggingface.co/docs/peft/main/en/package_reference/hotswap新しいアダプターと古いアダプターでランクと/またはLoRA alpha(つまりスケーリング)が異なる場合、アダプターを読み込む前に追加のメソッドを呼び出す必要があります:
pipeline = ... # load diffusers pipeline max_rank = ... # the highest rank among all LoRAs that you want to load # call *before* compiling and loading the LoRA adapter pipeline.enable_lora_hotswap(target_rank=max_rank) pipeline.load_lora_weights(file_name) # optionally compile the model nowテキストエンコーダーのアダプターをホットスワップすることは、まだサポートされていません。この技術にはいくつかの追加の制限があり、以下にドキュメント化されています: https://huggingface.co/docs/peft/main/en/package_reference/hotswap
- metadata —
LoRA アダプターのメタデータ。指定された場合、state dict 経由で推定されたメタデータは
LoraConfigの初期化に使用されません。
LoRAアダプターを基盤モデルに読み込みます。
save_lora_adapter
< source >( save_directoryadapter_name: str = 'default'upcast_before_saving: bool = Falsesafe_serialization: bool = Trueweight_name: str | None = None )
パラメータ
- save_directory (
strまたはos.PathLike) — LoRA パラメータを保存するディレクトリ。存在しない場合は作成されます。 - adapter_name — (
str、デフォルト値は “default”): シリアライズするアダプターの名前です。ベースとなるモデルに複数のアダプターが読み込まれている場合に便利です。 - upcast_before_saving (
bool, デフォルトはFalse) — シリアライズ前に、ベースとなるモデルをtorch.float32にキャストするかどうか。 - safe_serialization (
bool、任意、デフォルトはTrue) —safetensorsを使用してモデルを保存するか、従来のpickleによるPyTorchの方式で保存するかどうかを指定します。 - weight_name — (
str、任意、デフォルトはNone): state dict をシリアライズするファイルの名前。
ベースモデルに対応する LoRA パラメータを保存します。
set_adapter
< source >( adapter_name: str | list[str] )
特定のアダプターを設定し、モデルがそのアダプターのみを使用するよう強制して、他のアダプターを無効にします。
アダプターやPEFT手法に詳しくない場合は、PEFTのドキュメントで詳しくお読みください。
set_adapters
< source >( adapter_names: list[str] | strweights: float | dict | list[float] | list[dict] | list[None] | None = 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"], weights=[0.5, 0.5])