Diffusers documentation

キャッシュ手法

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

キャッシュ手法

Cacheメソッドは、attention層やfeedforward層などの特定の層の中間出力を保存して再利用することで、各推論ステップでの再計算を回避し、diffusion transformerを高速化します。

CacheMixin

class diffusers.CacheMixin

< >

( )

拡散モデルにおけるキャッシュ技術の有効化/無効化を行うクラスです。

サポートされているキャッシュ技術:

cache_context

< >

( name: str**kwargs )

キャッシュ管理のための情報を提供するコンテキストマネージャー。

name はデノイジング呼び出しの名前で、通常は "cond" または "uncond" です。キーワード引数は、デノイジングループがどこにあるかを説明します。受け入れられるフィールドについては CacheContext を参照してください。例えば cache_context("cond", step_index=i, sigma=sigma) のように使用します。

enable_cache

< >

( config )

パラメータ

モデルでキャッシュ技術を有効にします。

例:

>>> import torch
>>> from diffusers import CogVideoXPipeline, PyramidAttentionBroadcastConfig

>>> pipe = CogVideoXPipeline.from_pretrained("THUDM/CogVideoX-5b", torch_dtype=torch.bfloat16)
>>> pipe.to("cuda")

>>> config = PyramidAttentionBroadcastConfig(
...     spatial_attention_block_skip_range=2,
...     spatial_attention_timestep_skip_range=(100, 800),
...     current_timestep_callback=lambda: pipe.current_timestep,
... )
>>> pipe.transformer.enable_cache(config)

PyramidAttentionBroadcastConfig

クラス diffusers.PyramidAttentionBroadcastConfig

< >

( spatial_attention_block_skip_range: int | None = Nonetemporal_attention_block_skip_range: int | None = Nonecross_attention_block_skip_range: int | None = Nonespatial_attention_timestep_skip_range: tuple[int, int] = (100, 800)temporal_attention_timestep_skip_range: tuple[int, int] = (100, 800)cross_attention_timestep_skip_range: tuple[int, int] = (100, 800)spatial_attention_block_identifiers: tuple[str, ...] = ('blocks', 'transformer_blocks', 'single_transformer_blocks', 'layers', 'visual_transformer_blocks')temporal_attention_block_identifiers: tuple[str, ...] = ('temporal_transformer_blocks',)cross_attention_block_identifiers: tuple[str, ...] = ('blocks', 'transformer_blocks', 'layers')current_timestep_callback: typing.Callable[[], int] = None )

パラメータ

  • spatial_attention_block_skip_range (int、任意、デフォルトはNone) — 再利用するためにアテンション状態を計算する前に、特定の空間アテンションブロードキャストがスキップされる回数を指定します。この値がNに設定されている場合、新しいアテンション状態を再計算する前に、アテンションの計算がN - 1回スキップされます(つまり、古いアテンション状態が再利用されます)。
  • temporal_attention_block_skip_range (int、任意、デフォルトはNone) — 再利用するアテンション状態を計算する前に、特定の時間的アテンションブロードキャストがスキップされる回数を指定します。この値がNに設定されている場合、新しいアテンション状態を再計算する前に、アテンションの計算がN - 1回スキップされます(つまり、古いアテンション状態が再利用されます)。
  • cross_attention_block_skip_range (int、任意、デフォルトはNone) — 再利用するアテンション状態を計算する前に、特定のクロスアテンションのブロードキャストがスキップされる回数を指定します。この値がNに設定されている場合、新しいアテンション状態を再計算する前に、アテンションの計算がN - 1回スキップされます(つまり、古いアテンション状態が再利用されます)。
  • spatial_attention_timestep_skip_range (tuple[int, int]、デフォルトは (100, 800)) — 空間注意層でスキップするタイムステップの範囲です。現在のタイムステップが指定された範囲内にある場合、注意の計算は条件付きでスキップされます。
  • temporal_attention_timestep_skip_range (tuple[int, int]、デフォルトは (100, 800)) — temporal attention レイヤーでスキップするタイムステップの範囲です。現在のタイムステップが指定された範囲内にある場合、attention の計算は条件付きでスキップされます。
  • cross_attention_timestep_skip_range (tuple[int, int]、デフォルトは (100, 800)) — クロスアテンション層でスキップするタイムステップの範囲です。現在のタイムステップが指定された範囲内にある場合、アテンションの計算が条件付きでスキップされます。
  • spatial_attention_block_identifiers (tuple[str, ...]) — レイヤーが空間注意レイヤーかどうかを判定するために、レイヤー名と照合する識別子です。
  • temporal_attention_block_identifiers (tuple[str, ...]) — レイヤーが時間的アテンションレイヤーかどうかを判定するために、レイヤー名と照合する識別子です。
  • cross_attention_block_identifiers (tuple[str, ...]) — レイヤーがクロスアテンションレイヤーかどうかを判定するために、レイヤー名と照合する識別子です。

Pyramid Attention Broadcastの設定

diffusers.apply_pyramid_attention_broadcast

< >

( module: Moduleconfig: PyramidAttentionBroadcastConfig )

パラメータ

  • module (torch.nn.Module) — Pyramid Attention Broadcast を適用するモジュール。
  • config (PyramidAttentionBroadcastConfig | None、optional、デフォルトはNone) — Pyramid Attention Broadcast に使用する設定です。

指定されたパイプラインにPyramid Attention Broadcastを適用します。

PABは、タイムステップ間のアテンション状態の類似性を活用して、アテンション計算の計算コストを削減するアテンション近似手法です。論文の要点は、タイムステップ間のクロスアテンション層のアテンション類似性が最も高く、次に時間方向および空間方向の層の類似性が低いという点です。これにより、時間方向および空間方向の層よりも、クロスアテンション層のアテンション計算をより頻繁にスキップすることが可能になります。したがって、PABを適用することで、推論プロセスが高速化されます。

例:

>>> import torch
>>> from diffusers import CogVideoXPipeline, PyramidAttentionBroadcastConfig, apply_pyramid_attention_broadcast
>>> from diffusers.utils import export_to_video

>>> pipe = CogVideoXPipeline.from_pretrained("THUDM/CogVideoX-5b", torch_dtype=torch.bfloat16)
>>> pipe.to("cuda")

>>> config = PyramidAttentionBroadcastConfig(
...     spatial_attention_block_skip_range=2,
...     spatial_attention_timestep_skip_range=(100, 800),
...     current_timestep_callback=lambda: pipe.current_timestep,
... )
>>> apply_pyramid_attention_broadcast(pipe.transformer, config)

FasterCacheConfig

クラス diffusers.FasterCacheConfig

< >

( spatial_attention_block_skip_range: int = 2temporal_attention_block_skip_range: int | None = Nonespatial_attention_timestep_skip_range: tuple[int, int] = (-1, 681)temporal_attention_timestep_skip_range: tuple[int, int] = (-1, 681)low_frequency_weight_update_timestep_range: tuple[int, int] = (99, 901)high_frequency_weight_update_timestep_range: tuple[int, int] = (-1, 301)alpha_low_frequency: float = 1.1alpha_high_frequency: float = 1.1unconditional_batch_skip_range: int = 5unconditional_batch_timestep_skip_range: tuple[int, int] = (-1, 641)spatial_attention_block_identifiers: tuple[str, ...] = ('^blocks.*attn', '^transformer_blocks.*attn', '^single_transformer_blocks.*attn')temporal_attention_block_identifiers: tuple[str, ...] = ('^temporal_transformer_blocks.*attn',)attention_weight_callback: typing.Callable[[torch.nn.Module], float] = Nonelow_frequency_weight_callback: typing.Callable[[torch.nn.Module], float] = Nonehigh_frequency_weight_callback: typing.Callable[[torch.nn.Module], float] = Nonetensor_format: str = 'BCFHW'is_guidance_distilled: bool = Falsecurrent_timestep_callback: typing.Callable[[], int] = None_unconditional_conditional_input_kwargs_identifiers: list[str] = ('hidden_states', 'encoder_hidden_states', 'timestep', 'attention_mask', 'encoder_attention_mask') )

パラメータ

  • spatial_attention_block_skip_range (int、デフォルトは2) — N回ごとにアテンション状態を計算します。この値がNに設定されている場合、新しいアテンション状態を再計算する前に、アテンションの計算がN - 1回スキップされます(つまり、キャッシュされたアテンション状態が再利用されます)。
  • temporal_attention_block_skip_range (int、任意、デフォルトはNone) — N回ごとにアテンション状態を計算します。この値をNに設定すると、新しいアテンション状態を再計算する前に、アテンションの計算がN - 1回スキップされます(つまり、キャッシュされたアテンション状態が再利用されます)。
  • spatial_attention_timestep_skip_range (tuple[float, float]、デフォルトは (-1, 681)) — 品質に大きな損失が生じない範囲で、空間注意機構の計算をスキップできるタイムステップの範囲です。これは、使用するモデルに基づいてユーザーが決定する必要があります。タプルの最初の値は下限、2番目の値は上限です。一般的に、デノイジング用の拡散タイムステップは 0 から 1000 の逆順の範囲(つまり、デノイジングはタイムステップ 1000 から始まり、タイムステップ 0 で終わる)です。デフォルト値の場合、空間注意機構の計算スキップは、デノイジングのタイムステップ 681 に到達した後にのみ適用され、デノイジングプロセスの終了まで継続します。
  • temporal_attention_timestep_skip_range (tuple[float, float]、任意、デフォルトはNone) — 品質に大きな影響を与えずに時間方向の注意計算をスキップできるタイムステップの範囲です。これは、使用するモデルに基づいてユーザーが決定する必要があります。タプルの最初の値は下限、2番目の値は上限です。一般的に、ノイズ除去のための拡散タイムステップは 0 から 1000 の逆順の範囲(つまり、ノイズ除去はタイムステップ 1000 から始まり、タイムステップ 0 で終わる)です。
  • low_frequency_weight_update_timestep_range (tuple[int, int]、デフォルトは(99, 901)) — 低周波数重みスケーリングの更新が適用されるタイムステップの範囲です。タプルの最初の値はタイムステップ範囲の下限、2番目の値は上限です。更新用のコールバック関数は、この範囲内でのみ呼び出されます。
  • high_frequency_weight_update_timestep_range (tuple[int, int]、デフォルトは(-1, 301)) — 高周波数ウェイトスケーリングの更新が適用されるタイムステップの範囲です。タプルの最初の値はタイムステップ範囲の下限、2番目の値は上限です。更新用のコールバック関数は、この範囲内でのみ呼び出されます。
  • alpha_low_frequency (float、デフォルト値は1.1) — 低周波数更新をスケーリングするための重みです。これは、条件付きブランチの出力から無条件ブランチを近似するために使用されます。
  • alpha_high_frequency (float、デフォルト値は1.1) — 高周波数更新をスケーリングするための重みです。これは、条件付きブランチの出力から無条件ブランチを近似するために使用されます。
  • unconditional_batch_skip_range (int、デフォルト値は5) — N回ごとに無条件ブランチを処理します。この値をNに設定すると、新しい無条件ブランチの状態を再計算する前に、無条件ブランチの計算がN - 1回スキップされます(つまり、キャッシュされた無条件ブランチの状態が再利用されます)。
  • unconditional_batch_timestep_skip_range (tuple[float, float]、デフォルトは(-1, 641)) — 品質に大きな劣化をもたらさずに、無条件ブランチの計算をスキップできるタイムステップの範囲です。これは、ベースとなるモデルに基づいてユーザーが決定する必要があります。タプルの最初の値は下限、2番目の値は上限です。
  • spatial_attention_block_identifiers (tuple[str, ...]、デフォルトは ("blocks.*attn1", "transformer_blocks.*attn1", "single_transformer_blocks.*attn1")) — モデル内の空間注意ブロックに一致させる識別子です。ブロック名にこれらの識別子のいずれかが含まれている場合、FasterCache がそのブロックに適用されます。これは、完全なレイヤー名、部分レイヤー名、または正規表現パターンとして指定できます。一致判定は常に正規表現マッチングによって行われます。
  • temporal_attention_block_identifiers (tuple[str, ...]、デフォルトは("temporal_transformer_blocks.*attn1",)) — モデル内の時間的アテンションブロックに一致させる識別子です。ブロック名にこれらの識別子のいずれかが含まれている場合、FasterCacheがそのブロックに適用されます。これは、完全なレイヤー名、部分レイヤー名、または正規表現パターンとして指定できます。一致判定は常に正規表現マッチングによって行われます。
  • attention_weight_callback (Callable[[torch.nn.Module], float]、デフォルトはNone) — アテンション出力をスケーリングするための重みを決定するコールバック関数です。この関数は、アテンションモジュールを入力として受け取り、float 型の値を返す必要があります。これは、条件付きブランチの出力から無条件ブランチを近似するために使用されます。指定されない場合、すべてのタイムステップでデフォルトの重みは 0.5 になります。通常、論文で説明されているように、この重みは推論が進むにつれて 0 から 1 へ徐々に増加させるべきです。ユーザーには、デノイジングが進むにつれて推論ステップ数やベースとなるモデルの挙動を考慮した独自の重みスケジュールを試し、提供することを推奨します。
  • low_frequency_weight_callback (Callable[[torch.nn.Module], float]、デフォルトはNone) — 低周波数更新をスケーリングするための重みを決定するコールバック関数です。指定されない場合、デフォルトの重みは、論文で説明されている範囲内のタイムステップに対して1.1になります。
  • high_frequency_weight_callback (Callable[[torch.nn.Module], float]、デフォルトはNone) — 高周波更新をスケーリングするための重みを決定するコールバック関数です。指定されない場合、デフォルトの重みは、論文で説明されている範囲内のタイムステップに対して1.1になります。
  • tensor_format (str、デフォルトは "BCFHW") — 入力テンソルの形式です。これは "BCFHW"、"BFCHW"、または "BCHW" のいずれかである必要があります。この形式は、低周波数成分と高周波数成分を計算するために、個々の潜在フレームを分割するために使用されます。
  • is_guidance_distilled (bool、デフォルトはFalse) — モデルがguidance distilledかどうかを示します。モデルがguidance distilledの場合、FasterCacheはdenoiserレベルでは適用されません(unconditional branchの計算が存在しないため、それをスキップすることはできないためです)。
  • _unconditional_conditional_input_kwargs_identifiers (list[str]、デフォルトは ("hidden_states", "encoder_hidden_states", "timestep", "attention_mask", "encoder_attention_mask")) — バッチ方向に連結された無条件入力と条件付き入力を含む入力 kwargs を照合するための識別子です。入力 kwargs の名前がこれらの識別子のいずれかを含む場合、FasterCache は入力を無条件ブランチと条件付きブランチに分割します。これは、バッチ方向に連結された無条件入力と条件付き入力を含む入力 kwargs の正確な名前のリストでなければなりません。

FasterCacheの設定。

diffusers.apply_faster_cache

< >

( module: Moduleconfig: FasterCacheConfig )

パラメータ

  • module (torch.nn.Module) — FasterCacheを適用するPyTorchモジュールです。通常、Diffusersでサポートされているトランスフォーマーアーキテクチャ、例えばCogVideoXTransformer3DModelなどが該当しますが、外部の実装でも動作する場合があります。
  • config (FasterCacheConfig) — FasterCache に使用する設定です。

指定されたパイプラインにFasterCacheを適用します。

例:

>>> import torch
>>> from diffusers import CogVideoXPipeline, FasterCacheConfig, apply_faster_cache

>>> pipe = CogVideoXPipeline.from_pretrained("THUDM/CogVideoX-5b", torch_dtype=torch.bfloat16)
>>> pipe.to("cuda")

>>> config = FasterCacheConfig(
...     spatial_attention_block_skip_range=2,
...     spatial_attention_timestep_skip_range=(-1, 681),
...     low_frequency_weight_update_timestep_range=(99, 641),
...     high_frequency_weight_update_timestep_range=(-1, 301),
...     spatial_attention_block_identifiers=["transformer_blocks"],
...     attention_weight_callback=lambda _: 0.3,
...     tensor_format="BFCHW",
... )
>>> apply_faster_cache(pipe.transformer, config)

FirstBlockCacheConfig

クラス diffusers.FirstBlockCacheConfig

< >

( threshold: float = 0.05 )

パラメータ

  • threshold (float, デフォルト値は 0.05) — モデルの全レイヤーをフォワードパスで処理する必要があるかどうかを判定するための閾値です。閾値が高いほど、フォワードパスで処理されるレイヤー数が少なくなり、推論が高速化される傾向がありますが、生成品質が低下する可能性があります。一方、閾値を低くしても、生成速度の大幅な向上にはつながらない場合があります。この閾値は、最初の Transformer ブロックからの現在の出力とキャッシュされた出力の残差の absmean 差と比較されます。差が閾値を下回る場合、フォワードパスはスキップされます。

First Block Cacheの設定。

diffusers.apply_first_block_cache

< >

( module: Moduleconfig: FirstBlockCacheConfig )

パラメータ

  • module (torch.nn.Module) — FBCacheを適用するPyTorchモジュールです。通常、CogVideoXTransformer3DModelのようなDiffusersでサポートされているTransformerアーキテクチャを指定しますが、外部の実装でも動作する場合があります。
  • config (FirstBlockCacheConfig) — FBCache手法を適用するために使用する設定です。

指定されたモジュールにFirst Block Cacheを適用します。

First Block CacheはTeaCacheのアイデアを基盤としています。幅広いモデルに対して汎用的に実装しやすく、まず実験目的で統合されました。

例:

>>> import torch
>>> from diffusers import CogView4Pipeline
>>> from diffusers.hooks import apply_first_block_cache, FirstBlockCacheConfig

>>> pipe = CogView4Pipeline.from_pretrained("THUDM/CogView4-6B", torch_dtype=torch.bfloat16)
>>> pipe.to("cuda")

>>> apply_first_block_cache(pipe.transformer, FirstBlockCacheConfig(threshold=0.2))

>>> prompt = "A photo of an astronaut riding a horse on mars"
>>> image = pipe(prompt, generator=torch.Generator().manual_seed(42)).images[0]
>>> image.save("output.png")

TaylorSeerCacheConfig

クラス diffusers.TaylorSeerCacheConfig

< >

( cache_interval: int = 5disable_cache_before_step: int = 3disable_cache_after_step: int | None = Nonemax_order: int = 1taylor_factors_dtype: typing.Optional[torch.dtype] = torch.bfloat16skip_predict_identifiers: list[str] | None = Nonecache_identifiers: list[str] | None = Noneuse_lite_mode: bool = False )

パラメータ

  • cache_interval (int、デフォルトは5) — 完全な計算ステップ間の間隔です。完全な計算の後、キャッシュされた(予測された)出力は、新しい完全なフォワードパスで更新されるまで、この数だけ続くデノイジングステップで再利用されます。
  • disable_cache_before_step (int、デフォルト値は3) — キャッシュが無効化されるデノイジングステップのインデックスです。つまり、初期のステップ(0 から disable_cache_before_step - 1 まで)では、Taylor 級数近似のためのデータを収集するために完全な計算が実行されます。これらのステップでは、Taylor 係数が更新されますが、キャッシュや予測は適用されません。このステップからキャッシュが開始されます。
  • disable_cache_after_step (int、任意、デフォルトはNone) — キャッシュが無効化されるデノイジングステップのインデックスです。設定した場合、この値以上のステップでは、予測や状態の更新を行わずにすべてのモジュールが完全な計算を実行し、必要に応じて後段の精度を確保します。
  • max_order (int, デフォルトは 1) — モジュールの出力を近似するためのテイラー展開の最高次数です。次数を高くすると近似精度が向上しますが、計算量とメモリ使用量が増加します。
  • taylor_factors_dtype (torch.dtype、デフォルトは torch.bfloat16) — テイラー級数の係数を保存・計算するために使用されるデータ型です。精度を下げるとメモリ使用量は減りますが、安定性に影響が出る可能性があります。精度を上げると精度は向上しますが、メモリ使用量が増加します。
  • skip_predict_identifiers (list[str]、任意、デフォルトはNone) — “cache”モードで“skip”として扱うモジュール名の正規表現パターン(re.fullmatchを使用)。このモードでは、初期化ステップまたはリフレッシュステップではモジュールが完全に計算されますが、予測ステップでは記録された形状に一致するゼロテンソルを返すことで、計算を低コストでスキップします。
  • cache_identifiers (list[str]、任意、デフォルトはNone) — Taylor 級数キャッシュモードに配置するモジュール名の正規表現パターン(re.fullmatch を使用)。このモードでは、出力が近似され、再利用のためにキャッシュされます。
  • use_lite_mode (bool、省略可、デフォルトはFalse) — ブロックのスキップやプロジェクションのキャッシュなどの事前定義パターンを適用してメモリ使用量を最小限に抑える、軽量版の TaylorSeer を有効にします。これにより、カスタムのinactive_identifiersやactive_identifiersは上書きされます。

TaylorSeerキャッシュの設定。詳細は: https://huggingface.co/papers/2503.06923

注:

  • パターンは、モジュール名に対してre.fullmatchを使用して照合されます。
  • skip_predict_identifiersまたはcache_identifiersが指定されている場合、一致するモジュールのみがフックされます。
  • どちらも指定されていない場合、デフォルトではすべてのアテンション類似モジュールがフックされます。

非アクティブとアクティブな使用の例:

def forward(x):
    x = self.module1(x)  # inactive module: returns zeros tensor based on shape recorded during full compute
    x = self.module2(x)  # active module: caches output here, avoiding recomputation of prior steps
    return x

bfloat16

( *args**kwargs )

ドット区切りパス(例: torch.float32)のモック値: 属性アクセスチェーン、呼び出しはパススルーデコレータとして動作し、repr はドット区切りパスを返し、ベースクラスとして使用するとプレーンな type ベースに置き換えられます(PEP 560 の __mro_entries__)。これにより、実際のサブクラスは通常のメタクラスを保持し、inspect.signature はモックの __init__ ではなく、実際の __init__ を読み取ります。

diffusers.apply_taylorseer_cache

< >

( module: Moduleconfig: TaylorSeerCacheConfig )

パラメータ

  • module (torch.nn.Module) — フックを適用するモデルのサブツリー。
  • config (TaylorSeerCacheConfig) — キャッシュの設定。

与えられたパイプライン(通常はtransformer / UNet)にTaylorSeerキャッシュを適用します。

この関数は、提供された設定に基づいてキャッシュまたはスキップを有効にするために、モデル内の選択されたモジュールをフックします。これにより、拡散デノイジングループにおける冗長な計算を削減します。

例:

>>> import torch
>>> from diffusers import FluxPipeline, TaylorSeerCacheConfig

>>> pipe = FluxPipeline.from_pretrained(
...     "black-forest-labs/FLUX.1-dev",
...     torch_dtype=torch.bfloat16,
... )
>>> pipe.to("cuda")

>>> config = TaylorSeerCacheConfig(
...     cache_interval=5,
...     max_order=1,
...     disable_cache_before_step=3,
...     taylor_factors_dtype=torch.float32,
... )
>>> pipe.transformer.enable_cache(config)

MagCacheConfig

クラス diffusers.MagCacheConfig

< >

( threshold: float = 0.06max_skip_steps: int = 3retention_ratio: float = 0.2num_inference_steps: int = 28mag_ratios: typing.Union[torch.Tensor, typing.List[float], NoneType] = Nonecalibrate: bool = False )

パラメータ

  • threshold (float, デフォルトは 0.06) — 累積エラーの閾値です。累積エラーがこの閾値を下回る場合、ブロックの計算はスキップされます。閾値を高くすると、より積極的なスキップ(高速化)が可能になりますが、品質が低下する可能性があります。
  • max_skip_steps (int, デフォルトは 3) — スキップ可能な連続ステップの最大数(論文における K)です。
  • retention_ratio (float、デフォルト値は0.2) — 安定性を確保するために、スキップが無効化される初期ステップの割合です。例えば、num_inference_stepsが28でretention_ratioが0.2の場合、最初の6ステップは決してスキップされません。
  • num_inference_steps (int、デフォルトは28) — パイプラインで使用する推論ステップ数です。mag_ratiosを正しく補間するために必要です。
  • mag_ratios (torch.Tensor, 任意) — モデル用の事前計算済みマグニチュード比です。これらはチェックポイントに依存します。指定しない場合は、calibrate=True を設定して、特定のモデル用に計算する必要があります。Flux モデルの場合、diffusers.hooks.mag_cache.FLUX_MAG_RATIOS を使用できます。
  • calibrate (bool, デフォルトは False) — True の場合、キャリブレーションモードを有効にします。このモードでは、ブロックはスキップされません。代わりに、フックが現在のランの magnitude ratios を計算し、終了時にログに記録します。新しいモデルやスケジューラーの mag_ratios を取得するために使用します。

MagCacheの設定。

diffusers.apply_mag_cache

< >

( module: Moduleconfig: MagCacheConfig )

パラメータ

  • module (torch.nn.Module) — MagCacheを適用するモジュールです。
  • config (MagCacheConfig) — MagCacheの設定です。

与えられたモジュール(通常は Transformer)に MagCache を適用します。

SeaCacheConfig

クラス diffusers.SeaCacheConfig

< >

( threshold: float = 0.25residual_order: int = 1retention_steps: int = 1cache_end_steps: int = 1max_consecutive_cached: int = 2power_exp: float = 3.0raw_vision_callback: typing.Callable[[torch.nn.Module, tuple[typing.Any, ...], dict[str, typing.Any]], list[torch.Tensor] | None] = None )

パラメータ

  • threshold (float、デフォルト値は0.25) — 累積相対L1予算です。値が大きいほど、キャッシュがより頻繁に再利用されます。
  • residual_order (int、デフォルトは1) — Transformer の残差を予測するために使用する順序。0は最新の残差をそのまま再利用し、1は直近の2回のフル実行から線形外挿を行います。
  • retention_steps (int、デフォルトは1) — 常に完全に実行される初期スケジューラステップの数です。
  • cache_end_steps (int, デフォルトは 1) — 常に完全に実行される最後のスケジューラステップの数。
  • max_consecutive_cached (int、デフォルトは2) — フル実行を強制するまでの、キャッシュコンテキストごとの最大連続残差再利用回数。0に設定すると、この制限が無効になります。
  • power_exp (float、デフォルト値は3.0) — SEAクリーンシグナルの電力事前分布の指数です。SeaCacheは動画特徴量に対して3.0を使用します。
  • raw_vision_callback (Callable, 省略可) — 生成出力を構成するビジュアル潜在変数を返す、高度なモデルアダプターです。各潜在変数の形状は (C, T, H, W) です。出力軌道内のクリーンな条件付けフレームを含み、出力の一部ではない個別のビジュアルヒントは除外します。省略した場合、利用可能な組み込みアダプターが使用されます。

SeaCacheの設定。

SeaCache はデフォルトで無効化されており、この設定が transformer.enable_cache(config) に渡された後にのみ有効になります。

SeaCache は、スケジューラーステップ間で Spectral-Evolution-Aware (SEA) 指標を比較します。累積相対変化が threshold 未満である場合、繰り返しされる transformer ブロックスタックはキャッシュされた残差に置き換えられます。モデル固有のアダプターにより、残差境界をこれらのブロックを超えて拡張できます。その他の video transformer は、ブロックメタデータを登録し、raw_vision_callback を提供することで、汎用パスを使用できます。そのパイプラインは、各 transformer 軌跡に対して cache_context に入る必要があります。

例:

>>> from diffusers import Cosmos3OmniPipeline, SeaCacheConfig

>>> pipe = Cosmos3OmniPipeline.from_pretrained("nvidia/Cosmos3-Nano")
>>> pipe.transformer.enable_cache(SeaCacheConfig())

diffusers.apply_sea_cache

< >

( module: Moduleconfig: SeaCacheConfig )

パラメータ

  • module (torch.nn.Module) — キャッシュする Transformer モジュール。
  • config (SeaCacheConfig) — SeaCacheの設定です。

SeaCacheを対応するtransformerに適用します。

SeaCache は、transformer の繰り返しブロックスタックに対してキャッシュされた残差を再利用します。モデルアダプターは、インジケーターの抽出と残差の境界をカスタマイズできます。汎用パスでは、登録されたブロックメタデータと raw_vision_callback が使用されます。互換性とキャッシュのパラメータは、各モデルに対して検証する必要があります。

Update on GitHub