Diffusers documentation
UNet
UNet
LoRAやCustom Diffusionなどの一部の学習手法は、通常、UNetのattention層を対象としますが、これらの手法はattention以外の層を対象とすることもできます。モデルのすべてのパラメータを学習させるのではなく、パラメータの一部のみを学習させるため、より高速かつ効率的です。このクラスは、UNetにのみ重みを読み込む場合に便利です。テキストエンコーダー、またはテキストエンコーダーとUNetの両方に重みを読み込む必要がある場合は、代わりにload_lora_weights()関数を使用してください。
UNet2DConditionLoadersMixin クラスは、重みの読み込みと保存、LoRA の融合と分離、LoRA の無効化と有効化、アダプターの設定と削除を行う関数を提供します。
LoRAの重みをロードする方法の詳細については、LoRAガイドを参照してください。
UNet2DConditionLoadersMixin
UNet2DCondtionModelにLoRA層を読み込みます。
load_attn_procs
< source >( pretrained_model_name_or_path_or_dict: str | dict[str, torch.Tensor]**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 state dictです。
- 文字列。Hubにホストされている事前学習済みモデルのモデルID(例:
- 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 またはローカル上のより大きなモデルリポジトリ内での、モデルファイルのサブフォルダの場所。 - weight_name (
str, 省略可能、デフォルトは None) — シリアライズされた state dict ファイルの名前。
事前学習済みの Custom Diffusion アテンションプロセッサのレイヤーを UNet2DConditionModel に読み込みます。アテンションプロセッサのレイヤーは attention_processor.py で定義する必要があり、torch.nn.Module クラスである必要があります。LoRA レイヤーを読み込む場合は、代わりに load_lora_adapter() を使用してください。
save_attn_procs
< source >( save_directory: str | os.PathLikeis_main_process: bool = Trueweight_name: str = Nonesave_function: typing.Callable = Nonesafe_serialization: bool = True**kwargs )
パラメータ
- save_directory (
strまたはos.PathLike) — アテンションプロセッサを保存するディレクトリ(存在しない場合は作成されます)。 - is_main_process (
bool、任意、デフォルトはTrue) — この関数を呼び出しているプロセスがメインプロセスかどうかを示します。分散学習時に、この関数をすべてのプロセスで呼び出す必要がある場合に便利です。この場合、競合状態を避けるために、メインプロセスでのみis_main_process=Trueを設定してください。 - save_function (
Callable) — 状態辞書を保存するために使用する関数です。分散学習時にtorch.saveを別のメソッドに置き換える必要がある場合に便利です。環境変数DIFFUSERS_SAVE_MODEで設定できます。 - safe_serialization (
bool、任意、デフォルトはTrue) —safetensorsでモデルを保存するか、pickleで保存するかどうかを指定します。
Custom Diffusion の attention processor レイヤーをディレクトリに保存し、load_attn_procs() メソッドで再読み込みできるようにします。LoRA レイヤーを保存する場合は、代わりに save_lora_adapter() を使用してください。
例:
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")