Diffusers documentation
Metode peng-cache-an
Metode peng-cache-an
Metode cache mempercepat diffusion transformers dengan menyimpan dan menggunakan kembali output antara dari lapisan tertentu, seperti lapisan attention dan feedforward, alih-alih menghitungnya ulang pada setiap langkah inferensi.
CacheMixin
Kelas untuk mengaktifkan/menonaktifkan teknik caching pada model difusi.
Teknik penyangga yang didukung:
Manajer konteks yang menyediakan informasi untuk manajemen cache.
name adalah nama panggilan denoising, biasanya "cond" atau "uncond". Argumen kata kunci menjelaskan di mana
loop denoising berada — lihat CacheContext untuk bidang yang diterima, misalnya cache_context("cond", step_index=i, sigma=sigma).
enable_cache
< source >( config )
Parameter
- config (
PyramidAttentionBroadcastConfig | FasterCacheConfig | FirstBlockCacheConfig | SeaCacheConfig | TextKVCacheConfig) — Konfigurasi untuk menerapkan teknik caching. Teknik caching yang saat ini didukung adalah:- PyramidAttentionBroadcastConfig
- FasterCacheConfig
- FirstBlockCacheConfig
- SeaCacheConfig
TextKVCacheConfig
Aktifkan teknik caching pada model.
Contoh:
>>> 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
kelas diffusers.PyramidAttentionBroadcastConfig
< source >( 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 = (100, 800)temporal_attention_timestep_skip_range: tuple = (100, 800)cross_attention_timestep_skip_range: tuple = (100, 800)spatial_attention_block_identifiers: tuple = ('blocks', 'transformer_blocks', 'single_transformer_blocks', 'layers', 'visual_transformer_blocks')temporal_attention_block_identifiers: tuple = ('temporal_transformer_blocks',)cross_attention_block_identifiers: tuple = ('blocks', 'transformer_blocks', 'layers')current_timestep_callback: typing.Callable[[], int] = None )
Parameter
- spatial_attention_block_skip_range (
int, opsional, defaultnyaNone) — Jumlah kali broadcast spatial attention tertentu dilewati sebelum menghitung state attention yang akan digunakan kembali. Jika ini diatur ke nilaiN, komputasi attention akan dilewatiN - 1kali (yaitu, state attention lama akan digunakan kembali) sebelum state attention baru dihitung lagi. - temporal_attention_block_skip_range (
int, opsional, defaultNone) — Jumlah kali broadcast temporal attention tertentu dilewati sebelum menghitung state attention untuk digunakan kembali. Jika ini diatur ke nilaiN, komputasi attention akan dilewatiN - 1kali (yaitu, state attention lama akan digunakan kembali) sebelum state attention baru dihitung lagi. - cross_attention_block_skip_range (
int, opsional, defaultnyaNone) — Jumlah kali broadcast cross-attention tertentu dilewati sebelum menghitung state attention yang akan digunakan kembali. Jika ini diatur ke nilaiN, komputasi attention akan dilewatiN - 1kali (yaitu, state attention lama akan digunakan kembali) sebelum state attention baru dihitung lagi. - spatial_attention_timestep_skip_range (
tuple[int, int], defaultnya(100, 800)) — Rentang timestep yang akan dilewati pada lapisan spatial attention. Perhitungan attention akan dilewati secara kondisional jika timestep saat ini berada dalam rentang yang ditentukan. - temporal_attention_timestep_skip_range (
tuple[int, int], defaultnya(100, 800)) — Rentang timestep yang akan dilewati pada lapisan temporal attention. Perhitungan attention akan dilewati secara kondisional jika timestep saat ini berada dalam rentang yang ditentukan. - cross_attention_timestep_skip_range (
tuple[int, int], defaultnya(100, 800)) — Rentang timestep yang akan dilewati pada lapisan cross-attention. Perhitungan attention akan dilewati secara kondisional jika timestep saat ini berada dalam rentang yang ditentukan. - spatial_attention_block_identifiers (
tuple[str, ...]) — Identifikator yang dicocokkan dengan nama layer untuk menentukan apakah layer tersebut merupakan layer spatial attention. - temporal_attention_block_identifiers (
tuple[str, ...]) — Identifikator yang dicocokkan dengan nama layer untuk menentukan apakah layer tersebut merupakan layer temporal attention. - cross_attention_block_identifiers (
tuple[str, ...]) — Identifikator yang dicocokkan dengan nama layer untuk menentukan apakah layer tersebut merupakan layer cross-attention.
Konfigurasi untuk Pyramid Attention Broadcast.
diffusers.apply_pyramid_attention_broadcast
< source >( module: Moduleconfig: PyramidAttentionBroadcastConfig )
Terapkan Pyramid Attention Broadcast pada pipeline tertentu.
PAB adalah metode aproksimasi perhatian yang memanfaatkan kemiripan dalam keadaan perhatian antar langkah waktu untuk mengurangi biaya komputasi dari perhitungan perhatian. Poin utama dari makalah tersebut adalah bahwa kemiripan perhatian pada lapisan cross-attention antar langkah waktu sangat tinggi, diikuti oleh kemiripan yang lebih rendah pada lapisan temporal dan spasial. Hal ini memungkinkan pengabaian perhitungan perhatian pada lapisan cross-attention lebih sering daripada pada lapisan temporal dan spasial. Dengan demikian, penerapan PAB akan mempercepat proses inferensi.
Contoh:
>>> 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
kelas diffusers.FasterCacheConfig
< source >( spatial_attention_block_skip_range: int = 2temporal_attention_block_skip_range: int | None = Nonespatial_attention_timestep_skip_range: tuple = (-1, 681)temporal_attention_timestep_skip_range: tuple = (-1, 681)low_frequency_weight_update_timestep_range: tuple = (99, 901)high_frequency_weight_update_timestep_range: tuple = (-1, 301)alpha_low_frequency: float = 1.1alpha_high_frequency: float = 1.1unconditional_batch_skip_range: int = 5unconditional_batch_timestep_skip_range: tuple = (-1, 641)spatial_attention_block_identifiers: tuple = ('^blocks.*attn', '^transformer_blocks.*attn', '^single_transformer_blocks.*attn')temporal_attention_block_identifiers: tuple = ('^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 = ('hidden_states', 'encoder_hidden_states', 'timestep', 'attention_mask', 'encoder_attention_mask') )
Parameter
- spatial_attention_block_skip_range (
int, default2) — Hitung keadaan perhatian setiapNiterasi. Jika ini diatur keN, komputasi perhatian akan dilewatiN - 1kali (yaitu, keadaan perhatian yang di-cache akan digunakan kembali) sebelum menghitung keadaan perhatian baru lagi. - temporal_attention_block_skip_range (
int, opsional, defaultNone) — Hitung keadaan perhatian setiapNiterasi. Jika ini diatur keN, komputasi perhatian akan dilewatiN - 1kali (yaitu, keadaan perhatian yang di-cache akan digunakan kembali) sebelum menghitung keadaan perhatian baru lagi. - spatial_attention_timestep_skip_range (
tuple[float, float], defaultnya(-1, 681)) — Rentang timestep di mana komputasi spatial attention dapat dilewati tanpa penurunan kualitas yang signifikan. Nilai ini ditentukan oleh pengguna berdasarkan model yang mendasarinya. Nilai pertama dalam tuple adalah batas bawah dan nilai kedua adalah batas atas. Biasanya, timestep difusi untuk denoising berada dalam rentang terbalik dari 0 hingga 1000 (yaitu, denoising dimulai pada timestep 1000 dan berakhir pada timestep 0). Untuk nilai default, ini berarti pengabaian komputasi spatial attention hanya berlaku setelah timestep denoising 681 tercapai, dan berlanjut hingga akhir proses denoising. - temporal_attention_timestep_skip_range (
tuple[float, float], opsional, defaultNone) — Rentang timestep di mana komputasi temporal attention dapat dilewati tanpa penurunan kualitas yang signifikan. Nilai ini ditentukan oleh pengguna berdasarkan model yang mendasarinya. Nilai pertama dalam tuple adalah batas bawah dan nilai kedua adalah batas atas. Biasanya, timestep difusi untuk denoising berada dalam rentang terbalik dari 0 hingga 1000 (yaitu, denoising dimulai pada timestep 1000 dan berakhir pada timestep 0). - low_frequency_weight_update_timestep_range (
tuple[int, int], defaultnya(99, 901)) — Rentang timestep di mana pembaruan penskalaan bobot frekuensi rendah diterapkan. Nilai pertama dalam tuple adalah batas bawah dan nilai kedua adalah batas atas dari rentang timestep. Fungsi callback untuk pembaruan hanya dipanggil di dalam rentang ini. - high_frequency_weight_update_timestep_range (
tuple[int, int], defaultnya(-1, 301)) — Rentang timestep di mana pembaruan penskalaan bobot frekuensi tinggi diterapkan. Nilai pertama dalam tuple adalah batas bawah dan nilai kedua adalah batas atas dari rentang timestep. Fungsi callback untuk pembaruan hanya dipanggil di dalam rentang ini. - alpha_low_frequency (
float, defaultnya1.1) — Bobot untuk menskalakan pembaruan frekuensi rendah. Ini digunakan untuk mengaproksimasi cabang tak bersyarat dari output cabang bersyarat. - alpha_high_frequency (
float, defaultnya1.1) — Bobot untuk menskalakan pembaruan frekuensi tinggi. Ini digunakan untuk mengaproksimasi cabang tak bersyarat dari keluaran cabang bersyarat. - unconditional_batch_skip_range (
int, defaultnya5) — Proses cabang unconditional setiapNiterasi. Jika ini diatur keN, komputasi cabang unconditional akan dilewatiN - 1kali (yaitu, keadaan cabang unconditional yang di-cache akan digunakan kembali) sebelum menghitung keadaan cabang unconditional yang baru lagi. - unconditional_batch_timestep_skip_range (
tuple[float, float], defaultnya(-1, 641)) — Rentang timestep di mana komputasi cabang unconditional dapat dilewati tanpa penurunan kualitas yang signifikan. Hal ini harus ditentukan oleh pengguna berdasarkan model yang mendasarinya. Nilai pertama dalam tuple adalah batas bawah dan nilai kedua adalah batas atas. - spatial_attention_block_identifiers (
tuple[str, ...], defaultnya("blocks.*attn1", "transformer_blocks.*attn1", "single_transformer_blocks.*attn1")) — Identifikator untuk mencocokkan blok atensi spasial dalam model. Jika nama blok mengandung salah satu identifikator ini, FasterCache akan diterapkan pada blok tersebut. Ini bisa berupa nama lapisan penuh, nama lapisan parsial, atau pola regex. Pencocokan selalu dilakukan menggunakan pencocokan regex. - temporal_attention_block_identifiers (
tuple[str, ...], defaultnya("temporal_transformer_blocks.*attn1",)) — Identifikator untuk mencocokkan blok temporal attention dalam model. Jika nama blok mengandung salah satu identifikator ini, FasterCache akan diterapkan pada blok tersebut. Ini bisa berupa nama layer penuh, nama layer parsial, atau pola regex. Pencocokan selalu dilakukan menggunakan regex match. - attention_weight_callback (
Callable[[torch.nn.Module], float], defaultnyaNone) — Fungsi callback untuk menentukan bobot yang akan digunakan untuk menskalakan output attention. Fungsi ini harus menerima modul attention sebagai input dan mengembalikan nilai float. Ini digunakan untuk mengaproksimasi cabang unconditional dari output cabang conditional. Jika tidak disediakan, bobot default adalah 0,5 untuk semua timestep. Biasanya, seperti yang dijelaskan dalam makalah, bobot ini harus meningkat secara bertahap dari 0 ke 1 seiring berjalannya inferensi. Pengguna didorong untuk bereksperimen dan menyediakan jadwal bobot kustom yang mempertimbangkan jumlah langkah inferensi dan perilaku model dasar seiring berjalannya proses denoising. - low_frequency_weight_callback (
Callable[[torch.nn.Module], float], defaultnyaNone) — Fungsi callback untuk menentukan bobot yang akan digunakan untuk menskalakan pembaruan frekuensi rendah. Jika tidak disediakan, bobot defaultnya adalah 1.1 untuk timestep dalam rentang yang ditentukan (seperti yang dijelaskan dalam makalah). - high_frequency_weight_callback (
Callable[[torch.nn.Module], float], defaultnyaNone) — Fungsi callback untuk menentukan bobot yang akan digunakan untuk menskalakan pembaruan frekuensi tinggi. Jika tidak disediakan, bobot defaultnya adalah 1.1 untuk timestep dalam rentang yang ditentukan (seperti yang dijelaskan dalam makalah). - tensor_format (
str, defaultnya"BCFHW") — Format dari tensor input. Ini harus salah satu dari"BCFHW","BFCHW", atau"BCHW". Format ini digunakan untuk memisahkan frame laten individual agar komponen frekuensi rendah dan tinggi dapat dihitung. - is_guidance_distilled (
bool, defaultnyaFalse) — Apakah model tersebut guidance distilled atau tidak. Jika model tersebut guidance distilled, FasterCache tidak akan diterapkan pada level denoiser untuk melewati komputasi cabang unconditional (karena tidak ada cabang tersebut). - _unconditional_conditional_input_kwargs_identifiers (
list[str], defaultnya("hidden_states", "encoder_hidden_states", "timestep", "attention_mask", "encoder_attention_mask")) — Identifikator untuk mencocokkan input kwargs yang berisi input unconditional dan conditional yang dikonekasi secara batchwise. Jika nama input kwargs mengandung salah satu identifikator ini, FasterCache akan memisahkan input menjadi cabang unconditional dan conditional. Ini harus berupa daftar nama input kwargs yang persis berisi input unconditional dan conditional yang dikonekasi secara batchwise.
Konfigurasi untuk FasterCache.
diffusers.apply_faster_cache
< source >( module: Moduleconfig: FasterCacheConfig )
Parameter
- module (
torch.nn.Module) — Modul pytorch yang akan diterapkan FasterCache. Biasanya, ini harus berupa arsitektur transformer yang didukung di Diffusers, sepertiCogVideoXTransformer3DModel, tetapi implementasi eksternal juga mungkin dapat berfungsi. - config (
FasterCacheConfig) — Konfigurasi yang digunakan untuk FasterCache.
Menerapkan FasterCache ke pipeline tertentu.
Contoh:
>>> 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
kelas diffusers.FirstBlockCacheConfig
< source >( threshold: float = 0.05 )
Parameter
- threshold (
float, defaultnya0.05) — Ambang batas untuk menentukan apakah forward pass melalui semua lapisan model diperlukan atau tidak. Ambang batas yang lebih tinggi biasanya menghasilkan forward pass melalui jumlah lapisan yang lebih sedikit dan inferensi yang lebih cepat, namun dapat menyebabkan kualitas generasi yang lebih buruk. Ambang batas yang lebih rendah mungkin tidak menghasilkan percepatan generasi yang signifikan. Ambang batas ini dibandingkan dengan selisih absmean dari residual antara output saat ini dan output yang di-cache dari blok transformer pertama. Jika selisihnya di bawah ambang batas, forward pass dilewati.
Konfigurasi untuk First Block Cache.
diffusers.apply_first_block_cache
< source >( module: Moduleconfig: FirstBlockCacheConfig )
Parameter
- module (
torch.nn.Module) — Modul pytorch yang akan diterapkan FBCache. Biasanya, ini harus berupa arsitektur transformer yang didukung di Diffusers, sepertiCogVideoXTransformer3DModel, tetapi implementasi eksternal juga mungkin dapat berfungsi. - config (
FirstBlockCacheConfig) — Konfigurasi yang digunakan untuk menerapkan metode FBCache.
Menerapkan First Block Cache ke modul tertentu.
First Block Cache dibangun berdasarkan ide dari TeaCache. Implementasinya secara generik jauh lebih sederhana untuk berbagai model dan telah diintegrasikan terlebih dahulu untuk tujuan eksperimental.
Contoh:
>>> 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
kelas diffusers.TaylorSeerCacheConfig
< source >( 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 )
Parameter
- cache_interval (
int, defaultnya5) — Interval antara langkah komputasi penuh. Setelah komputasi penuh, output yang di-cache (diperkirakan) digunakan kembali untuk sejumlah langkah denoising berikutnya sebanyak ini sebelum diperbarui dengan forward pass penuh yang baru. - disable_cache_before_step (
int, defaultnya3) — Indeks langkah denoising sebelum mana caching dinonaktifkan, yang berarti komputasi penuh dilakukan untuk langkah-langkah awal (0 sampai disable_cache_before_step - 1) untuk mengumpulkan data untuk aproksimasi deret Taylor. Selama langkah-langkah ini, faktor Taylor diperbarui, tetapi caching/prediksi tidak diterapkan. Caching dimulai pada langkah ini. - disable_cache_after_step (
int, opsional, defaultNone) — Indeks langkah denoising setelah mana caching dinonaktifkan. Jika diatur, untuk langkah >= nilai ini, semua modul menjalankan komputasi penuh tanpa prediksi atau pembaruan state, memastikan akurasi pada tahap akhir jika diperlukan. - max_order (
int, defaultnya1) — Urutan tertinggi dalam ekspansi deret Taylor untuk mengaproksimasi output modul. Urutan yang lebih tinggi memberikan aproksimasi yang lebih baik tetapi meningkatkan penggunaan komputasi dan memori. - taylor_factors_dtype (
torch.dtype, defaultnyatorch.bfloat16) — Tipe data yang digunakan untuk menyimpan dan menghitung faktor deret Taylor. Presisi yang lebih rendah mengurangi memori tetapi dapat memengaruhi stabilitas; presisi yang lebih tinggi meningkatkan akurasi dengan biaya memori yang lebih besar. - skip_predict_identifiers (
list[str], opsional, defaultNone) — Pola Regex (menggunakanre.fullmatch) untuk nama modul yang akan ditempatkan sebagai “skip” dalam mode “cache”. Dalam mode ini, modul dihitung sepenuhnya selama langkah awal atau refresh, tetapi mengembalikan tensor nol (sesuai bentuk yang direkam) selama langkah prediksi untuk melewati komputasi secara hemat. - cache_identifiers (
list[str], opsional, defaultNone) — Pola regex (menggunakanre.fullmatch) untuk nama modul yang akan ditempatkan dalam mode penyangga deret Taylor, di mana output didekati dan disimpan dalam cache untuk digunakan kembali. - use_lite_mode (
bool, opsional, defaultFalse) — Mengaktifkan varian TaylorSeer ringan yang meminimalkan penggunaan memori dengan menerapkan pola yang telah ditentukan untuk melompati dan meng-cache (misalnya, melompati blok dan meng-cache proyeksi). Ini menimpainactive_identifiersatauactive_identifierskustom apa pun.
Konfigurasi untuk cache TaylorSeer. Lihat: https://huggingface.co/papers/2503.06923
Catatan:
- Pola dicocokkan menggunakan
re.fullmatchpada nama modul. - Jika
skip_predict_identifiersataucache_identifiersdiberikan, hanya modul yang cocok yang akan di-hook. - Jika keduanya tidak disediakan, semua modul yang mirip perhatian (attention-like) akan di-hook secara default.
Contoh penggunaan tidak aktif dan aktif:
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 xNilai mock untuk jalur bertitik (mis. torch.float32): rantai akses atribut,
pemanggilan berperilaku sebagai dekorator pass-through, repr adalah jalur bertitik, dan
penggunaannya sebagai kelas dasar menggantikan kelas dasar type polos (PEP 560 __mro_entries__), sehingga
subkelas asli tetap mempertahankan metakelas normal dan inspect.signature membaca __init__ asli mereka, bukan milik mock.
diffusers.apply_taylorseer_cache
< source >( module: Moduleconfig: TaylorSeerCacheConfig )
Menerapkan cache TaylorSeer ke pipeline tertentu (biasanya transformer / UNet).
Fungsi ini mengaitkan modul-modul tertentu dalam model untuk memungkinkan peng-cache-an atau pengabaian berdasarkan konfigurasi yang diberikan, sehingga mengurangi komputasi yang redundan dalam loop denoising difusi.
Contoh:
>>> 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
kelas diffusers.MagCacheConfig
< source >( 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 )
Parameter
- threshold (
float, defaultnya0.06) — Ambang batas untuk error yang terakumulasi. Jika error yang terakumulasi berada di bawah ambang batas ini, komputasi blok akan dilewati. Ambang batas yang lebih tinggi memungkinkan pengabaian yang lebih agresif (lebih cepat) tetapi dapat menurunkan kualitas. - max_skip_steps (
int, defaultnya3) — Jumlah maksimum langkah berurutan yang dapat dilewati (K dalam makalah). - retention_ratio (
float, defaultnya0.2) — Fraksi dari langkah-langkah awal di mana pengabaian dinonaktifkan untuk memastikan stabilitas. Misalnya, jikanum_inference_stepsadalah 28 danretention_ratioadalah 0.2, maka 6 langkah pertama tidak akan pernah diabaikan. - num_inference_steps (
int, defaultnya28) — Jumlah langkah inferensi yang digunakan dalam pipeline. Ini diperlukan untuk menginterpolasimag_ratiosdengan benar. - mag_ratios (
torch.Tensor, opsional) — Rasio magnitudo yang telah dihitung sebelumnya untuk model. Nilai ini bergantung pada checkpoint. Jika tidak disediakan, Anda harus mengaturcalibrate=Trueuntuk menghitungnya untuk model spesifik Anda. Untuk model Flux, Anda dapat menggunakandiffusers.hooks.mag_cache.FLUX_MAG_RATIOS. - calibrate (
bool, defaultnyaFalse) — Jika True, mengaktifkan mode kalibrasi. Dalam mode ini, tidak ada blok yang dilewati. Sebaliknya, hook menghitung rasio magnitudo untuk run saat ini dan mencatatnya di akhir. Gunakan ini untuk memperolehmag_ratiosuntuk model atau scheduler baru.
Konfigurasi untuk MagCache.
diffusers.apply_mag_cache
< source >( module: Moduleconfig: MagCacheConfig )
Menerapkan MagCache ke modul tertentu (biasanya Transformer).
SeaCacheConfig
kelas diffusers.SeaCacheConfig
< source >( 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 )
Parameter
- threshold (
float, defaultnya0.25) — Anggaran relative-L1 yang terakumulasi. Nilai yang lebih besar membuat cache lebih sering digunakan kembali. - residual_order (
int, defaultnya1) — Urutan yang digunakan untuk memprediksi residual transformer.0langsung menggunakan ulang residual terbaru dan1melakukan ekstrapolasi linear dari dua eksekusi penuh terbaru. - retention_steps (
int, defaultnya1) — Jumlah langkah awal scheduler yang selalu dieksekusi secara penuh. - cache_end_steps (
int, defaultnya1) — Jumlah langkah scheduler akhir yang selalu dieksekusi secara penuh. - max_consecutive_cached (
int, defaultnya2) — Jumlah maksimum penggunaan ulang residual berurutan per konteks cache sebelum memaksa eksekusi penuh.0menonaktifkan batas tersebut. - power_exp (
float, defaultnya3.0) — Eksponen dari prior kekuatan sinyal bersih SEA. SeaCache menggunakan3.0untuk fitur video. - raw_vision_callback (
Callable, opsional) — Adapter model lanjutan yang mengembalikan latens visual yang membentuk output yang dihasilkan, masing-masing dengan bentuk(C, T, H, W). Sertakan frame kondisioning bersih di dalam lintasan output, tetapi hilangkan petunjuk visual terpisah yang bukan bagian dari output. Jika diabaikan, adapter bawaan akan digunakan jika tersedia.
Konfigurasi untuk SeaCache.
SeaCache dinonaktifkan secara default dan hanya diaktifkan setelah konfigurasi ini diteruskan ke transformer.enable_cache(config).
SeaCache membandingkan indikator Spectral-Evolution-Aware (SEA) antar langkah scheduler. Jika perubahan relatif terakumulasi mereka tetap di bawah threshold, tumpukan blok transformer yang diulang diganti dengan residual yang di-cache. Adapter spesifik model dapat memperluas batas residual melampaui blok-blok tersebut. Transformer video lainnya dapat menggunakan jalur generik dengan mendaftarkan metadata blok mereka dan menyediakan raw_vision_callback; pipeline mereka harus memasuki cache_context untuk setiap trajektori transformer.
diffusers.apply_sea_cache
< source >( module: Moduleconfig: SeaCacheConfig )
Terapkan SeaCache pada transformer yang didukung.
SeaCache menggunakan ulang residual yang di-cache untuk tumpukan blok berulang dari transformer. Adapter model dapat menyesuaikan ekstraksi indikator dan batas residual; jalur generik menggunakan metadata blok yang terdaftar dan raw_vision_callback. Parameter kompatibilitas dan cache harus divalidasi untuk setiap model.