Buckets:
| # Penyimpanan sementara | |
| Caching mempercepat inferensi dengan menyimpan dan menggunakan kembali output antara dari berbagai lapisan, seperti lapisan perhatian dan lapisan feedforward, alih-alih melakukan seluruh komputasi pada setiap langkah inferensi. Hal ini secara signifikan meningkatkan kecepatan generasi dengan mengorbankan lebih banyak memori dan tidak memerlukan pelatihan tambahan. | |
| Panduan ini menunjukkan cara menggunakan metode caching yang didukung di Diffusers. | |
| ## Pyramid Attention Broadcast | |
| [Pyramid Attention Broadcast (PAB)](https://huggingface.co/papers/2408.12588) didasarkan pada pengamatan bahwa output attention tidak terlalu berbeda antar timestep yang berurutan dalam proses generasi. Perbedaan attention paling kecil terjadi pada lapisan cross attention dan umumnya di-cache pada rentang timestep yang lebih panjang. Hal ini diikuti oleh lapisan temporal attention dan spatial attention. | |
| > [!TIP] | |
| > Tidak semua model video memiliki tiga jenis perhatian (cross, temporal, dan spatial)! | |
| PAB dapat dikombinasikan dengan teknik lain seperti sequence parallelism dan classifier-free guidance parallelism (data parallelism) untuk menghasilkan video secara hampir real-time. | |
| Setel dan teruskan [PyramidAttentionBroadcastConfig](/docs/diffusers/v0.43.0/id/api/cache#diffusers.PyramidAttentionBroadcastConfig) ke transformer pipeline untuk mengaktifkannya. `spatial_attention_block_skip_range` mengontrol seberapa sering perhitungan attention dilewati di blok spatial attention, dan `spatial_attention_timestep_skip_range` adalah rentang timestep yang akan dilewati. Perhatikan untuk memilih rentang yang tepat karena interval yang lebih kecil dapat menyebabkan kecepatan inferensi yang lebih lambat, sedangkan interval yang lebih besar dapat menghasilkan kualitas generasi yang lebih rendah. | |
| ```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) meng-cache dan menggunakan ulang fitur perhatian serupa dengan [PAB](#pyramid-attention-broadcast) karena perbedaan output kecil untuk setiap langkah waktu berikutnya. | |
| Metode ini juga dapat memilih untuk melewati prediksi cabang tanpa syarat, ketika menggunakan panduan bebas klasifikator untuk pengambilan sampel (umum pada sebagian besar model dasar), dan memperkirakan dari prediksi cabang bersyarat jika terdapat redundansi yang signifikan pada output laten yang diprediksi antara langkah waktu yang berurutan. | |
| Setel dan teruskan [FasterCacheConfig](/docs/diffusers/v0.43.0/id/api/cache#diffusers.FasterCacheConfig) ke transformer pipeline untuk mengaktifkannya. | |
| ```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) membandingkan indikator Spectral-Evolution-Aware (SEA) antara langkah denoising yang berurutan. Ketika perubahan indikator yang terakumulasi tetap di bawah ambang batas, ia melewati tumpukan blok transformer yang mahal dan memprediksi keluarannya dari residual yang di-cache. Bangun indikator dari visual latents yang membentuk output yang dihasilkan. Sertakan frame conditioning yang bersih ketika mereka merupakan bagian dari trajektori output tersebut, seperti pada generasi image-to-video dan video-to-video. Kecualikan visual hints terpisah yang mengondisikan generasi tetapi bukan bagian dari output. Text conditioning dikecualikan karena bukan merupakan visual latent. | |
| Paket Transfer Cosmos 3 mengontrol petunjuk sebagai urutan visual terpisah, sehingga adapter-nya mengecualikannya dari indikator. Cabang Control-CFG membandingkan lintasan output yang sama sambil mempertahankan residu yang di-cache milik mereka sendiri. Petunjuk kontrol tetap mengondisikan transformer. | |
| Implementasi menyediakan adapter bawaan untuk model-model berikut: | |
| - **Cosmos 3** adalah integrasi utama yang dioptimalkan dan diuji. Ia meng-cache seluruh tumpukan decoder melalui batas normalisasi pasca. | |
| - **Wan T2V** menggunakan jalur blok berulang generik dalam mode eager. Integrasi ini menunjukkan bagaimana transformer video single-stream lainnya dapat menyediakan latens visual mentah ke SeaCache; ini bukan klaim bahwa parameter cache yang sama optimal untuk Wan atau bahwa varian Wan lainnya didukung. | |
| Video transformer lain dapat terintegrasi dengan jalur generik ketika mereka menggunakan `CacheMixin`, mengekspos daftar blok berulang yang dikenali, dan mendaftarkan tata letak input/output blok di `TransformerBlockRegistry`. Pipeline harus memasuki `cache_context` untuk setiap panggilan transformer, melampirkan `step_index`, `sigma`, dan `num_inference_steps`, serta menggunakan nama konteks yang terpisah untuk lintasan independen seperti panduan kondisional dan non-kondisional. Sampaikan `raw_vision_callback` yang mengembalikan latens visual yang membentuk output yang dihasilkan ketika tidak ada adapter bawaan yang tersedia. Validasi kualitas output dan sesuaikan parameter cache untuk setiap model dan scheduler; dukungan dan hasil benchmark tidak otomatis berpindah dari Cosmos 3. | |
| ### Cosmos 3 | |
| SeaCache dinonaktifkan secara default. Aktifkan pada transformer; loop denoising Cosmos 3 menempelkan langkah scheduler aktif, sigma, dan jumlah langkah ke setiap panggilan `cache_context`, sehingga tidak diperlukan pengkabelan tambahan: | |
| ```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)) | |
| ``` | |
| API tingkat model ini bekerja dengan [Cosmos3OmniPipeline](/docs/diffusers/v0.43.0/id/api/pipelines/cosmos3#diffusers.Cosmos3OmniPipeline), [Cosmos3OmniModularPipeline](/docs/diffusers/v0.43.0/id/api/pipelines/cosmos3#diffusers.Cosmos3OmniModularPipeline), dan [Cosmos3DistilledModularPipeline](/docs/diffusers/v0.43.0/id/api/pipelines/cosmos3#diffusers.Cosmos3DistilledModularPipeline). SeaCache adalah optimasi aproksimasi dan dapat mengubah output yang dihasilkan. Panggil `pipe.transformer.disable_cache()` ketika Anda membutuhkan setiap langkah denoising untuk menjalankan transformer secara penuh. | |
| ## FirstBlockCache | |
| [FirstBlock Cache](https://huggingface.co/docs/diffusers/main/en/api/cache#diffusers.FirstBlockCacheConfig) memeriksa seberapa besar perubahan pada lapisan awal denoiser dari satu timestep ke timestep berikutnya. Jika perubahannya kecil, model akan melewati lapisan-lapisan akhir yang mahal dan menggunakan kembali output sebelumnya. | |
| ```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)) | |
| ``` | |
| ## Cache TaylorSeer | |
| [TaylorSeer Cache](https://huggingface.co/papers/2403.06923) mempercepat inferensi difusi dengan menggunakan ekspansi deret Taylor untuk memperkirakan dan meng-cache aktivasi antara di antara langkah-langkah denoising. Metode ini memprediksi output masa depan berdasarkan komputasi masa lalu, lalu memakainya kembali pada interval tertentu untuk mengurangi perhitungan yang redundan. | |
| Mekanisme penyangga ini memberikan hasil yang kuat dengan overhead memori tambahan yang minimal. Untuk analisis kinerja yang lebih rinci, lihat [temuan kami di sini](https://github.com/huggingface/diffusers/pull/12648#issuecomment-3610615080). | |
| Untuk mengaktifkan TaylorSeer Cache, buat [TaylorSeerCacheConfig](/docs/diffusers/v0.43.0/id/api/cache#diffusers.TaylorSeerCacheConfig) dan teruskan ke transformer pipeline Anda: | |
| - `cache_interval`: Jumlah langkah untuk menggunakan kembali output yang di-cache sebelum melakukan forward pass penuh | |
| - `disable_cache_before_step`: Langkah-langkah awal yang menggunakan komputasi penuh untuk mengumpulkan data untuk aproksimasi | |
| - `max_order`: Akurasi aproksimasi (secara teori, nilai yang lebih tinggi meningkatkan kualitas tetapi juga meningkatkan penggunaan memori, namun kami merekomendasikan untuk disetel ke `1`) | |
| ```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) mempercepat inferensi dengan melewati blok transformer berdasarkan magnitudo pembaruan residual. Metode ini mengamati bahwa magnitudo pembaruan (Output - Input) meluruh secara prediktif selama proses difusi. Dengan mengakumulasi "anggaran error" berdasarkan rasio magnitudo yang dihitung sebelumnya, metode ini secara dinamis memutuskan kapan harus melewati komputasi dan menggunakan kembali residual sebelumnya. | |
| MagCache bergantung pada **Magnitude Ratios** (`mag_ratios`) yang menggambarkan kurva peluruhan ini. Rasio-rasio ini spesifik untuk checkpoint model dan scheduler. `FLUX_MAG_RATIOS` yang disertakan diukur pada FLUX.1; model lain, termasuk Flux2 dan Flux2 Klein, memerlukan kalibrasi tersendiri. | |
| Untuk menggunakan MagCache, Anda biasanya mengikuti proses dua langkah: **Kalibrasi** dan **Inferensi**. | |
| 1. **Kalibrasi**: Jalankan inferensi sekali dengan `calibrate=True`. Hook akan mengukur magnitudo residual dan mencetak rasio yang dihitung ke konsol. | |
| 2. **Inferensi**: Teruskan rasio-rasio ini ke `MagCacheConfig` untuk mengaktifkan akselerasi. | |
| ```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` mewakili kurva peluruhan magnitudo intrinsik model. Rasio yang dikalibrasi untuk jumlah langkah yang tinggi (misalnya, 50) dapat digunakan kembali untuk jumlah langkah yang lebih rendah (misalnya, 20). Implementasi menggunakan interpolasi untuk memetakan kurva ke jumlah langkah inferensi saat ini. | |
| > [!TIP] | |
| > Untuk pipeline yang menjalankan Classifier-Free Guidance secara berurutan (seperti Kandinsky 5.0), log kalibrasi mungkin mencetak dua array: satu untuk jalur Conditional dan satu untuk jalur Unconditional. Dalam kebanyakan kasus, Anda harus menggunakan array pertama (Conditional). | |
| > [!TIP] | |
| > Untuk pipeline yang menjalankan Classifier-Free Guidance secara **batched** (seperti SDXL atau Flux), `hidden_states` yang diproses oleh model mengandung cabang kondisional dan non-kondisional yang digabungkan. Proses kalibrasi secara otomatis memperhitungkan hal ini, menghasilkan satu array rasio yang merepresentasikan perilaku gabungan. Anda dapat menggunakan array hasil ini secara langsung tanpa modifikasi. | |
Xet Storage Details
- Size:
- 12.6 kB
- Xet hash:
- ee149b88729e9c2667c528332a2356d4654e6d69c449da0717d9dc047c7a29c3
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.