Diffusers documentation
Önbellekleme yöntemleri
Önbellekleme yöntemleri
Cache yöntemleri, dikkat ve ileri besleme katmanları gibi belirli katmanların ara çıktıları her çıkarım adımında yeniden hesaplanmak yerine saklanıp yeniden kullanılarak difüzyon dönüştürücülerini hızlandırır.
CacheMixin
Difüzyon modellerinde önbellekleme tekniklerini etkinleştirme/devre dışı bırakma için bir sınıf.
Desteklenen önbellekleme teknikleri:
Önbellek yönetimi için bilgi sağlayan bağlam yöneticisi.
name, gürültü azaltma çağrısının adıdır ve genellikle "cond" veya "uncond" şeklindedir. Anahtar kelime argümanları, gürültü azaltma döngüsünün nerede olduğunu açıklar — kabul edilen alanlar için CacheContext sınıfına bakın, örneğin cache_context("cond", step_index=i, sigma=sigma).
enable_cache
< source >( config )
Parametreler
- config (
PyramidAttentionBroadcastConfig | FasterCacheConfig | FirstBlockCacheConfig | SeaCacheConfig | TextKVCacheConfig) — Önbellekleme tekniğinin uygulanması için yapılandırma. Şu anda desteklenen önbellekleme teknikleri şunlardır:- PyramidAttentionBroadcastConfig
- FasterCacheConfig
- FirstBlockCacheConfig
- SeaCacheConfig
TextKVCacheConfig
Modelde önbellekleme tekniklerini etkinleştirin.
Örnek:
>>> 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
sınıf 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 )
Parametreler
- spatial_attention_block_skip_range (
int, isteğe bağlı, varsayılanNone) — Yeniden kullanılacak dikkat durumlarını hesaplamadan önce belirli bir uzamsal dikkat yayılımının kaç kez atlandığı. Bu değerNolarak ayarlanırsa, yeni dikkat durumları yeniden hesaplanmadan önce dikkat hesabıN - 1kez atlanır (yani eski dikkat durumları yeniden kullanılır). - temporal_attention_block_skip_range (
int, isteğe bağlı, varsayılanNone) — Yeniden kullanılacak dikkat durumlarını hesaplamadan önce belirli bir zamansal dikkat yayılımının kaç kez atlandığı. Bu değerNolarak ayarlanırsa, yeni dikkat durumları yeniden hesaplanmadan önce dikkat hesabıN - 1kez atlanır (yani eski dikkat durumları yeniden kullanılır). - cross_attention_block_skip_range (
int, isteğe bağlı, varsayılanNone) — Dikkat durumlarının yeniden kullanılabilmesi için hesaplanmadan önce belirli bir çapraz dikkat yayınının kaç kez atlanacağı. Bu değerNolarak ayarlanırsa, yeni dikkat durumları yeniden hesaplanmadan önce dikkat hesabıN - 1kez atlanır (yani eski dikkat durumları yeniden kullanılır). - spatial_attention_timestep_skip_range (
tuple[int, int], varsayılan(100, 800)) — Uzamsal dikkat katmanında atlanacak zaman adımları aralığı. Mevcut zaman adımı belirtilen aralık içindeyse dikkat hesaplamaları koşullu olarak atlanır. - temporal_attention_timestep_skip_range (
tuple[int, int], varsayılan(100, 800)) — Zamansal dikkat katmanında atlanacak zaman adımlarının aralığı. Mevcut zaman adımı belirtilen aralık içindeyse dikkat hesaplamaları koşullu olarak atlanır. - cross_attention_timestep_skip_range (
tuple[int, int], varsayılan(100, 800)) — Cross-attention katmanında atlanacak timestep aralığı. Mevcut timestep belirtilen aralık içindeyse, dikkat hesaplamaları koşullu olarak atlanır. - spatial_attention_block_identifiers (
tuple[str, ...]) — Katmanın bir uzamsal dikkat katmanı olup olmadığını belirlemek için katman adlarıyla eşleştirilecek tanımlayıcılar. - temporal_attention_block_identifiers (
tuple[str, ...]) — Katmanın bir temporal dikkat katmanı olup olmadığını belirlemek için katman adlarıyla eşleştirilecek tanımlayıcılar. - cross_attention_block_identifiers (
tuple[str, ...]) — Katman adlarıyla eşleştirilecek ve katmanın çapraz dikkat katmanı olup olmadığını belirlemek için kullanılacak tanımlayıcılar.
Pyramid Attention Broadcast yapılandırması.
diffusers.apply_pyramid_attention_broadcast
< source >( module: Moduleconfig: PyramidAttentionBroadcastConfig )
Belirli bir pipeline'a Pyramid Attention Broadcast uygulayın.
PAB, timestep'ler arasındaki dikkat durumlarındaki benzerlikten yararlanarak dikkat hesaplama maliyetini azaltan bir dikkat yaklaşım yöntemidir. Makalenin temel çıkarımı, timestep'ler arasındaki cross-attention katmanlarında dikkat benzerliğinin yüksek olduğu, ardından temporal ve spatial katmanlarda benzerliğin daha düşük olduğu yönündedir. Bu durum, cross-attention katmanlarında dikkat hesaplamasının temporal ve spatial katmanlara kıyasla daha sık atlanmasına olanak tanır. Dolayısıyla PAB uygulandığında inference süreci hızlanır.
Örnek:
>>> 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
sınıf 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') )
Parametreler
- spatial_attention_block_skip_range (
int, varsayılan2) — Dikkat durumlarını herNyinelemede hesaplayın. Bu değerNolarak ayarlanırsa, yeni dikkat durumları tekrar hesaplanmadan önce dikkat hesabıN - 1kez atlanır (yani önbelleğe alınmış dikkat durumları yeniden kullanılır). - temporal_attention_block_skip_range (
int, isteğe bağlı, varsayılanNone) — Dikkat durumlarını herNyinelemede hesaplayın. Bu değerNolarak ayarlanırsa, yeni dikkat durumları tekrar hesaplanmadan önce dikkat hesabıN - 1kez atlanır (yani önbelleğe alınmış dikkat durumları yeniden kullanılır). - spatial_attention_timestep_skip_range (
tuple[float, float], varsayılan(-1, 681)) — Kalitede önemli bir kayba yol açmadan uzamsal dikkat (spatial attention) hesabının atlanabileceği zaman adımı (timestep) aralığı. Bu değer, altta yatan modele göre kullanıcı tarafından belirlenmelidir. Demetin (tuple) ilk değeri alt sınırı, ikinci değeri ise üst sınırı temsil eder. Genellikle, gürültüden arındırma (denoising) için difüzyon zaman adımları 0'dan 1000'e kadar ters bir aralıkta yer alır (yani gürültüden arındırma 1000. zaman adımında başlar ve 0. zaman adımında biter). Varsayılan değerler için bu, uzamsal dikkat hesabının atlanmasının yalnızca 681. gürültüden arındırma zaman adımına ulaşıldıktan sonra geçerli olacağı ve gürültüden arındırma sürecinin sonuna kadar devam edeceği anlamına gelir. - temporal_attention_timestep_skip_range (
tuple[float, float], isteğe bağlı, varsayılanNone) — Zamanlama dikkati (temporal attention) hesabının, kalitede önemli bir kayba yol açmadan atlanabileceği zaman adımı aralığı. Bu değer, altta yatan modele göre kullanıcı tarafından belirlenmelidir. Demetin ilk değeri alt sınırı, ikinci değeri ise üst sınırı temsil eder. Genellikle, gürültüden arındırma (denoising) için difüzyon zaman adımları 0'dan 1000'e ters aralıktadır (yani gürültüden arındırma 1000. zaman adımında başlar ve 0. zaman adımında biter). - low_frequency_weight_update_timestep_range (
tuple[int, int], varsayılan(99, 901)) — Düşük frekanslı ağırlık ölçekleme güncellemesinin uygulandığı timestep aralığı. Tuple'daki ilk değer, timestep aralığının alt sınırı; ikinci değer ise üst sınırıdır. Güncelleme için geri çağrı fonksiyonu yalnızca bu aralık içinde çağrılır. - high_frequency_weight_update_timestep_range (
tuple[int, int], varsayılan(-1, 301)) — Yüksek frekanslı ağırlık ölçekleme güncellemesinin uygulandığı timestep aralığı. Tuple'ın ilk değeri timestep aralığının alt sınırı, ikinci değeri ise üst sınırıdır. Güncelleme için geri çağrı fonksiyonu yalnızca bu aralık içinde çağrılır. - alpha_low_frequency (
float, varsayılan1.1) — Düşük frekanslı güncellemelerin ölçeklenmesi için kullanılan ağırlık. Bu, koşullu dalga çıktılarından koşulsuz dala yaklaşım yapmak için kullanılır. - alpha_high_frequency (
float, varsayılan1.1) — Yüksek frekanslı güncellemelerin ölçeklenmesi için kullanılan ağırlık. Bu, koşullu dalga çıktılarından koşulsuz dala yaklaşım yapmak için kullanılır. - unconditional_batch_skip_range (
int, varsayılan5) — Koşulsuz dalı herNyinelemede işleyin. Bu değerNolarak ayarlanırsa, yeni koşulsuz dal durumları yeniden hesaplanmadan önce koşulsuz dal hesaplamasıN - 1kez atlanır (yani önbelleğe alınmış koşulsuz dal durumları yeniden kullanılır). - unconditional_batch_timestep_skip_range (
tuple[float, float], varsayılan(-1, 641)) — Kalitede önemli bir kayba yol açmadan koşulsuz dal hesabının atlanabileceği timestep aralığı. Bu değer, altta yatan modele göre kullanıcı tarafından belirlenmelidir. Tuple'daki ilk değer alt sınırı, ikinci değer ise üst sınırı ifade eder. - spatial_attention_block_identifiers (
tuple[str, ...], varsayılan("blocks.*attn1", "transformer_blocks.*attn1", "single_transformer_blocks.*attn1")) — Modeldeki uzamsal dikkat bloklarını eşleştirmek için kullanılan tanımlayıcılar. Bir bloğun adı bu tanımlayıcılardan herhangi birini içeriyorsa, FasterCache o bloğa uygulanır. Bunlar tam katman adları, kısmi katman adları veya regex desenleri olabilir. Eşleştirme her zaman regex eşleşmesi kullanılarak yapılır. - temporal_attention_block_identifiers (
tuple[str, ...], varsayılan("temporal_transformer_blocks.*attn1",)) — Modeldeki zaman dikkat bloklarını eşleştirmek için kullanılacak tanımlayıcılar. Bir bloğun adı bu tanımlayıcılardan herhangi birini içeriyorsa, o bloğa FasterCache uygulanır. Bunlar tam katman adları, kısmi katman adları veya regex desenleri olabilir. Eşleştirme her zaman regex eşleşmesi kullanılarak yapılır. - attention_weight_callback (
Callable[[torch.nn.Module], float], varsayılanNone) — Dikkat çıktılarının ölçeklenmesinde kullanılacak ağırlığı belirlemek için geri çağrı fonksiyonu. Bu fonksiyon, girdi olarak dikkat modülünü almalı ve bir float değeri döndürmelidir. Bu, koşullu dalga çıktılarından koşulsuz dalı yaklaşık olarak elde etmek için kullanılır. Sağlanmazsa, tüm zaman adımları için varsayılan ağırlık 0.5'tir. Genellikle, makalede belirtildiği gibi, bu ağırlık çıkarım ilerledikçe 0'dan 1'e doğru kademeli olarak artmalıdır. Kullanıcıların, çıkarım adım sayısı ve gürültü giderme ilerledikçe alttaki model davranışını dikkate alan özel ağırlık zamanlamaları denemeleri ve sağlamaları önerilir. - low_frequency_weight_callback (
Callable[[torch.nn.Module], float], varsayılanNone) — Düşük frekanslı güncellemelerin ölçeklenmesinde kullanılacak ağırlığı belirlemek için geri çağrı fonksiyonu. Sağlanmazsa, makalede belirtildiği gibi, aralık içindeki zaman adımları için varsayılan ağırlık 1.1'dir. - high_frequency_weight_callback (
Callable[[torch.nn.Module], float], varsayılanNone) — Yüksek frekanslı güncellemelerin ölçeklenmesinde kullanılacak ağırlığı belirlemek için geri çağrı fonksiyonu. Sağlanmazsa, varsayılan ağırlık, makalede belirtildiği gibi, aralık içindeki zaman adımları için 1.1'dir. - tensor_format (
str, varsayılan"BCFHW") — Giriş tensörlerinin biçimi. Bu,"BCFHW","BFCHW"veya"BCHW"biçimlerinden biri olmalıdır. Biçim, düşük ve yüksek frekanslı bileşenlerin hesaplanabilmesi için bireysel gizli karelerin ayrıştırılmasında kullanılır. - is_guidance_distilled (
bool, varsayılanFalse) — Modelin guidance distilled olup olmadığı. Model guidance distilled ise, FasterCache, koşulsuz dalın hesaplamasını atlamak için denoiser seviyesinde uygulanmaz (böyle bir dal olmadığı için). - _unconditional_conditional_input_kwargs_identifiers (
list[str], varsayılan("hidden_states", "encoder_hidden_states", "timestep", "attention_mask", "encoder_attention_mask")) — Toplu olarak birleştirilmiş koşulsuz ve koşullu girdileri içeren girdi kwargs'larını eşleştirmek için kullanılan tanımlayıcılar. Girdi kwargs'larının adı bu tanımlayıcılardan herhangi birini içeriyorsa, FasterCache girdileri koşulsuz ve koşullu dallara ayırır. Bu, topu olarak birleştirilmiş koşulsuz ve koşullu girdileri içeren girdi kwargs'larının tam adlarının bir listesi olmalıdır.
FasterCache yapılandırması.
Belirtilen bir pipeline'a FasterCache uygular.
Örnek:
>>> 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
sınıf diffusers.FirstBlockCacheConfig
< source >( threshold: float = 0.05 )
Parametreler
- threshold (
float, varsayılan0.05) — Modelin tüm katmanlarından bir ileri geçişin (forward pass) gerekip gerekmediğini belirlemek için kullanılan eşik. Daha yüksek bir eşik genellikle daha az katmandan ileri geçiş ve daha hızlı çıkarım (inference) sonucunu verir, ancak üretim kalitesinin düşmesine yol açabilir. Daha düşük bir eşik, önemli bir üretim hızlanmasına neden olmayabilir. Eşik, ilk transformer bloğundan gelen mevcut ve önbelleğe alınmış çıktıların artıkları (residuals) arasındaki absmean farkıyla karşılaştırılır. Fark eşik değerinin altındaysa, ileri geçiş atlanır.
First Block Cache yapılandırması.
diffusers.apply_first_block_cache
< source >( module: Moduleconfig: FirstBlockCacheConfig )
Parametreler
- module (
torch.nn.Module) — FBCache uygulanacak pytorch modülü. Genellikle bu,CogVideoXTransformer3DModelgibi Diffusers tarafından desteklenen bir transformer mimarisi olmalıdır, ancak harici uygulamalar da işe yarayabilir. - config (
FirstBlockCacheConfig) — FBCache yönteminin uygulanması için kullanılacak yapılandırma.
Belirtilen bir modüle First Block Cache uygular.
First Block Cache, TeaCache fikirleri üzerine inşa edilmiştir. Geniş bir model yelpazesinde genel olarak uygulanması çok daha basittir ve deneysel amaçlarla ilk olarak entegre edilmiştir.
Örnek:
>>> 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
sınıf 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 )
Parametreler
- cache_interval (
int, varsayılan5) — Tam hesaplama adımları arasındaki aralık. Tam bir hesaplama sonrasında, önbelleğe alınan (tahmin edilen) çıktılar, yeni bir tam ileri geçişle yenilenmeden önce bu kadar sonraki gürültü azaltma adımında yeniden kullanılır. - disable_cache_before_step (
int, varsayılan3) — Önbelleklemenin devre dışı bırakıldığı gürültü giderme adım indeksi; bu, başlangıç adımları (0'dan disable_cache_before_step - 1'e kadar) için tam hesaplamanın yapılması ve Taylor serisi yaklaşımları için veri toplanması anlamına gelir. Bu adımlar sırasında Taylor katsayıları güncellenir, ancak önbellekleme/tahminler uygulanmaz. Önbellekleme bu adımda başlar. - disable_cache_after_step (
int, isteğe bağlı, varsayılanNone) — Önbelleklemenin devre dışı bırakılacağı gürültü giderme adım indeksi. Ayarlanırsa, bu değere eşit veya büyük olan adımlarda tüm modüller tahmin veya durum güncellemeleri olmadan tam hesaplamaları çalıştırır; böylece gerekirse sonraki aşamalarda doğruluk sağlanır. - max_order (
int, varsayılan1) — Modül çıktılarını yaklaşık olarak hesaplamak için Taylor serisi açılımında kullanılan en yüksek derece. Daha yüksek dereceler daha iyi yaklaşık değerler sağlar ancak hesaplama ve bellek kullanımını artırır. - taylor_factors_dtype (
torch.dtype, varsayılantorch.bfloat16) — Taylor serisi katsayılarını depolamak ve hesaplamak için kullanılan veri türü. Daha düşük hassasiyet belleği azaltır ancak kararlılığı etkileyebilir; daha yüksek hassasiyet, daha fazla bellek maliyeti karşılığında doğruluğu artırır. - skip_predict_identifiers (
list[str], isteğe bağlı, varsayılanNone) — “cache” modunda “skip” olarak yerleştirilecek modül adları için regex desenleri (re.fullmatchkullanılarak). Bu modda, modül başlangıç veya yenileme adımlarında tamamen hesaplanır ancak tahmin adımlarında hesaplamayı ucuz bir şekilde atlamak için kayıtlı şekille eşleşen sıfır tensörü döndürür. - cache_identifiers (
list[str], isteğe bağlı, varsayılanNone) — Taylor serisi önbellekleme moduna yerleştirilecek modül adları için regex desenleri (re.fullmatchkullanılarak), burada çıktılar yaklaşık olarak hesaplanır ve yeniden kullanım için önbelleğe alınır. - use_lite_mode (
bool, isteğe bağlı, varsayılanFalse) — Atlanma ve önbelleğe alma için önceden tanımlı desenleri uygulayarak bellek kullanımını en aza indiren hafif bir TaylorSeer varyantını etkinleştirir (ör. blokları atlama ve projeksiyonları önbelleğe alma). Bu, özelinactive_identifiersveyaactive_identifiersdeğerlerini geçersiz kılar.
TaylorSeer önbelleği yapılandırması. Bakınız: https://huggingface.co/papers/2503.06923
Notlar:
- Desenler, modül adında
re.fullmatchkullanılarak eşleştirilir. skip_predict_identifiersveyacache_identifierssağlanırsa, yalnızca eşleşen modüller kancalanır.- Her ikisi de sağlanmazsa, varsayılan olarak tüm dikkat benzeri modüller kancalanır.
Pasif ve aktif kullanım örneği:
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 xNoktalı bir yol için sahte bir değer (ör. torch.float32): öznitelik erişim zincirleri, çağrılar geçiş (pass-through) dekoratörleri gibi davranır, repr noktalı yoldur ve bir taban sınıf olarak kullanıldığında düz bir type tabanı yerine geçer (PEP 560 __mro_entries__), böylece gerçek alt sınıflar normal bir meta sınıfı korur ve inspect.signature sahtenin yerine gerçek __init__ değerlerini okur.
diffusers.apply_taylorseer_cache
< source >( module: Moduleconfig: TaylorSeerCacheConfig )
TaylorSeer önbelleğini verilen bir iş akışına (genellikle transformer / UNet) uygular.
Bu fonksiyon, modeldeki seçili modülleri, sağlanan yapılandırmaya dayalı olarak önbelleğe alma veya atlama işlevini etkinleştirmek için kancalar; bu sayede difüzyon gürültü giderme döngülerindeki gereksiz hesaplamaları azaltır.
Örnek:
>>> 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
sınıf 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 )
Parametreler
- threshold (
float, varsayılan0.06) — Birikmiş hata için eşik değeri. Birikmiş hata bu eşiğin altındaysa, blok hesaplaması atlanır. Daha yüksek bir eşik, daha agresif atlama (daha hızlı) imkânı tanır ancak kaliteyi düşürebilir. - max_skip_steps (
int, varsayılan3) — Atlanabilecek maksimum ardışık adım sayısı (makaledeki K). - retention_ratio (
float, varsayılan0.2) — Kararlılığı sağlamak için atlamanın devre dışı bırakıldığı ilk adımların oranı. Örneğin,num_inference_steps28 veretention_ratio0.2 ise, ilk 6 adım asla atlanmaz. - num_inference_steps (
int, varsayılan28) — Pipeline'da kullanılan çıkarım adım sayısı. Bu,mag_ratios'un doğru şekilde içsel değerlendirmesi (interpolasyonu) için gereklidir. - mag_ratios (
torch.Tensor, isteğe bağlı) — Model için önceden hesaplanmış büyüklük oranları. Bunlar checkpoint'e bağlıdır. Sağlanmazsa, bunları belirli modeliniz için hesaplamak üzerecalibrate=Truedeğerini ayarlamalısınız. Flux modelleri içindiffusers.hooks.mag_cache.FLUX_MAG_RATIOSkullanabilirsiniz. - calibrate (
bool, varsayılanFalse) — True ise, kalibrasyon modunu etkinleştirir. Bu modda hiçbir blok atlanmaz. Bunun yerine, hook mevcut çalıştırma için büyüklük oranlarını hesaplar ve bunları sonunda kaydeder. Yeni modeller veya zamanlayıcılar içinmag_ratiosdeğerlerini elde etmek için bunu kullanın.
MagCache yapılandırması.
diffusers.apply_mag_cache
< source >( module: Moduleconfig: MagCacheConfig )
MagCache'i belirli bir modüle (genellikle bir Transformer'a) uygular.
SeaCacheConfig
sınıf 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 )
Parametreler
- threshold (
float, varsayılan0.25) — Birikimli göreli-L1 bütçesi. Daha büyük değerler önbelleğin daha sık yeniden kullanılmasını sağlar. - residual_order (
int, varsayılan1) — Transformer artığını tahmin etmek için kullanılan sıra.0en son artığı doğrudan yeniden kullanır ve1son iki tam çalıştırmadan doğrusal olarak dışa vurum yapar. - retention_steps (
int, varsayılan1) — Her zaman tam olarak çalıştırılan başlangıç zamanlayıcı adımlarının sayısı. - cache_end_steps (
int, varsayılan1) — Her zaman tam olarak çalıştırılan son zamanlayıcı adımlarının sayısı. - max_consecutive_cached (
int, varsayılan2) — Tam bir çalıştırma zorlanmadan önce, önbellek bağlamı başına izin verilen en fazla ardışık artımsal yeniden kullanım sayısı.0sınırı devre dışı bırakır. - power_exp (
float, varsayılan3.0) — SEA temiz sinyal güç öncelinin üssü. SeaCache, video özellikleri için3.0kullanır. - raw_vision_callback (
Callable, isteğe bağlı) — Üretilen çıktıyı oluşturan görsel latentleri döndüren gelişmiş model adaptörü, her birinin şekli(C, T, H, W). Çıktı yörüngesi içinde temiz koşullandırma karelerini dahil edin, ancak çıktının parçası olmayan ayrı görsel ipuçlarını hariç tutun. Atlandığında, mevcut bir adaptör varsa yerleşik bir adaptör kullanılır.
SeaCache yapılandırması.
SeaCache varsayılan olarak devre dışıdır ve yalnızca bu yapılandırma transformer.enable_cache(config) fonksiyonuna iletildikten sonra etkinleşir.
SeaCache, zamanlayıcı adımları arasında Spektral-Evrim-Bilinçli (SEA) göstergelerini karşılaştırır. Birikimli göreli değişimleri threshold altında kalıyorsa, tekrarlanan transformer blok yığını önbelleğe alınmış bir artıkla değiştirilir. Model-özel adaptörler, artık sınırını bu blokların ötesine genişletebilir. Diğer video transformer'ları, blok meta verilerini kaydederek ve raw_vision_callback sağlayarak genel yolu kullanabilir; bu durum için pipeline'ın her transformer yörüngesi için bir cache_context içine girmesi gerekir.
diffusers.apply_sea_cache
< source >( module: Moduleconfig: SeaCacheConfig )
Desteklenen bir dönüştürücüye SeaCache uygulayın.
SeaCache, bir transformer'ın tekrarlanan blok yığını için önbelleğe alınmış bir artığı yeniden kullanır. Model adaptörleri, gösterge çıkarımını ve artık sınırını özelleştirebilir; genel yol, kayıtlı blok meta verilerini ve raw_vision_callback işlevini kullanır. Uyumluluk ve önbellek parametreleri her model için doğrulanmalıdır.