Buckets:
| # Penjadwal | |
| Penjadwal memberi tahu loop denoising berapa banyak noise yang harus dihapus pada setiap langkah. Penjadwal yang berbeda menukar kecepatan dengan kualitas. | |
| Panduan ini menunjukkan cara memuat scheduler dan menyesuaikan jadwal timestep, jarak, dan sigmanya. | |
| ## Memilih scheduler | |
| Mulai dari checkpoint default. Ganti hanya jika Anda memerlukan tradeoff kecepatan atau kualitas yang berbeda. | |
| - DPM++ 2M SDE Karras adalah pilihan serbaguna yang kuat untuk banyak checkpoint difusi laten. | |
| - [TCDScheduler](/docs/diffusers/v0.43.0/id/api/schedulers/tcd#diffusers.TCDScheduler) bekerja dengan baik untuk model yang telah didistilasi. | |
| - Gunakan [FlowMatchEulerDiscreteScheduler](/docs/diffusers/v0.43.0/id/api/schedulers/flow_match_euler_discrete#diffusers.FlowMatchEulerDiscreteScheduler) atau [FlowMatchHeunDiscreteScheduler](/docs/diffusers/v0.43.0/id/api/schedulers/flow_match_heun_discrete#diffusers.FlowMatchHeunDiscreteScheduler) untuk model FlowMatch (Qwen-Image, Flux, dan sejenisnya). | |
| - [EulerDiscreteScheduler](/docs/diffusers/v0.43.0/id/api/schedulers/euler#diffusers.EulerDiscreteScheduler) atau [EulerAncestralDiscreteScheduler](/docs/diffusers/v0.43.0/id/api/schedulers/euler_ancestral#diffusers.EulerAncestralDiscreteScheduler) sering kali bekerja dengan baik untuk gambar bergaya anime. | |
| - [LCMScheduler](/docs/diffusers/v0.43.0/id/api/schedulers/lcm#diffusers.LCMScheduler) dengan LCM UNet atau LoRA untuk generasi beberapa langkah saat checkpoint mendukungnya. | |
| ## Memuat penjadwal | |
| > [!TIP] | |
| > Model flow-matching seperti Qwen-Image dan Flux menyertakan [FlowMatchEulerDiscreteScheduler](/docs/diffusers/v0.43.0/id/api/schedulers/flow_match_euler_discrete#diffusers.FlowMatchEulerDiscreteScheduler) sebagai default. Pertahankan scheduler tersebut kecuali Anda sengaja melakukan eksperimen. Ganti dengan [from_config()](/docs/diffusers/v0.43.0/id/api/configuration#diffusers.ConfigMixin.from_config) hanya jika penggantian tersebut kompatibel dengan checkpoint. | |
| Schedulers hanya berupa konfigurasi dan tidak menyertakan tensor bobot. Akses atribut `.scheduler` pada pipeline untuk memeriksa konfigurasi yang dimuat. | |
| ```py | |
| import torch | |
| from diffusers import DiffusionPipeline | |
| pipeline = DiffusionPipeline.from_pretrained( | |
| "stabilityai/stable-diffusion-xl-base-1.0", dtype=torch.float16, device_map="cuda" # or "mps", "xpu", "cpu" | |
| ) | |
| pipeline.scheduler | |
| ``` | |
| Untuk mengganti scheduler pada pipeline yang sudah dimuat, gunakan [from_config()](/docs/diffusers/v0.43.0/id/api/configuration#diffusers.ConfigMixin.from_config) dengan konfigurasi scheduler yang ada agar `num_train_timesteps` dan field terkait tetap selaras. Untuk checkpoint FlowMatch (Qwen-Image, Flux, dan sejenisnya), pertahankan [FlowMatchEulerDiscreteScheduler](/docs/diffusers/v0.43.0/id/api/schedulers/flow_match_euler_discrete#diffusers.FlowMatchEulerDiscreteScheduler) kecuali Anda sengaja bereksperimen dengan pengganti yang kompatibel. | |
| ```py | |
| from diffusers import DPMSolverMultistepScheduler | |
| pipeline.scheduler = DPMSolverMultistepScheduler.from_config(pipeline.scheduler.config) | |
| ``` | |
| Anda juga dapat memuat konfigurasi scheduler dari Hub dengan [from_pretrained()](/docs/diffusers/v0.43.0/id/api/schedulers/overview#diffusers.SchedulerMixin.from_pretrained) dan meneruskannya ke [from_pretrained()](/docs/diffusers/v0.43.0/id/api/pipelines/overview#diffusers.DiffusionPipeline.from_pretrained) melalui `scheduler`. | |
| ```py | |
| from diffusers import DiffusionPipeline, DPMSolverMultistepScheduler | |
| dpm = DPMSolverMultistepScheduler.from_pretrained( | |
| "stabilityai/stable-diffusion-xl-base-1.0", subfolder="scheduler" | |
| ) | |
| pipeline = DiffusionPipeline.from_pretrained( | |
| "stabilityai/stable-diffusion-xl-base-1.0", | |
| scheduler=dpm, | |
| dtype=torch.float16, | |
| device_map="cuda", # or "mps", "xpu", "cpu" | |
| ) | |
| pipeline.scheduler | |
| ``` | |
| ## Jadwal timestep | |
| Timestep atau jadwal noise menentukan bagaimana noise didistribusikan selama proses denoising. Jadwal ini dapat berupa linear atau lebih terkonsentrasi di bagian awal atau akhir. Ini adalah urutan tingkat noise yang dihitung sebelumnya, dihasilkan dari konfigurasi default scheduler, tetapi dapat dikustomisasi untuk menggunakan jadwal lain. | |
| ```text | |
| linear (even steps) AYS (denser where it matters) | |
| noise noise | |
| ^ ^ | |
| | * | * | |
| | * | * | |
| | * | ** | |
| | * | *** | |
| | * | ** | |
| | * | * | |
| | * | * | |
| +-----------------> step +-----------------> step | |
| ``` | |
| > [!TIP] | |
| > `timesteps` kustom hanya berfungsi jika `set_timesteps` dari scheduler tersebut menerima argumen tersebut (pipeline memeriksa signature melalui `retrieve_timesteps` dan akan melempar `ValueError` jika tidak). Periksa halaman API scheduler atau signature `set_timesteps` sebelum meneruskannya. | |
| Contoh di bawah ini menggunakan jadwal [Align Your Steps (AYS)](https://research.nvidia.com/labs/toronto-ai/AlignYourSteps/) yang dapat menghasilkan gambar berkualitas tinggi dalam 10 langkah, sehingga secara signifikan mempercepat proses generasi dan mengurangi waktu komputasi. | |
| Impor jadwal dan teruskan ke argumen `timesteps` di pipeline. | |
| ```py | |
| import torch | |
| from diffusers import DiffusionPipeline, DPMSolverMultistepScheduler | |
| from diffusers.schedulers import AysSchedules | |
| sampling_schedule = AysSchedules["StableDiffusionXLTimesteps"] | |
| print(sampling_schedule) | |
| # [999, 845, 730, 587, 443, 310, 193, 116, 53, 13] | |
| pipeline = DiffusionPipeline.from_pretrained( | |
| "SG161222/RealVisXL_V4.0", | |
| dtype=torch.float16, | |
| device_map="cuda" # or "mps", "xpu", "cpu" | |
| ) | |
| pipeline.scheduler = DPMSolverMultistepScheduler.from_config( | |
| pipeline.scheduler.config, algorithm_type="sde-dpmsolver++" | |
| ) | |
| prompt = "A cinematic shot of a cute little rabbit wearing a jacket and doing a thumbs up" | |
| image = pipeline( | |
| prompt=prompt, | |
| negative_prompt="", | |
| timesteps=sampling_schedule, | |
| ).images[0] | |
| ``` | |
| Jadwal timestep AYS 10 langkah | |
| Jadwal timestep yang berjarak linear 10 langkah | |
| Jadwal timestep yang berjarak linear 25 langkah | |
| Untuk v-prediction/zero-SNR rescaling pada checkpoint lama, lihat [Legacy checkpoints](./legacy_checkpoints#rescaling-schedules). | |
| ## Jarak antar-timestep | |
| Jarak timestep merujuk pada langkah-langkah spesifik *t* untuk diambil dari jadwal. Diffusers menyediakan tiga jenis jarak seperti yang ditunjukkan di bawah ini. | |
| | strategi spasi | perhitungan spasi | langkah waktu contoh | | |
| |---|---|---| | |
| | `leading` | langkah-langkah yang berjarak sama | `[900, 800, 700, ..., 100, 0]` | | |
| | `linspace` | termasuk langkah pertama dan terakhir serta membagi rata langkah-langkah perantara yang tersisa | `[1000, 888.89, 777.78, ..., 111.11, 0]` | | |
| | `trailing` | termasuk langkah terakhir dan membagi rata langkah-langkah perantara yang tersisa mulai dari akhir | `[999, 899, 799, 699, 599, 499, 399, 299, 199, 99]` | | |
| Lewatkan strategi spasi ke argumen `timestep_spacing` di scheduler. | |
| > [!TIP] | |
| > Strategi `trailing` umumnya menghasilkan gambar dengan kualitas lebih tinggi dan detail lebih banyak dalam jumlah langkah yang lebih sedikit, namun perbedaan kualitasnya tidak terlalu jelas untuk nilai langkah yang lebih standar. | |
| ```py | |
| import torch | |
| from diffusers import DiffusionPipeline, DPMSolverMultistepScheduler | |
| pipeline = DiffusionPipeline.from_pretrained( | |
| "SG161222/RealVisXL_V4.0", | |
| dtype=torch.float16, | |
| device_map="cuda" # or "mps", "xpu", "cpu" | |
| ) | |
| pipeline.scheduler = DPMSolverMultistepScheduler.from_config( | |
| pipeline.scheduler.config, timestep_spacing="trailing" | |
| ) | |
| prompt = "A cinematic shot of a cute little black cat sitting on a pumpkin at night" | |
| image = pipeline( | |
| prompt=prompt, | |
| negative_prompt="", | |
| num_inference_steps=5, | |
| ).images[0] | |
| image | |
| ``` | |
| spasi di belakang setelah 5 langkah | |
| jarak antar baris setelah 5 langkah | |
| ## Sigmas | |
| Sigmas adalah ukuran seberapa bising suatu sampel pada langkah tertentu sebagaimana didefinisikan oleh jadwal. Saat menggunakan `sigmas` kustom, `timesteps` dihitung dari nilai-nilai ini alih-alih dari konfigurasi scheduler default. | |
| ```text | |
| step: 0 1 2 3 4 | |
| sigma: σ0 > σ1 > σ2 > σ3 > σ4 ≈ 0 | |
| high noise ---> clean sample | |
| ``` | |
| > [!TIP] | |
| > `sigmas` kustom hanya berfungsi jika `set_timesteps` dari scheduler tersebut menerima argumen tersebut (pipeline memeriksa signature melalui `retrieve_timesteps` dan akan melempar `ValueError` jika tidak). Periksa halaman API scheduler atau signature `set_timesteps` sebelum meneruskannya. | |
| Lewatkan sigmas kustom ke argumen `sigmas` di pipeline. Contoh di bawah menggunakan [sigmas](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_utils.py) dari jadwal AYS 10-langkah. | |
| ```py | |
| import torch | |
| from diffusers import DiffusionPipeline, EulerDiscreteScheduler | |
| from diffusers.schedulers import AysSchedules | |
| pipeline = DiffusionPipeline.from_pretrained( | |
| "SG161222/RealVisXL_V4.0", | |
| dtype=torch.float16, | |
| device_map="cuda", # or "mps", "xpu", "cpu" | |
| ) | |
| pipeline.scheduler = EulerDiscreteScheduler.from_config(pipeline.scheduler.config) | |
| sigmas = AysSchedules["StableDiffusionXLSigmas"] | |
| prompt = "A cinematic shot of a cute little rabbit wearing a jacket and doing a thumbs up" | |
| image = pipeline( | |
| prompt=prompt, | |
| negative_prompt="", | |
| sigmas=sigmas, | |
| ).images[0] | |
| ``` | |
| ### Karras sigmas | |
| [Karras sigmas](https://huggingface.co/papers/2206.00364) melakukan resampling jadwal noise untuk sampling yang lebih efisien dengan mengelompokkan sigma lebih rapat di tengah urutan tempat rekonstruksi struktur sangat krusial, sementara menggunakan lebih sedikit sigma di awal dan akhir tempat perubahan noise memiliki dampak yang lebih kecil. Hal ini dapat meningkatkan tingkat detail pada gambar yang dihasilkan. | |
| ```text | |
| default σ: * * * * * * * * even-ish | |
| Karras σ: * * * * * * * denser mid, sparser ends | |
| |---structure---| | |
| ``` | |
| Setel `use_karras_sigmas=True` pada scheduler untuk mengaktifkannya. | |
| ```py | |
| import torch | |
| from diffusers import DiffusionPipeline, DPMSolverMultistepScheduler | |
| pipeline = DiffusionPipeline.from_pretrained( | |
| "SG161222/RealVisXL_V4.0", | |
| dtype=torch.float16, | |
| device_map="cuda" # or "mps", "xpu", "cpu" | |
| ) | |
| pipeline.scheduler = DPMSolverMultistepScheduler.from_config( | |
| pipeline.scheduler.config, | |
| algorithm_type="sde-dpmsolver++", | |
| use_karras_sigmas=True, | |
| ) | |
| prompt = "A cinematic shot of a cute little rabbit wearing a jacket and doing a thumbs up" | |
| image = pipeline( | |
| prompt=prompt, | |
| negative_prompt="", | |
| num_inference_steps=20, | |
| ).images[0] | |
| ``` | |
| Karras sigmas diaktifkan | |
| Karras sigmas dinonaktifkan | |
| Lihat [ringkasan](../api/schedulers/overview) API scheduler untuk daftar scheduler yang mendukung Karras sigmas. Ini hanya harus digunakan untuk model yang dilatih dengan Karras sigmas. | |
| ## Langkah selanjutnya | |
| - Baca paper [Common Diffusion Noise Schedules and Sample Steps are Flawed](https://huggingface.co/papers/2305.08891) untuk detail lebih lanjut tentang rescaling noise schedule untuk menegakkan zero SNR. | |
Xet Storage Details
- Size:
- 11.4 kB
- Xet hash:
- 5b8a5200f248dc6710aee39cccb4d324b945894a2035932418a87cfb04a9df32
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.