Buckets:
| # Önbelleğe Alma | |
| Önbellekleme, her çıkarım adımında tüm hesaplamanın yapılması yerine, dikkat ve ileri beslemeli katmanlar gibi farklı katmanların ara çıktıları depolanıp yeniden kullanılarak çıkarımı hızlandırır. Daha fazla bellek maliyeti karşılığında üretim hızını önemli ölçüde artırır ve ek eğitim gerektirmez. | |
| Bu kılavuz, Diffusers'ta desteklenen önbellekleme yöntemlerini nasıl kullanacağınızı gösterir. | |
| ## Piramit Dikkat Yayınlama | |
| [Pyramid Attention Broadcast (PAB)](https://huggingface.co/papers/2408.12588), üretim sürecinin ardışık zaman adımları arasında dikkat çıktılarının o kadar da farklı olmadığı gözlemine dayanır. Dikkat farkları çapraz katmanlarda en küçüktür ve genellikle daha uzun bir zaman aralığı boyunca önbelleğe alınır. Bunu zaman ve uzamsal dikkat katmanları izler. | |
| > [!TIP] | |
| > Tüm video modellerinde üç tür dikkat (çapraz, zamansal ve mekânsal) bulunmaz! | |
| PAB, video üretiminin neredeyse gerçek zamanlı yapılabilmesi için sıralama paralelliği ve sınıflandırıcı-ücretsiz yönlendirme paralelliği (veri paralelliği) gibi diğer tekniklerle birleştirilebilir. | |
| Etkinleştirmek için bir [PyramidAttentionBroadcastConfig](/docs/diffusers/main/tr/api/cache#diffusers.PyramidAttentionBroadcastConfig) oluşturup pipeline'ın transformer'ına iletin. `spatial_attention_block_skip_range`, uzamsal dikkat bloklarında dikkat hesaplamalarının ne sıklıkla atlanacağını kontrol eder; `spatial_attention_timestep_skip_range` ise atlanacak zaman adımlarının aralığını belirtir. Daha küçük bir aralık yavaş çıkarım hızlarına, daha büyük bir aralık ise daha düşük üretim kalitesine yol açabileceğinden uygun bir aralık seçmeye özen gösterin. | |
| ```python | |
| import torch | |
| from diffusers import CogVideoXPipeline, PyramidAttentionBroadcastConfig | |
| pipeline = CogVideoXPipeline.from_pretrained("THUDM/CogVideoX-5b", dtype=torch.bfloat16) | |
| pipeline.to("cuda") # or "mps", "xpu", "cpu" | |
| config = PyramidAttentionBroadcastConfig( | |
| spatial_attention_block_skip_range=2, | |
| spatial_attention_timestep_skip_range=(100, 800), | |
| current_timestep_callback=lambda: pipe.current_timestep, | |
| ) | |
| pipeline.transformer.enable_cache(config) | |
| ``` | |
| ## FasterCache | |
| [FasterCache](https://huggingface.co/papers/2410.19355), ardışık zaman adımları için çıktı farklarının küçük olması nedeniyle [PAB](#pyramid-attention-broadcast)'ye benzer şekilde dikkat özelliklerini önbelleğe alır ve yeniden kullanır. | |
| Bu yöntem, örneklemeye sınıfsız yönlendirme (classifier-free guidance) kullanıldığında (çoğu temel modelde yaygındır) koşulsuz dalga tahminini atlamayı da tercih edebilir ve ardışık zaman adımları arasında tahmin edilen gizli çıktıların anlamlı bir şekilde örtüşmesi varsa bunu koşullu dalga tahmininden tahmin edebilir. | |
| Etkinleştirmek için bir [FasterCacheConfig](/docs/diffusers/main/tr/api/cache#diffusers.FasterCacheConfig) oluşturup pipeline'ın transformer'ına iletin. | |
| ```python | |
| import torch | |
| from diffusers import CogVideoXPipeline, FasterCacheConfig | |
| pipe line= CogVideoXPipeline.from_pretrained("THUDM/CogVideoX-5b", dtype=torch.bfloat16) | |
| pipeline.to("cuda") # or "mps", "xpu", "cpu" | |
| config = FasterCacheConfig( | |
| spatial_attention_block_skip_range=2, | |
| spatial_attention_timestep_skip_range=(-1, 681), | |
| current_timestep_callback=lambda: pipe.current_timestep, | |
| attention_weight_callback=lambda _: 0.3, | |
| unconditional_batch_skip_range=5, | |
| unconditional_batch_timestep_skip_range=(-1, 781), | |
| tensor_format="BFCHW", | |
| ) | |
| pipeline.transformer.enable_cache(config) | |
| ``` | |
| ## SeaCache | |
| [SeaCache](https://huggingface.co/papers/2602.18993), ardışık gürültü azaltma adımları arasında Spektral-Evrim-Bilinçli (SEA) göstergelerini karşılaştırır. Birikmiş gösterge değişimi bir eşiğin altında kaldığında, maliyetli transformer blok yığını atlanır ve çıktısı önbellekten alınan artıklardan tahmin edilir. Gösterge, üretilen çıktıyı oluşturan görsel latentlerden oluşturulur. Görüntüden videoya ve videodan videoya üretimde olduğu gibi, temiz koşullandırma kareleri bu çıktı yörüngesinin bir parçasıysa dahil edilir. Üretimi koşullandıran ancak çıktının bir parçası olmayan ayrı görsel ipuçları hariç tutulur. Metin koşullandırması, görsel latent olmadığı için hariç tutulur. | |
| Cosmos 3 Transfer paketleri, kontrol ipuçlarını ayrı görsel diziler olarak yönetir; bu nedenle adaptörleri bu ipuçlarını gösterge dışı bırakır. Control-CFG dalları, kendi önbelleğe alınmış kalanlarını korurken aynı çıktı yörüngesini karşılaştırır. Kontrol ipuçları yine de dönüştürücüyü koşullandırır. | |
| Uygulama, aşağıdaki modeller için yerleşik adaptörler sağlar: | |
| - **Cosmos 3**, birincil optimize edilmiş ve test edilmiş entegrasyondur. Tam çözücü yığını, normalizasyon sonrası sınırından önbelleğe alır. | |
| - **Wan T2V**, eager modda genel tekrarlı blok yolunu kullanır. Bu entegrasyon, başka bir tek akışlı video transformer'ın SeaCache'e ham görme latentlerini nasıl sağlayabileceğini gösterir; aynı önbellek parametrelerinin Wan için optimal olduğu veya diğer Wan varyantlarının desteklendiği iddiası değildir. | |
| Diğer video transformer'ları, `CacheMixin` kullandıklarında, tanınan bir tekrarlanan blok listesi açtıklarında ve blok giriş/çıkış yerleşimini `TransformerBlockRegistry` içinde kaydettiklerinde genel yol ile entegre edilebilir. Pipeline, her transformer çağrısı için bir `cache_context` içine girmeli, `step_index`, `sigma` ve `num_inference_steps` değerlerini eklemeli ve koşullu ile koşulsuz yönlendirme gibi bağımsız yörüngeler için ayrı bağlam adları kullanmalıdır. Yerleşik bir adaptör mevcut değilse, üretilen çıktıyı oluşturan görsel latentleri döndüren bir `raw_vision_callback` geçin. Çıktı kalitesini doğrulayın ve her model ve zamanlayıcı için önbellek parametrelerini ayarlayın; destek ve benchmark sonuçları Cosmos 3'ten otomatik olarak aktarılmaz. | |
| ### Cosmos 3 | |
| SeaCache varsayılan olarak devre dışıdır. Transformer üzerinde etkinleştirin; Cosmos 3 gürültü azaltma döngüsü, her `cache_context` çağrısına etkin zamanlayıcı adımını, sigma değerini ve adım sayısını ekler, bu nedenle ek bir bağlantıya gerek yoktur: | |
| ```python | |
| from diffusers import Cosmos3OmniPipeline, SeaCacheConfig | |
| pipe = Cosmos3OmniPipeline.from_pretrained("nvidia/Cosmos3-Nano") | |
| pipe.transformer.enable_cache(SeaCacheConfig(threshold=0.2, max_consecutive_cached=2)) | |
| ``` | |
| Bu model düzeyindeki API, [Cosmos3OmniPipeline](/docs/diffusers/main/tr/api/pipelines/cosmos3#diffusers.Cosmos3OmniPipeline), [Cosmos3OmniModularPipeline](/docs/diffusers/main/tr/api/pipelines/cosmos3#diffusers.Cosmos3OmniModularPipeline) ve [Cosmos3DistilledModularPipeline](/docs/diffusers/main/tr/api/pipelines/cosmos3#diffusers.Cosmos3DistilledModularPipeline) ile çalışır. SeaCache yaklaşık bir optimizasyondur ve üretilen çıktıları değiştirebilir. Her gürültü azaltma adımının tam dönüştürücüyü çalıştırması gerektiğinde `pipe.transformer.disable_cache()` çağrısını yapın. | |
| ## FirstBlockCache | |
| [FirstBlock Cache](https://huggingface.co/docs/diffusers/main/en/api/cache#diffusers.FirstBlockCacheConfig), denoiser'ın erken katmanlarının bir timestep'ten diğerine ne kadar değiştiğini kontrol eder. Değişim küçükse, model pahalı olan sonraki katmanları atlar ve önceki çıktıyı yeniden kullanır. | |
| ```py | |
| import torch | |
| from diffusers import DiffusionPipeline | |
| from diffusers.hooks import apply_first_block_cache, FirstBlockCacheConfig | |
| pipeline = DiffusionPipeline.from_pretrained( | |
| "Qwen/Qwen-Image", dtype=torch.bfloat16 | |
| ) | |
| apply_first_block_cache(pipeline.transformer, FirstBlockCacheConfig(threshold=0.2)) | |
| ``` | |
| ## TaylorSeer Önbellek | |
| [TaylorSeer Cache](https://huggingface.co/papers/2403.06923), Taylor serisi açılımlarını kullanarak gürültü giderme adımları arasında ara aktivasyonları yaklaşık olarak hesaplayıp önbelleğe alarak difüzyon çıkarımını hızlandırır. Yöntem, geçmiş hesaplama sonuçlarına dayanarak gelecekteki çıktıları tahmin eder ve bunları belirli aralıklarla yeniden kullanarak gereksiz hesaplamaları azaltır. | |
| Bu önbellekleme mekanizması, minimal ek bellek yükü ile güçlü sonuçlar sunar. Detaylı performans analizi için [buradaki bulgularımıza](https://github.com/huggingface/diffusers/pull/12648#issuecomment-3610615080) göz atın. | |
| TaylorSeer Cache'i etkinleştirmek için bir [TaylorSeerCacheConfig](/docs/diffusers/main/tr/api/cache#diffusers.TaylorSeerCacheConfig) oluşturun ve bunu hattınızdaki dönüştürücüye (transformer) iletin: | |
| - `cache_interval`: Tam bir ileri geçiş (forward pass) yapılmadan önce önbelleğe alınmış çıktıların yeniden kullanılacağı adım sayısı | |
| - `disable_cache_before_step`: Yaklaşımlar için veri toplamak amacıyla tam hesaplamalar kullanan ilk adımlar | |
| - `max_order`: Yaklaşım doğruluğu (teorik olarak daha yüksek değerler kaliteyi artırır ancak bellek kullanımını da artırır; `1` olarak ayarlanmasını öneririz) | |
| ```python | |
| import torch | |
| from diffusers import FluxPipeline, TaylorSeerCacheConfig | |
| pipe = FluxPipeline.from_pretrained( | |
| "black-forest-labs/FLUX.1-dev", | |
| dtype=torch.bfloat16, | |
| ).to("cuda") # or "mps", "xpu", "cpu" | |
| config = TaylorSeerCacheConfig( | |
| cache_interval=5, | |
| max_order=1, | |
| disable_cache_before_step=10, | |
| taylor_factors_dtype=torch.bfloat16, | |
| ) | |
| pipe.transformer.enable_cache(config) | |
| ``` | |
| ## MagCache | |
| [MagCache](https://github.com/Zehong-Ma/MagCache), kalan güncellemenin büyüklüğüne dayanarak dönüştürücü bloklarını atlayarak çıkarımı hızlandırır. Güncellemelerin (Çıktı - Girdi) büyüklüğünün difüzyon süreci boyunca öngörülebilir bir şekilde azaldığını gözlemler. Ön hesaplanmış büyüklük oranlarına dayalı bir "hata bütçesi" biriktirerek, hesaplamanın ne zaman atlanacağını ve önceki kalanın yeniden kullanılacağını dinamik olarak belirler. | |
| MagCache, bu azalma eğrisini tanımlayan **Magnitude Ratios** (`mag_ratios`) üzerine kuruludur. Bu oranlar, model checkpoint'ine ve zamanlayıcıya (scheduler) özgüdür. Pakette gelen `FLUX_MAG_RATIOS` değerleri FLUX.1 üzerinde ölçülmüştür; Flux2 ve Flux2 Klein dahil diğer modellerin kendi kalibrasyon çalışmasını yapması gerekir. | |
| MagCache'i kullanmak için genellikle iki adımlı bir süreç izlenir: **Kalibrasyon** ve **Çıkarım**. | |
| 1. **Kalibrasyon**: `calibrate=True` ile bir kez çıkarım çalıştırın. Hook, kalan büyüklüklerini ölçer ve hesaplanan oranları konsola yazdırır. | |
| 2. **Çıkarım**: Hızlandırmayı etkinleştirmek için bu oranları `MagCacheConfig` sınıfına iletin. | |
| ```python | |
| import torch | |
| from diffusers import FluxPipeline, MagCacheConfig | |
| pipe = FluxPipeline.from_pretrained( | |
| "black-forest-labs/FLUX.1-schnell", | |
| dtype=torch.bfloat16 | |
| ).to("cuda") # or "mps", "xpu", "cpu" | |
| # 1. Calibration Step | |
| # Run full inference to measure model behavior. | |
| calib_config = MagCacheConfig(calibrate=True, num_inference_steps=4) | |
| pipe.transformer.enable_cache(calib_config) | |
| # Run a prompt to trigger calibration | |
| pipe("A cat playing chess", num_inference_steps=4) | |
| # Logs will print something like: "MagCache Calibration Results: [1.0, 1.37, 0.97, 0.87]" | |
| # 2. Inference Step | |
| # Apply the specific ratios obtained from calibration for optimized speed. | |
| # Note: For Flux models, you can also import defaults: | |
| # from diffusers.hooks.mag_cache import FLUX_MAG_RATIOS | |
| mag_config = MagCacheConfig( | |
| mag_ratios=[1.0, 1.37, 0.97, 0.87], | |
| num_inference_steps=4 | |
| ) | |
| pipe.transformer.enable_cache(mag_config) | |
| image = pipe("A cat playing chess", num_inference_steps=4).images[0] | |
| ``` | |
| > [!NOTE] | |
| > `mag_ratios`, modelin içsel büyüklük azalma eğrisini temsil eder. Yüksek adım sayıları (ör. 50) için kalibre edilmiş oranlar, daha düşük adım sayıları (ör. 20) için yeniden kullanılabilir. Uygulama, eğriyi mevcut çıkarım adım sayısına eşlemek için interpolasyon kullanır. | |
| > [!TIP] | |
| > Sıralı olarak Classifier-Free Guidance çalıştıran pipeline'lar (Kandinsky 5.0 gibi) için kalibrasyon günlüğü iki dizi yazdırabilir: biri Conditional geçişi için, diğeri Unconditional geçişi için. Çoğu durumda, ilk diziyi (Conditional) kullanmanız gerekir. | |
| > [!TIP] | |
| > **batched** (toplu) biçimde Classifier-Free Guidance çalıştıran pipeline'lar (SDXL veya Flux gibi) için, modelin işlediği `hidden_states`, birleştirilmiş koşullu ve koşulsuz dalları içerir. Kalibrasyon süreci bunu otomatik olarak hesaba katar ve ortak davranışı temsil eden tek bir oran dizisi üretir. Bu sonucun elde edilen dizisini herhangi bir değişiklik yapmadan doğrudan kullanabilirsiniz. | |
Xet Storage Details
- Size:
- 13.1 kB
- Xet hash:
- da9ae731237e7bc364168ff1f47712af2abf18224ebae77678bb55b1b647826a
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.