# Penjadwal

🤗 Diffusers menyediakan banyak fungsi scheduler untuk proses difusi. Scheduler mengambil output model (sampel yang sedang diiterasi oleh proses difusi) dan timestep untuk mengembalikan sampel yang telah dinoise. Timestep penting karena menentukan posisi langkah dalam proses difusi; data dihasilkan dengan mengiterasi maju sebanyak *n* timestep dan inferensi terjadi dengan mempropagasikan mundur melalui timestep. Berdasarkan timestep, scheduler dapat bersifat *diskrit*, di mana timestep berupa `int`, atau *kontinu*, di mana timestep berupa `float`.

Tergantung pada konteksnya, scheduler mendefinisikan cara menambahkan noise secara iteratif ke sebuah gambar atau cara memperbarui sampel berdasarkan output model:

- selama *pelatihan*, sebuah scheduler menambahkan noise (ada berbagai algoritma untuk cara menambahkan noise) ke sebuah sampel untuk melatih model difusi
- selama *inference*, scheduler mendefinisikan cara memperbarui sampel berdasarkan output dari model pretrained

Banyak scheduler diimplementasikan dari pustaka [k-diffusion](https://github.com/crowsonkb/k-diffusion) oleh [Katherine Crowson](https://github.com/crowsonkb/), dan scheduler tersebut juga banyak digunakan di A1111. Untuk membantu Anda memetakan scheduler dari k-diffusion dan A1111 ke scheduler di 🤗 Diffusers, lihat tabel di bawah ini:

| A1111/k-diffusion    | 🤗 Diffusers                         | Penggunaan                                                                                                         |
|---------------------|-------------------------------------|---------------------------------------------------------------------------------------------------------------|
| DPM++ 2M            | [DPMSolverMultistepScheduler](/docs/diffusers/main/id/api/schedulers/multistep_dpm_solver#diffusers.DPMSolverMultistepScheduler)     |                                                                                                               |
| DPM++ 2M Karras     | [DPMSolverMultistepScheduler](/docs/diffusers/main/id/api/schedulers/multistep_dpm_solver#diffusers.DPMSolverMultistepScheduler)     | inisialisasi dengan `use_karras_sigmas=True`                                                                            |
| DPM++ 2M SDE        | [DPMSolverMultistepScheduler](/docs/diffusers/main/id/api/schedulers/multistep_dpm_solver#diffusers.DPMSolverMultistepScheduler)     | inisialisasi dengan `algorithm_type="sde-dpmsolver++"`                                                                  |
| DPM++ 2M SDE Karras | [DPMSolverMultistepScheduler](/docs/diffusers/main/id/api/schedulers/multistep_dpm_solver#diffusers.DPMSolverMultistepScheduler)     | inisialisasi dengan `use_karras_sigmas=True` dan `algorithm_type="sde-dpmsolver++"`                                     |
| DPM++ 2S a          | N/A                                 | sangat mirip dengan `DPMSolverSinglestepScheduler`                         |
| DPM++ 2S a Karras   | N/A                                 | sangat mirip dengan `DPMSolverSinglestepScheduler(use_karras_sigmas=True, ...)` |
| DPM++ SDE           | [DPMSolverSinglestepScheduler](/docs/diffusers/main/id/api/schedulers/singlestep_dpm_solver#diffusers.DPMSolverSinglestepScheduler)    |                                                                                                               |
| DPM++ SDE Karras    | [DPMSolverSinglestepScheduler](/docs/diffusers/main/id/api/schedulers/singlestep_dpm_solver#diffusers.DPMSolverSinglestepScheduler)    | inisialisasi dengan `use_karras_sigmas=True`                                                                            |
| DPM2                | [KDPM2DiscreteScheduler](/docs/diffusers/main/id/api/schedulers/dpm_discrete#diffusers.KDPM2DiscreteScheduler)          |                                                                                                               |
| DPM2 Karras         | [KDPM2DiscreteScheduler](/docs/diffusers/main/id/api/schedulers/dpm_discrete#diffusers.KDPM2DiscreteScheduler)          | inisialisasi dengan `use_karras_sigmas=True`                                                                            |
| DPM2 a              | [KDPM2AncestralDiscreteScheduler](/docs/diffusers/main/id/api/schedulers/dpm_discrete_ancestral#diffusers.KDPM2AncestralDiscreteScheduler) |                                                                                                               |
| DPM2 a Karras       | [KDPM2AncestralDiscreteScheduler](/docs/diffusers/main/id/api/schedulers/dpm_discrete_ancestral#diffusers.KDPM2AncestralDiscreteScheduler) | inisialisasi dengan `use_karras_sigmas=True`                                                                            |
| DPM adaptif        | N/A                                 |                                                                                                               |
| DPM cepat            | N/A                                 |                                                                                                               |
| Euler               | [EulerDiscreteScheduler](/docs/diffusers/main/id/api/schedulers/euler#diffusers.EulerDiscreteScheduler)          |                                                                                                               |
| Euler a             | [EulerAncestralDiscreteScheduler](/docs/diffusers/main/id/api/schedulers/euler_ancestral#diffusers.EulerAncestralDiscreteScheduler) |                                                                                                               |
| Heun                | [HeunDiscreteScheduler](/docs/diffusers/main/id/api/schedulers/heun#diffusers.HeunDiscreteScheduler)           |                                                                                                               |
| LMS                 | [LMSDiscreteScheduler](/docs/diffusers/main/id/api/schedulers/lms_discrete#diffusers.LMSDiscreteScheduler)            |                                                                                                               |
| LMS Karras          | [LMSDiscreteScheduler](/docs/diffusers/main/id/api/schedulers/lms_discrete#diffusers.LMSDiscreteScheduler)            | inisialisasi dengan `use_karras_sigmas=True`                                                                            |
| N/A                 | [DEISMultistepScheduler](/docs/diffusers/main/id/api/schedulers/deis#diffusers.DEISMultistepScheduler)          |                                                                                                               |
| N/A                 | [UniPCMultistepScheduler](/docs/diffusers/main/id/api/schedulers/unipc#diffusers.UniPCMultistepScheduler)         |                                                                                                               |

## Jadwal noise dan jenis jadwal
| A1111/k-diffusion        | 🤗 Diffusers                                                               |
|--------------------------|----------------------------------------------------------------------------|
| Karras                   | inisialisasi dengan `use_karras_sigmas=True`                                         |
| sgm_uniform              | inisialisasi dengan `timestep_spacing="trailing"`                                    |
| sederhana                   | inisialisasi dengan `timestep_spacing="trailing"`                                    |
| eksponensial              | inisialisasi dengan `timestep_spacing="linspace"`, `use_exponential_sigmas=True`     |
| beta                     | inisialisasi dengan `timestep_spacing="linspace"`, `use_beta_sigmas=True`            |

Semua scheduler dibangun dari kelas dasar [SchedulerMixin](/docs/diffusers/main/id/api/schedulers/overview#diffusers.SchedulerMixin) yang mengimplementasikan utilitas tingkat rendah yang dibagikan oleh semua scheduler.

## SchedulerMixin[[diffusers.SchedulerMixin]]

#### diffusers.SchedulerMixin[[diffusers.SchedulerMixin]]

```python
diffusers.SchedulerMixin()
```

[Sumber](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_utils.py#L79)

Kelas dasar untuk semua penjadwal.

[SchedulerMixin](/docs/diffusers/main/id/api/schedulers/overview#diffusers.SchedulerMixin) berisi fungsi-fungsi umum yang dibagikan oleh semua scheduler, seperti fungsionalitas pemuatan dan penyimpanan secara umum.

[ConfigMixin](/docs/diffusers/main/id/api/configuration#diffusers.ConfigMixin) menangani penyimpanan atribut konfigurasi (seperti `num_train_timesteps`) yang diteruskan ke fungsi `__init__` scheduler, dan atribut tersebut dapat diakses melalui `scheduler.config.num_train_timesteps`.

Atribut kelas:
- **_compatibles** (`list[str]`) -- Daftar kelas scheduler yang kompatibel dengan kelas scheduler induk. Gunakan [from_config()](/docs/diffusers/main/id/api/configuration#diffusers.ConfigMixin.from_config) untuk memuat kelas scheduler kompatibel yang berbeda (seharusnya dioverride oleh kelas induk).

#### from_pretrained[[diffusers.SchedulerMixin.from_pretrained]]

```python
from_pretrained(pretrained_model_name_or_path: str | os.PathLike | None = None, subfolder: str | None = None, return_unused_kwargs: bool = False, **kwargs: Any)
```

[Sumber](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_utils.py#L99)

**Parameter:**

pretrained_model_name_or_path (`str` atau `os.PathLike`, *opsional*) : Bisa berupa: - String, *model id* (misalnya `google/ddpm-celebahq-256`) dari model pretrained yang dihosting di Hub. - Path ke *direktori* (misalnya `./my_model_directory`) yang berisi konfigurasi scheduler yang disimpan dengan [save_pretrained()](/docs/diffusers/main/id/api/schedulers/overview#diffusers.SchedulerMixin.save_pretrained).

subfolder (`str`, *opsional*) : Lokasi subfolder dari file model di dalam repositori model yang lebih besar di Hub atau secara lokal.

return_unused_kwargs (`bool`, *opsional*, defaultnya `False`) : Apakah kwargs yang tidak dikonsumsi oleh kelas Python harus dikembalikan atau tidak.

cache_dir (`str` atau `os.PathLike`, *opsional*) : Path ke direktori tempat konfigurasi model pretrained yang diunduh di-cache jika cache standar tidak digunakan.

force_download (`bool`, *opsional*, defaultnya `False`) : Apakah akan memaksa (mengunduh ulang) bobot model dan file konfigurasi, menimpa versi yang di-cache jika ada.

proxies (`dict[str, str]`, *opsional*) : Kamus server proxy yang akan digunakan berdasarkan protokol atau endpoint, misalnya `{'http': 'foo.bar:3128', 'http://hostname': 'foo.bar:4012'}`. Proxy digunakan pada setiap permintaan.

output_loading_info (`bool`, *opsional*, defaultnya `False`) : Apakah akan mengembalikan juga kamus yang berisi kunci yang hilang, kunci yang tidak terduga, dan pesan kesalahan.

local_files_only (`bool`, *opsional*, defaultnya `False`) : Apakah hanya memuat bobot model dan file konfigurasi lokal atau tidak. Jika diatur ke `True`, model tidak akan diunduh dari Hub.

token (`str` atau `bool`, *opsional*) : Token yang digunakan sebagai otorisasi bearer HTTP untuk file jarak jauh. Jika `True`, token yang dihasilkan dari `diffusers-cli login` (disimpan di `~/.huggingface`) akan digunakan.

revision (`str`, *opsional*, defaultnya `"main"`) : Versi model spesifik yang akan digunakan. Bisa berupa nama branch, nama tag, id commit, atau identifikasi apa pun yang diizinkan oleh Git.

**Mengembalikan:** [SchedulerMixin](/docs/diffusers/main/id/api/schedulers/overview#diffusers.SchedulerMixin) atau `tuple[SchedulerMixin, dict[str, Any]]`

Scheduler yang diinstansiasi dari konfigurasi. Jika `return_unused_kwargs` adalah `True`, sebuah tuple dikembalikan di mana elemen kedua adalah kamus dari argumen kata kunci yang tidak digunakan.

Instansiasi scheduler dari file konfigurasi JSON yang sudah ditentukan sebelumnya di direktori lokal atau repositori Hub.

> [!TIP] > Untuk menggunakan model privat atau [model bergerbang](https://huggingface.co/docs/hub/models-gated#gated-models), masuk
dengan `hf > auth login`. Anda juga dapat mengaktifkan mode khusus > ["offline-mode"](https://huggingface.co/diffusers/installation.html#offline-mode) untuk menggunakan metode ini di lingkungan yang > dibatasi firewall.

#### save_pretrained[[diffusers.SchedulerMixin.save_pretrained]]

```python
save_pretrained(save_directory: str | os.PathLike, push_to_hub: bool = False, **kwargs: Any)
```

[Sumber](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_utils.py#L164)

**Parameter:**

save_directory (`str` atau `os.PathLike`) : Direktori tempat file konfigurasi JSON akan disimpan (akan dibuat jika belum ada).

push_to_hub (`bool`, *opsional*, defaultnya `False`) : Apakah model akan didorong ke Hugging Face Hub setelah disimpan. Anda dapat menentukan repositori tujuan dengan `repo_id` (defaultnya adalah nama `save_directory` di namespace Anda).

kwargs (`dict[str, Any]`, *opsional*) : Argumen kata kunci tambahan yang diteruskan ke metode [push_to_hub()](/docs/diffusers/main/id/api/schedulers/overview#diffusers.utils.PushToHubMixin.push_to_hub).

Simpan objek konfigurasi scheduler ke sebuah direktori agar dapat dimuat ulang menggunakan metode kelas [from_pretrained()](/docs/diffusers/main/id/api/schedulers/overview#diffusers.SchedulerMixin.from_pretrained).

## SchedulerOutput[[diffusers.schedulers.scheduling_utils.SchedulerOutput]]

#### diffusers.schedulers.scheduling_utils.SchedulerOutput[[diffusers.schedulers.scheduling_utils.SchedulerOutput]]

```python
diffusers.schedulers.scheduling_utils.SchedulerOutput(prev_sample: Tensor)
```

[Sumber](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_utils.py#L66)

**Parameter:**

prev_sample (`torch.Tensor` dengan bentuk `(batch_size, num_channels, height, width)` untuk gambar) : Sampel `(x_{t-1})` yang dihitung dari timestep sebelumnya. `prev_sample` harus digunakan sebagai input model berikutnya dalam loop denoising.

Kelas dasar untuk keluaran dari fungsi `step` sebuah scheduler.

## KarrasDiffusionSchedulers

`KarrasDiffusionSchedulers` adalah generalisasi luas dari scheduler di 🤗 Diffusers. Scheduler dalam kelas ini dibedakan pada tingkat tinggi oleh strategi sampling noise, jenis jaringan dan scaling, strategi pelatihan, serta cara loss ditimbang.

Berbagai scheduler dalam kelas ini, tergantung pada jenis solver persamaan diferensial biasa (ODE), termasuk dalam taksonomi di atas dan menyediakan abstraksi yang baik untuk desain scheduler utama yang diimplementasikan dalam 🤗 Diffusers. Scheduler dalam kelas ini diberikan [di sini](https://github.com/huggingface/diffusers/blob/a69754bb879ed55b9b6dc9dd0b3cf4fa4124c765/src/diffusers/schedulers/scheduling_utils.py#L32).

## PushToHubMixin[[diffusers.utils.PushToHubMixin]]

#### diffusers.utils.PushToHubMixin[[diffusers.utils.PushToHubMixin]]

```python
diffusers.utils.PushToHubMixin()
```

[Sumber](https://github.com/huggingface/diffusers/blob/main/src/diffusers/utils/hub_utils.py#L491)

Mixin untuk mendorong model, scheduler, atau pipeline ke Hugging Face Hub.

#### push_to_hub[[diffusers.utils.PushToHubMixin.push_to_hub]]

```python
push_to_hub(repo_id: str, commit_message: str | None = None, private: bool | None = None, token: str | None = None, create_pr: bool = False, safe_serialization: bool = True, variant: str | None = None, subfolder: str | None = None)
```

[Sumber](https://github.com/huggingface/diffusers/blob/main/src/diffusers/utils/hub_utils.py#L526)

**Parameter:**

repo_id (`str`) : Nama repositori tempat Anda ingin mendorong file model, scheduler, atau pipeline Anda. Seharusnya berisi nama organisasi Anda saat mendorong ke organisasi. `repo_id` juga bisa berupa path ke direktori lokal.

commit_message (`str`, *opsional*) : Pesan untuk commit saat push. Default ke `"Upload {object}"`.

private (`bool`, *opsional*) : Apakah membuat repo menjadi privat. Jika `None` (default), repo akan menjadi publik kecuali default organisasi adalah privat. Nilai ini diabaikan jika repo sudah ada.

token (`str`, *opsional*) : Token yang digunakan sebagai otorisasi bearer HTTP untuk file jarak jauh. Token yang dihasilkan saat menjalankan `hf auth login` (disimpan di `~/.huggingface`).

create_pr (`bool`, *opsional*, defaultnya `False`) : Apakah akan membuat PR dengan file yang diunggah atau langsung melakukan commit.

safe_serialization (`bool`, *opsional*, defaultnya `True`) : Apakah akan mengonversi bobot model ke format `safetensors` atau tidak.

variant (`str`, *opsional*) : Jika ditentukan, bobot disimpan dalam format `pytorch_model.<variant>.bin`.

Unggah file model, scheduler, atau pipeline ke 🤗 Hugging Face Hub.

Contoh:

```python
from diffusers import UNet2DConditionModel

unet = UNet2DConditionModel.from_pretrained("stabilityai/stable-diffusion-2", subfolder="unet")

# Push the `unet` to your namespace with the name "my-finetuned-unet".
unet.push_to_hub("my-finetuned-unet")

# Push the `unet` to an organization with the name "my-finetuned-unet".
unet.push_to_hub("your-org/my-finetuned-unet")
```

