Diffusers documentation

パイプライン

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

パイプライン

Pipelines は、推論時に最先端の拡散モデルを実行するためのシンプルな方法を提供します。必要なコンポーネント(個別に学習された複数のモデル、スケジューラ、プロセッサ)を単一のエンドツーエンドのクラスにまとめることで実現されています。Pipelines は柔軟性があり、異なるスケジューラやモデルコンポーネントの使用に適応させることができます。

すべてのパイプラインは、コンポーネントの読み込み、ダウンロード、保存に関する基本的な機能を提供するベースクラスである DiffusionPipeline から構築されます。from_pretrained() で読み込まれる具体的なパイプラインの種類(例えば StableDiffusionPipeline)は自動的に検出され、パイプラインのコンポーネントが読み込まれて、そのパイプラインの __init__ 関数に渡されます。

DiffusionPipeline クラスは学習には使用しないでください。拡散パイプラインの個別コンポーネント(UNet2DModel や UNet2DConditionModel など)は通常、個別に学習されるため、それらを直接扱うことをお勧めします。


Pipelinesには学習機能は提供されていません。torch.no_gradデコレーターで__call__()メソッドを装飾することにより、PyTorchのautogradが無効化されていることに気づくでしょう。これは、Pipelinesは学習に使用すべきではないためです。学習にご興味がある場合は、代わりにTrainingガイドをご覧ください。

サイドバーのAPI > パイプラインを使用して、モダリティ別のすべてのパイプラインリファレンスを確認できます。タスク指向のワークフローでは、クイックスタートまたはテキストから画像へ、画像から画像へ、インペインティング、動画生成などのガイドから始めることをお勧めします。

DiffusionPipeline

class diffusers.DiffusionPipeline

< >

( )

すべてのパイプラインの基底クラス。

DiffusionPipeline は、拡散パイプラインのすべてのコンポーネント(モデル、スケジューラ、プロセッサ)を保存し、モデルの読み込み、ダウンロード、保存を行うメソッドを提供します。また、以下のメソッドも含まれます。

  • PyTorchのすべてのモジュールを、選択したデバイスに移動します
  • デノイジング反復のプログレスバーを有効化/無効化

クラス属性:

  • config_name (str) — 拡散パイプラインのすべてのコンポーネントのクラス名とモジュール名を保存する設定ファイルの名前。
  • _optional_components (List[str]) — パイプラインの動作に必ずしも渡す必要のないすべてのオプションコンポーネントのリスト(サブクラスでオーバーライドされるべき)。

__call__

( *args**kwargs )

self を関数として呼び出します。

デバイス

< >

( ) → torch.device

戻り値

torch.device

パイプラインが配置されている torch デバイスです。コンポーネントが複数のデバイスに分割されている場合(例えば、テキストエンコーダーが CPU にあり、デノイジングのバックボーンがアクセラレーターで実行されている場合)、アクセラレーターデバイスが返されます。

へ

< >

( *args**kwargs ) → DiffusionPipeline

パラメータ

  • dtype (torch.dtype, 省略可) — 指定したdtypeを持つパイプラインを返します
  • device (torch.Device、省略可) — 指定したdeviceを持つパイプラインを返します。
  • silence_dtype_warnings (str、省略可、デフォルトはFalse) — ターゲットのdtypeがターゲットのdeviceと互換性がない場合、警告を省略するかどうかを指定します。

パイプラインは、指定されたdtypeおよび/またはdtypeに変換されました。

Performs Pipeline dtype and/or device conversion. A torch.dtype and torch.device are inferred from the arguments of self.to(*args, **kwargs).

> パイプラインがすでに正しい torch.dtype と torch.device を持っている場合、そのまま返されます。 それ以外の場合、> 返されるパイプラインは、希望する torch.dtype と torch.device を持つ self のコピーです。

toを呼び出す方法には、次のものがあります。

  • to(dtype, silence_dtype_warnings=False) → DiffusionPipeline は、指定された dtype を持つパイプラインを返します
  • to(device, silence_dtype_warnings=False) → DiffusionPipeline を呼び出すと、指定した device を持つパイプラインが返されます。
  • to(device=None, dtype=None, silence_dtype_warnings=False) → DiffusionPipeline は、指定された device および dtype を持つパイプラインを返します。

コンポーネント

< >

( )

self.components プロパティは、追加のメモリを再割り当てせずに、同じ重みと設定で異なるパイプラインを実行する際に便利です。

dict を返します: パイプラインを初期化するために必要なすべてのモジュールを含む辞書。

例:

>>> from diffusers import (
...     StableDiffusionPipeline,
...     StableDiffusionImg2ImgPipeline,
...     StableDiffusionInpaintPipeline,
... )

>>> text2img = StableDiffusionPipeline.from_pretrained("stable-diffusion-v1-5/stable-diffusion-v1-5")
>>> img2img = StableDiffusionImg2ImgPipeline(**text2img.components)
>>> inpaint = StableDiffusionInpaintPipeline(**text2img.components)

disable_attention_slicing

< >

( )

スライスされたアテンションの計算を無効にします。enable_attention_slicingが以前に呼び出されていた場合、アテンションは1ステップで計算されます。

disable_xformers_memory_efficient_attention

< >

( )

xFormersからのメモリ効率の高いアテンションを無効にします。

ダウンロード

< >

( pretrained_model_name**kwargs ) → os.PathLike

パラメータ

  • pretrained_model_name (str または os.PathLike、省略可) — Hub にホストされている事前学習済みパイプラインの文字列、リポジトリ ID(例: CompVis/ldm-text2im-large-256)。
  • custom_pipeline (str, 省略可) — 以下のいずれかです:
    • 文字列。Hub にホストされている事前学習済みパイプラインの リポジトリ ID(例: CompVis/ldm-text2im-large-256)。リポジトリには、カスタムパイプラインを定義する pipeline.py というファイルが含まれている必要があります。

    • 文字列。GitHub の Community にホストされているコミュニティパイプラインの ファイル名。有効なファイル名は、パイプラインスクリプトではなくファイル名と一致する必要があります(clip_guided_stable_diffusion.py ではなく clip_guided_stable_diffusion)。コミュニティパイプラインは、常に GitHub の現在の main ブランチから読み込まれます。

    • カスタムパイプラインを含むディレクトリ(./my_pipeline_directory/)へのパス。ディレクトリには、カスタムパイプラインを定義するpipeline.pyというファイルが含まれている必要があります。

    > 🧪 これは実験的な機能であり、将来変更される可能性があります。

    カスタムパイプラインの読み込みと作成に関する詳細については、コミュニティパイプラインの貢献方法を参照してください。

  • force_download (bool、任意、デフォルトは False) — モデルの重みおよび設定ファイルを(再)ダウンロードすることを強制するかどうか。キャッシュされたバージョンが存在する場合でも、それらを無視してダウンロードします。
  • proxies (Dict[str, str]、省略可) — プロトコルやエンドポイントごとに使用するプロキシサーバーの辞書です。例えば、{'http': 'foo.bar:3128', 'http://hostname': 'foo.bar:4012'} のように指定します。各リクエストでこれらのプロキシが使用されます。
  • output_loading_info(bool, optional, デフォルトは False) — 欠落キー、予期しないキー、エラーメッセージを含む辞書を返すかどうかを指定します。
  • local_files_only (bool、任意、デフォルトは False) — ローカルのモデル重みと設定ファイルのみを読み込むかどうかを指定します。True に設定すると、モデルは Hub からダウンロードされません。
  • token (str または bool、省略可能) — リモートファイルの HTTP ベアラ認証に使用するトークンです。True の場合、diffusers-cli login で生成されたトークン(~/.huggingface に保存されています)が使用されます。
  • revision (str、任意、デフォルトは"main") — 使用する特定のモデルのバージョンです。ブランチ名、タグ名、コミット ID、または Git によって許可される任意の識別子を使用できます。
  • custom_revision (str、任意、デフォルトは "main") — 使用する特定のモデルバージョンです。Hub からカスタムパイプラインを読み込む場合、revision と同様に、ブランチ名、タグ名、またはコミット ID を指定できます。GitHub からカスタムパイプラインを読み込む場合は、🤗 Diffusers のバージョンを指定でき、それ以外の場合は Hub から読み込む際にデフォルトで "main" が使用されます。
  • mirror (str, 任意) — 中国でモデルをダウンロードする際に、アクセシビリティの問題を解決するためのミラーソースです。ソースの鮮度や安全性を保証するものではなく、詳細についてはミラーサイトをご参照ください。
  • variant (str、省略可) — "fp16" や "ema" のような指定されたバリアントファイル名から重みをロードします。
  • use_safetensors (bool、任意、デフォルトは None) — None に設定されている場合、safetensors の重みが利用可能であり かつ safetensors ライブラリがインストールされている場合に、safetensors の重みがダウンロードされます。True に設定されている場合、モデルは safetensors の重みから強制的に読み込まれます。False に設定されている場合、safetensors の重みは読み込まれません。
  • use_onnx (bool、任意、デフォルトはFalse) — Trueに設定すると、ONNX 重みが存在する場合、常にダウンロードされます。Falseに設定すると、ONNX 重みはダウンロードされません。デフォルトでは、use_onnx は _is_onnx クラス属性の値をデフォルトとしており、非 ONNX パイプラインでは False、ONNX パイプラインでは True になります。ONNX 重みには、.onnx および .pb で終わるファイルの両方が含まれます。
  • trust_remote_code (bool、任意、デフォルトは False) — Hub 上で独自のファイルに定義されたカスタムのパイプラインやコンポーネントを許可するかどうか。このオプションは、信頼できるリポジトリで、かつコードを確認済みの場合にのみ True に設定してください。そうしないと、Hub に存在するコードがローカルマシン上で実行されてしまうためです。
  • use_flashpack (bool、任意、デフォルトはFalse) — Trueに設定すると、FlashPackの重みが存在する場合、常にダウンロードされます。Falseに設定すると、FlashPackの重みはダウンロードされません。

戻り値

os.PathLike

ダウンロードされたパイプラインへのパス。

事前学習済みパイプラインの重みから、PyTorchの拡散パイプラインをダウンロードしてキャッシュします。

> プライベートモデルやゲート付きモデルを使用するには、hf > auth loginでログインしてください

enable_attention_slicing

< >

( slice_size: str | int = 'auto' )

パラメータ

  • slice_size (str または int、任意、デフォルトは "auto") — "auto" の場合、アテンションヘッドへの入力を半分にし、アテンションを2段階で計算します。 "max" の場合、一度に1つのスライスのみを実行することで、最大限のメモリを節約します。数値が指定された場合、attention_head_dim // slice_size 個のスライスを使用します。この場合、attention_head_dim は slice_size の倍数である必要があります。

スライスされたアテンション計算を有効にします。このオプションを有効にすると、アテンションモジュールは入力テンソルをスライスに分割し、複数ステップでアテンションを計算します。アテンションヘッドが1つを超える場合、各ヘッドに対して計算が逐次実行されます。これは、わずかな速度低下を代償にメモリを節約するために有用です。

> ⚠️ PyTorch > 2.0 または xFormers の scaled_dot_product_attention (SDPA) をすでに使用している場合は、attention slicing を有効にしないでください。これらの attention 計算はすでに非常にメモリ効率が高いため、この機能を有効にする必要はありません。SDPA や xFormers とともに attention slicing を有効にすると、重大なスローダウンを引き起こす可能性があります!

例:

>>> import torch
>>> from diffusers import StableDiffusionPipeline

>>> pipe = StableDiffusionPipeline.from_pretrained(
...     "stable-diffusion-v1-5/stable-diffusion-v1-5",
...     dtype=torch.float16,
...     use_safetensors=True,
... )

>>> prompt = "a photo of an astronaut riding a horse on mars"
>>> pipe.enable_attention_slicing()
>>> image = pipe(prompt).images[0]

enable_group_offload

< >

( onload_device: deviceoffload_device: device = torch.device()offload_type: str = 'block_level'num_blocks_per_group: int | None = Nonenon_blocking: bool = Falseuse_stream: bool = Falserecord_stream: bool = Falselow_cpu_mem_usage = Falseoffload_to_disk_path: str | None = Noneexclude_modules: str | list[str] | None = None )

パラメータ

  • onload_device (torch.device) — モジュールのグループがオンロードされるデバイス。
  • offload_device (torch.device、デフォルトは torch.device("cpu")) — モジュールのグループがオフロードされるデバイスです。通常は CPU を指定します。デフォルトは CPU です。
  • offload_type (str または GroupOffloadingType、デフォルトは “block_level”) — 適用するオフローディングの種類です。“block_level” または “leaf_level” のいずれかです。デフォルトは “block_level” です。
  • offload_to_disk_path (str、任意、デフォルトは None) — パラメータをオフロードするディレクトリのパスです。RAM が限られた環境で、速度とメモリ使用量のバランスを重視する場合に、このオプションを設定すると有用です。
  • num_blocks_per_group (int, 任意) — offload_type="block_level" を使用する場合の、グループあたりのブロック数です。offload_type="block_level" を使用する場合は必須です。
  • non_blocking (bool、デフォルトは False) — True の場合、オフローディングとオンローディングは非ブロッキングなデータ転送で実行されます。
  • use_stream (bool、デフォルトは False) — True の場合、CUDA ストリームを使用してオフロードとオンロードを非同期で実行します。これにより、計算とデータ転送をオーバーラップさせることができ、有用な場合があります。
  • record_stream (bool、デフォルトは False) — use_stream と併せて有効にすると、現在のテンソルがこのストリームによって使用されたことをマークします。メモリ使用量がわずかに増加する代わりに、処理が高速になります。詳細については、PyTorch 公式ドキュメントを参照してください。
  • low_cpu_mem_usage (bool、デフォルトは False) — True の場合、テンソルを事前にピン留めするのではなく、オンザフライでピン留めすることで CPU メモリ使用量を最小限に抑えます。 このオプションは、ストリーミング CPU オフロード(つまり use_stream=True)を使用している場合にのみ意味を持ちます。 CPU メモリがボトルネックになっている場合に有用ですが、ストリームを使用する利点を相殺する可能性があります。
  • exclude_modules (Union[str, List[str]]、デフォルトは None) — オフロードから除外するモジュールのリスト。

torch.nn.Module の内部レイヤーにグループオフロードを適用します。グループオフロードとは何か、またどのような場合に有効であるかを理解するために、まず他のサポートされているオフロード手法がどのように動作するかについて、いくつかの背景情報を提供する必要があります。

通常、オフローディングは2つのレベルで行われます。

  • モジュールレベル: Diffusers では、ModelMixin::enable_model_cpu_offload() メソッドを使用してこれを有効にできます。このメソッドは、パイプラインの各コンポーネントを CPU にオフロードして保存し、計算が必要なときにアクセラレータデバイスにオンロードすることで動作します。すべてのコンポーネントをアクセラレータ上に保持するよりもメモリ効率に優れていますが、メモリ要件は依然としてかなり高くなります。このメソッドを動作させるには、ランタイムのデータ型でのモデルサイズと、フォワードパスを完了するために必要な最大の中間活性化テンソルのサイズの合計に相当するメモリが必要です。
  • リーフレベル: Diffusers では、ModelMixin::enable_sequential_cpu_offload() メソッドを使用してこれを有効にできます。 これは、計算グラフの最下層のリーフレベルのパラメータを CPU にオフロードして保存し、計算のためにリーフのみをアクセラレータデバイスにオンロードすることで機能します。これにより、アクセラレータメモリ使用量が最小限に抑えられますが、デバイス同期の回数が多くなるため、速度が遅くなる可能性があります。

Group offloading は、2つの手法の中間的なアプローチです。torch.nn.ModuleList または torch.nn.Sequential として構成された内部レイヤーのグループをオフロードすることで機能します。この手法は、モジュールレベルのオフロードよりもメモリ使用量が少なく、デバイス同期の回数が減るため、リーフレベル/シーケンシャルオフロードよりも高速です。

もう一つのサポートされている機能(非同期データ転送ストリームに対応する CUDA デバイス向け)は、データ転送と計算をオーバーラップさせることで、シーケンシャルなオフローディングと比較して全体の実行時間を短縮できる点です。これは、ストリームを用いたレイヤープリフェッチによって有効化されます。具体的には、次の実行対象となるレイヤーが、現在のレイヤーの実行中にアクセラレータデバイスへのオンローディングを開始します。これにより、メモリ要件はわずかに増加します。なお、この実装はリーフレベルのオフローディングにも対応していますが、ストリームを使用すると大幅に高速化できます。

例:

>>> from diffusers import DiffusionPipeline
>>> import torch

>>> pipe = DiffusionPipeline.from_pretrained("Qwen/Qwen-Image", dtype=torch.bfloat16)

>>> pipe.enable_group_offload(
...     onload_device=torch.device("cuda"),
...     offload_device=torch.device("cpu"),
...     offload_type="leaf_level",
...     use_stream=True,
... )
>>> image = pipe("a beautiful sunset").images[0]

enable_model_cpu_offload

< >

( gpu_id: int | None = Nonedevice: typing.Union[torch.device, str] = None )

パラメータ

  • gpu_id (int, 任意) — 推論に使用するアクセラレータの ID です。指定しない場合、デフォルトで 0 が使用されます。
  • device (torch.Device または str、省略可能、デフォルトは None) — 推論で使用するアクセラレータの PyTorch デバイスタイプです。指定しない場合、利用可能なアクセラレータを自動的に検出して使用します。

enable_sequential_cpu_offload と比較すると、このメソッドは forward メソッドが呼び出されたときに、モデル全体を一度にアクセラレーターへ移動し、次のモデルが実行されるまでモデルはアクセラレーター上に保持されます。メモリ削減効果は enable_sequential_cpu_offload よりも低くなりますが、unet の反復的な実行により、パフォーマンスは大幅に向上します。

enable_sequential_cpu_offload

< >

( gpu_id: int | None = Nonedevice: typing.Union[torch.device, str] = None )

パラメータ

  • gpu_id (int, 任意) — 推論に使用するアクセラレータの ID です。指定しない場合、デフォルトで 0 が使用されます。
  • device (torch.Device または str、省略可能、デフォルトは None) — 推論で使用するアクセラレータの PyTorch デバイスタイプです。指定しない場合、利用可能なアクセラレータを自動的に検出して使用します。

🤗 Accelerate を使用してすべてのモデルを CPU にオフロードし、メモリ使用量を大幅に削減します。呼び出されると、torch.nn.Module コンポーネントのすべての状態辞書(self._exclude_from_cpu_offload に含まれるものを除く)が CPU に保存され、その後 torch.device('meta') に移動されます。特定のサブモジュールの forward メソッドが呼び出されたときにのみ、アクセラレーターに読み込まれます。オフロードはサブモジュール単位で行われます。enable_model_cpu_offload よりメモリ削減効果は高いですが、パフォーマンスは低くなります。

enable_xformers_memory_efficient_attention

< >

( attention_op: typing.Optional[typing.Callable] = None )

パラメータ

  • attention_op (Callable, 省略可) — xFormers の memory_efficient_attention() 関数の op 引数として使用する、デフォルトの None オペレータを上書きします。

xFormersからメモリ効率の高いアテンションを有効にします。このオプションを有効にすると、推論時にGPUメモリ使用量の低下と、場合によっては高速化が期待できます。ただし、学習時の高速化は保証されません。

> ⚠️ memory efficient attention と sliced attention の両方が有効な場合、memory efficient attention が > 優先されます。

例:

>>> import torch
>>> from diffusers import DiffusionPipeline
>>> from xformers.ops import MemoryEfficientAttentionFlashAttentionOp

>>> pipe = DiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-2-1", dtype=torch.float16)
>>> pipe = pipe.to("cuda")
>>> pipe.enable_xformers_memory_efficient_attention(attention_op=MemoryEfficientAttentionFlashAttentionOp)
>>> # Workaround for not accepting attention shape using VAE for Flash Attention
>>> pipe.vae.enable_xformers_memory_efficient_attention(attention_op=None)

from_pipe

< >

( pipeline**kwargs ) → DiffusionPipeline

パラメータ

  • pipeline (DiffusionPipeline) — 新しいパイプラインを作成する元となるパイプライン。

戻り値

DiffusionPipeline

pipeline と同じ重みと設定を持つ新しいパイプライン。

指定されたパイプラインから新しいパイプラインを作成します。このメソッドは、追加のメモリを再割り当てせずに、既存のパイプラインのコンポーネントから新しいパイプラインを作成する場合に便利です。

例:

>>> from diffusers import StableDiffusionPipeline, StableDiffusionSAGPipeline

>>> pipe = StableDiffusionPipeline.from_pretrained("stable-diffusion-v1-5/stable-diffusion-v1-5")
>>> new_pipe = StableDiffusionSAGPipeline.from_pipe(pipe)

from_pretrained

< >

( pretrained_model_name_or_path: str | os.PathLike**kwargs )

パラメータ

  • pretrained_model_name_or_path (str または os.PathLike, 省略可) — 次のいずれかです。
    • Hub にホストされている事前学習済みパイプラインの repo id(例: CompVis/ldm-text2im-large-256)を表す文字列
    • パイプラインの重みをsave_pretrained()で保存して保存したディレクトリへのパス(例:./my_pipeline_directory/)
  • dtype (torch.dtype または dict[str, Union[str, torch.dtype]]、省略可) — デフォルトの torch.dtype を上書きし、別の dtype でモデルを読み込みます。サブモデルを異なる dtype で読み込む場合は、dict を渡します(例: {'transformer': torch.bfloat16, 'vae': torch.float16})。指定されていないコンポーネントのデフォルト dtype は default で設定します(例: {'transformer': torch.bfloat16, 'default': torch.float16})。コンポーネントが指定されておらず、デフォルトも設定されていない場合は、torch.float32 が使用されます。
  • custom_pipeline (str, 省略可) —

    > 🧪 これは実験的な機能であり、将来変更される可能性があります。

    次のいずれかです:

    • repo id(例: hf-internal-testing/diffusers-dummy-pipeline)の文字列。Hub にホストされているカスタムパイプラインの ID です。リポジトリには、カスタムパイプラインを定義する pipeline.py というファイルが含まれている必要があります。
    • 文字列。GitHub上のCommunityにホストされているコミュニティパイプラインのファイル名です。有効なファイル名は、パイプラインスクリプトではなくファイル名と一致する必要があります(clip_guided_stable_diffusion.pyではなくclip_guided_stable_diffusion)。コミュニティパイプラインは、常にGitHubの現在のmainブランチから読み込まれます。
    • カスタムパイプラインを含むディレクトリへのパス(./my_pipeline_directory/)。このディレクトリには、カスタムパイプラインを定義するpipeline.pyというファイルが含まれている必要があります。

    カスタムパイプラインの読み込みと作成に関する詳細については、カスタムパイプラインの読み込みと追加を参照してください。

  • force_download (bool、任意、デフォルトは False) — モデルの重みおよび設定ファイルを(再)ダウンロードすることを強制するかどうか。キャッシュされたバージョンが存在する場合でも、それらを無視してダウンロードします。
  • cache_dir (Union[str, os.PathLike], 省略可) — 標準のキャッシュを使用しない場合、ダウンロードした事前学習済みモデルの構成がキャッシュされるディレクトリのパス。
  • proxies (Dict[str, str]、省略可) — プロトコルやエンドポイントごとに使用するプロキシサーバーの辞書です。例えば、{'http': 'foo.bar:3128', 'http://hostname': 'foo.bar:4012'} のように指定します。各リクエストでこれらのプロキシが使用されます。
  • output_loading_info(bool, optional, デフォルトは False) — 欠落キー、予期しないキー、エラーメッセージを含む辞書を返すかどうかを指定します。
  • local_files_only (bool、任意、デフォルトは False) — ローカルのモデル重みと設定ファイルのみを読み込むかどうかを指定します。True に設定すると、モデルは Hub からダウンロードされません。
  • token (str または bool、省略可能) — リモートファイルの HTTP ベアラ認証に使用するトークンです。True の場合、diffusers-cli login で生成されたトークン(~/.huggingface に保存されています)が使用されます。
  • revision (str、任意、デフォルトは"main") — 使用する特定のモデルのバージョンです。ブランチ名、タグ名、コミット ID、または Git によって許可される任意の識別子を使用できます。
  • custom_revision (str, 任意) — 使用する特定のモデルバージョンです。Hub からカスタムパイプラインを読み込む場合の revision と同様に、ブランチ名、タグ名、またはコミット ID を指定できます。デフォルトでは、最新の安定版の 🤗 Diffusers バージョンが使用されます。
  • mirror (str, 任意) — 中国でモデルをダウンロードする際に、アクセシビリティの問題を解決するためのミラーソースです。ソースの鮮度や安全性を保証するものではなく、詳細についてはミラーサイトをご参照ください。
  • device_map (str, 任意) — パイプラインの各コンポーネントを利用可能なデバイスに配置する方法を指定する戦略です。現在サポートされているのは “balanced” device_map のみです。詳細は こちら をご覧ください。
  • max_memory (Dict, 任意) — 最大メモリを示すデバイスの識別子の辞書です。未設定の場合、各 GPU の利用可能な最大メモリと、利用可能な CPU RAM がデフォルトとして使用されます。
  • offload_folder (str または os.PathLike、省略可) — "disk" が device_map に含まれる場合、重みをオフロードするパス。
  • offload_state_dict (bool、省略可) — Trueの場合、CPU RAMが不足するのを避けるため、CPU state dictの重さとチェックポイントの最大シャードの合計が収まらない場合に、CPU state dictを一時的にハードドライブへオフロードします。ディスクオフロードが存在する場合、デフォルトはTrueです。
  • low_cpu_mem_usage (bool、任意、torch のバージョンが 1.9.0 以上の場合デフォルトは True、それ以外の場合は False) — 重みの初期化を行わず、事前学習済み重みのみを読み込むことで、モデルの読み込みを高速化します。また、モデルの読み込み中に CPU メモリ(ピークメモリを含む)をモデルサイズの 1 倍以下に抑えるよう試みます。PyTorch 1.9.0 以上でのみサポートされています。PyTorch の古いバージョンを使用している場合、この引数を True に設定するとエラーが発生します。
  • use_safetensors (bool、任意、デフォルトは None) — None に設定されている場合、safetensors の重みが利用可能であり かつ safetensors ライブラリがインストールされている場合に、safetensors の重みがダウンロードされます。True に設定されている場合、モデルは safetensors の重みから強制的に読み込まれます。False に設定されている場合、safetensors の重みは読み込まれません。
  • use_onnx (bool、省略可能、デフォルトは None) — True に設定すると、ONNX ウェイトが存在する場合に常にダウンロードされます。False に設定すると、ONNX ウェイトはダウンロードされません。デフォルトでは use_onnx は _is_onnx クラス属性の値をデフォルトとし、非 ONNX パイプラインでは False、ONNX パイプラインでは True になります。ONNX ウェイトには、.onnx および .pb で終わるファイルの両方が含まれます。
  • kwargs (残りのキーワード引数の辞書、任意) — ロードおよびセーブ可能な変数(特定のパイプラインクラスのコンポーネント)を上書きするために使用できます。上書きされたコンポーネントは、パイプラインの__init__メソッドに直接渡されます。詳細は以下の例を参照してください。
  • variant (str、省略可) — "fp16" や "ema" のような指定されたバリアントファイル名から重みをロードします。
  • disable_mmap (‘bool’, 任意、デフォルトは ‘False’) — Safetensors モデルの読み込み時に mmap を無効にするかどうか。モデルがネットワークマウントやハードドライブ上にあり、mmap のランダムアクセス(seek)を適切に処理できない可能性がある場合、このオプションを有効にするとパフォーマンスが向上する場合があります。

事前学習済みのパイプライン重みから、PyTorchの拡散パイプラインをインスタンス化します。

パイプラインはデフォルトで評価モード(model.eval())に設定されます。

以下のエラーメッセージが表示された場合、下流タスク用に重みをファインチューニングする必要があります。

Some weights of UNet2DConditionModel were not initialized from the model checkpoint at stable-diffusion-v1-5/stable-diffusion-v1-5 and are newly initialized because the shapes did not match:
- conv_in.weight: found shape torch.Size([320, 4, 3, 3]) in the checkpoint and torch.Size([320, 9, 3, 3]) in the model instantiated
You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.

> プライベートモデルやゲート付きモデルを使用するには、hf > auth loginでログインしてください。

例:

>>> from diffusers import DiffusionPipeline

>>> # Download pipeline from huggingface.co and cache.
>>> pipeline = DiffusionPipeline.from_pretrained("CompVis/ldm-text2im-large-256")

>>> # Download pipeline that requires an authorization token
>>> # For more information on access tokens, please refer to this section
>>> # of the documentation](https://huggingface.co/docs/hub/security-tokens)
>>> pipeline = DiffusionPipeline.from_pretrained("stable-diffusion-v1-5/stable-diffusion-v1-5")

>>> # Use a different scheduler
>>> from diffusers import LMSDiscreteScheduler

>>> scheduler = LMSDiscreteScheduler.from_config(pipeline.scheduler.config)
>>> pipeline.scheduler = scheduler

maybe_free_model_hooks

< >

( )

以下の処理を実行するメソッドです:

  • すべてのコンポーネントをオフロードします。
  • enable_model_cpu_offload を使用した際に追加されたすべてのモデルフックを削除し、その後、それらを再度適用します。 モデルがオフロードされていない場合、この関数は何もしません。
  • register_hook() で追加された場合、denoiser コンポーネントの状態付き diffusers フックをリセットします。

__call__ 関数の末尾にこの関数を追加してください。これにより、enable_model_cpu_offload を適用した際に正しく動作します。

numpy_to_pil

< >

( images )

NumPyの画像または画像のバッチをPIL画像に変換します。

remove_all_hooks

< >

( )

enable_sequential_cpu_offload または enable_model_cpu_offload を使用して追加されたすべてのフックを削除します。

reset_device_map

< >

( )

デバイスマップ(存在する場合)を None にリセットします。

save_pretrained

< >

( save_directory: str | os.PathLikesafe_serialization: bool = Truevariant: str | None = Nonemax_shard_size: int | str | None = Nonepush_to_hub: bool = Falseuse_flashpack: bool = False**kwargs )

パラメータ

  • save_directory (str または os.PathLike) — パイプラインを保存するディレクトリ。存在しない場合は作成されます。
  • safe_serialization (bool、任意、デフォルトはTrue) — safetensorsを使用してモデルを保存するか、従来のpickleによるPyTorchの方式で保存するかどうかを指定します。
  • variant (str, 任意) — 指定した場合、重みはpytorch_model.<variant>.binの形式で保存されます。
  • max_shard_size (int または str、デフォルトは None) — シャーディングされる前のチェックポイントの最大サイズです。シャーディングされた各チェックポイントのサイズは、このサイズ未満になります。文字列で指定する場合は、数字の後に単位("5GB" など)を続ける必要があります。整数で指定する場合は、単位はバイトです。なお、diffusers の最新バージョンへのアップグレードをユーザーに促すため、2024 年 10 月以降、一定期間後にこの上限値が引き下げられます。これは、Hugging Face エコシステム内の異なるライブラリ(例えば transformers や accelerate など)間で、この引数の共通のデフォルトサイズを確立するためのものです。
  • push_to_hub (bool、省略可、デフォルトは False) — モデルを保存した後、Hugging Face モデルハブにプッシュするかどうかを指定します。プッシュ先のリポジトリは repo_id で指定できます(指定しない場合、save_directory の名前があなたのネームスペース内でデフォルトとして使用されます)。
  • kwargs (Dict[str, Any]、省略可) — push_to_hub() メソッドに渡される追加のキーワード引数。

パイプラインの保存可能なすべての変数をディレクトリに保存します。パイプラインの変数は、そのクラスが保存メソッドと読み込みメソッドの両方を実装している場合に、保存および読み込みが可能です。パイプラインは、from_pretrained()クラスメソッドを使用して簡単に再読み込みできます。

diffusers.StableDiffusionMixin.enable_freeu

< >

( s1: floats2: floatb1: floatb2: float )

パラメータ

  • s1 (float) — ステージ1のスケーリング係数。スキップ特徴量の寄与を減衰するために使用します。これにより、強化されたノイズ除去プロセスにおける「過剰平滑化効果」を緩和します。
  • s2 (float) — ステージ2のスキップ特徴の寄与を減衰させるためのスケーリング係数。これは、強化されたノイズ除去プロセスにおける「過剰平滑化効果」を軽減するために使用されます。
  • b1 (float) — ステージ1のスケーリング係数。バックボーン特徴の寄与を強調するために使用します。
  • b2 (float) — バックボーン特徴の寄与を強調するためのステージ2のスケーリング係数。

https://huggingface.co/papers/2309.11497 に記載されている FreeU メカニズムを有効にします。

スケーリング係数の後ろの接尾辞は、それらが適用されるステージを表しています。

Stable Diffusion v1、v2、Stable Diffusion XLなどの異なるパイプラインで良好に動作することが確認されている値の組み合わせについては、公式リポジトリを参照してください。

diffusers.StableDiffusionMixin.disable_freeu

< >

( )

有効化されている場合、FreeUメカニズムを無効にします。

PushToHubMixin

class diffusers.utils.PushToHubMixin

< >

( )

Hugging Face Hub にモデル、スケジューラ、またはパイプラインをプッシュするための Mixin。

push_to_hub

< >

( repo_id: strcommit_message: str | None = Noneprivate: bool | None = Nonetoken: str | None = Nonecreate_pr: bool = Falsesafe_serialization: bool = Truevariant: str | None = Nonesubfolder: str | None = None )

パラメータ

  • repo_id (str) — モデル、スケジューラ、またはパイプラインのファイルをプッシュするリポジトリの名前です。組織にプッシュする場合は、組織名を含める必要があります。repo_id はローカルディレクトリへのパスとしても指定できます。
  • commit_message (str, 省略可) — プッシュ時にコミットするメッセージ。デフォルトは "Upload {object}" です。
  • private (bool、省略可) — リポジトリをプライベートにするかどうか。None(デフォルト)の場合、組織のデフォルトがプライベートでない限り、リポジトリはパブリックになります。リポジトリが既に存在する場合、この値は無視されます。
  • token (str, 任意) — リモートファイルの HTTP ベアラ認証に使用するトークン。hf auth login を実行した際に生成されるトークン(~/.huggingface に保存されます)。
  • create_pr (bool、省略可、デフォルトはFalse) — アップロードしたファイルを含む PR を作成するか、直接コミットするかどうかを指定します。
  • safe_serialization (bool、任意、デフォルトはTrue) — モデルの重みをsafetensors形式に変換するかどうかを指定します。
  • variant (str, 任意) — 指定した場合、重みはpytorch_model.<variant>.binの形式で保存されます。

モデル、スケジューラー、またはパイプラインのファイルを🤗 Hugging Face Hubにアップロードします。

例:

from diffusers import UNet2DConditionModel

unet = UNet2DConditionModel.from_pretrained("stabilityai/stable-diffusion-2", subfolder="unet")

# Push the `unet` to your namespace with the name "my-finetuned-unet".
unet.push_to_hub("my-finetuned-unet")

# Push the `unet` to an organization with the name "my-finetuned-unet".
unet.push_to_hub("your-org/my-finetuned-unet")

コールバック

class diffusers.callbacks.PipelineCallback

< >

( cutoff_step_ratio = 1.0cutoff_step_index = None )

パイプラインで使用されるすべての公式コールバックの基底クラスです。このクラスは、カスタムコールバックを実装するための構造を提供し、すべてのコールバックが一貫したインターフェースを持つことを保証します。

以下を実装してください: tensor_inputs: これは、あなたのコールバックに固有のテンソル入力のリストを返す必要があります。パイプラインクラスの ._callback_tensor_inputs 属性にリストされている変数のみを含めることができます。 callback_fn: このメソッドは、あなたのコールバックのコア機能を定義します。

class diffusers.callbacks.SDCFGCutoffCallback

< >

( cutoff_step_ratio = 1.0cutoff_step_index = None )

Stable Diffusion パイプライン用のコールバック関数。cutoff_step_ratio または cutoff_step_index で設定された一定のステップ数に達した後、このコールバックは CFG を無効にします。

注: このコールバックは、cutoffステップ以降に_guidance_scale属性を0.0に変更することで、パイプラインを変更します。

class diffusers.callbacks.SDXLCFGCutoffCallback

< >

( cutoff_step_ratio = 1.0cutoff_step_index = None )

ベースの Stable Diffusion XL パイプライン用のコールバック関数です。cutoff_step_ratio または cutoff_step_index で設定された一定のステップ数に達した後、このコールバックは CFG を無効にします。

注: このコールバックは、cutoffステップ以降に_guidance_scale属性を0.0に変更することで、パイプラインを変更します。

class diffusers.callbacks.SDXLControlnetCFGCutoffCallback

< >

( cutoff_step_ratio = 1.0cutoff_step_index = None )

Controlnet Stable Diffusion XL パイプライン用のコールバック関数。cutoff_step_ratio または cutoff_step_index で設定された一定のステップ数に達した後、このコールバックは CFG を無効にします。

注: このコールバックは、cutoffステップ以降に_guidance_scale属性を0.0に変更することで、パイプラインを変更します。

class diffusers.callbacks.IPAdapterScaleCutoffCallback

< >

( cutoff_step_ratio = 1.0cutoff_step_index = None )

IPAdapterMixin を継承するすべてのパイプライン用のコールバック関数です。cutoff_step_ratio または cutoff_step_index で設定された一定のステップ数に達した後、このコールバックは IP Adapter のスケールを 0.0 に設定します。

注: このコールバックは、cutoffステップ後にスケールを0.0に設定することで、IP Adapterのattentionプロセッサを変更します。

class diffusers.callbacks.SD3CFGCutoffCallback

< >

( cutoff_step_ratio = 1.0cutoff_step_index = None )

Stable Diffusion 3 パイプライン用のコールバック関数。cutoff_step_ratio または cutoff_step_index で設定された一定のステップ数に達した後、このコールバックは CFG を無効にします。

注: このコールバックは、cutoffステップ以降に_guidance_scale属性を0.0に変更することで、パイプラインを変更します。

Update on GitHub