# EDMDPMSolverMultistepScheduler

`EDMDPMSolverMultistepScheduler`, Cheng Lu, Yuhao Zhou, Fan Bao, Jianfei Chen, Chongxuan Li ve Jun Zhu tarafından geliştirilen [DPM-Solver: A Fast ODE Solver for Diffusion Probabilistic Model Sampling in Around 10 Steps](https://huggingface.co/papers/2206.00927) ve [DPM-Solver++: Fast Solver for Guided Sampling of Diffusion Probabilistic Models](https://huggingface.co/papers/2211.01095) makalelerindeki çok adımlı zamanlayıcı olan `DPMSolverMultistepScheduler`'ın [Karras formülasyonudur](https://huggingface.co/papers/2206.00364).

DPMSolver (ve geliştirilmiş sürüm DPMSolver++) difüzyon ODE'leri için yakınsama derecesi garantisi sunan hızlı, özel bir yüksek dereceli çözücüdür. Deneysel olarak, yalnızca 20 adımla DPMSolver örneklemesi yüksek kaliteli örnekler üretebilir ve 10 adımda bile oldukça iyi örnekler üretebilir.

## EDMDPMSolverMultistepScheduler[[diffusers.EDMDPMSolverMultistepScheduler]]

#### diffusers.EDMDPMSolverMultistepScheduler[[diffusers.EDMDPMSolverMultistepScheduler]]

```python
diffusers.EDMDPMSolverMultistepScheduler(sigma_min: float = 0.002, sigma_max: float = 80.0, sigma_data: float = 0.5, sigma_schedule: typing.Literal['karras', 'exponential'] = 'karras', num_train_timesteps: int = 1000, prediction_type: typing.Literal['epsilon', 'sample', 'v_prediction'] = 'epsilon', rho: float = 7.0, solver_order: int = 2, thresholding: bool = False, dynamic_thresholding_ratio: float = 0.995, sample_max_value: float = 1.0, algorithm_type: typing.Literal['dpmsolver++', 'sde-dpmsolver++'] = 'dpmsolver++', solver_type: typing.Literal['midpoint', 'heun'] = 'midpoint', lower_order_final: bool = True, euler_at_final: bool = False, final_sigmas_type: typing.Literal['zero', 'sigma_min'] = 'zero')
```

[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_edm_dpmsolver_multistep.py#L28)

**Parametreler:**

sigma_min (`float`, *opsiyonel*, varsayılan 0.002) : Sigma zamanlamasındaki minimum gürültü büyüklüğü. Bu değer EDM makalesinde [1] 0.002 olarak ayarlanmıştır; makul aralık [0, 10]'dur.

sigma_max (`float`, *opsiyonel*, varsayılan 80.0) : Sigma zamanlamasındaki maksimum gürültü büyüklüğü. Bu değer EDM makalesinde [1] 80.0 olarak ayarlanmıştır; makul aralık [0.2, 80.0]'dir.

sigma_data (`float`, *opsiyonel*, varsayılan 0.5) : Veri dağılımının standart sapması. Bu değer, EDM makalesinde [1] 0.5 olarak ayarlanmıştır.

sigma_schedule (`str`, *isteğe bağlı*, varsayılan `karras`) : `sigmas` değerlerini hesaplamak için kullanılacak sigma zamanlaması. Varsayılan olarak, EDM makalesinde (https://huggingface.co/papers/2206.00364) tanıtılan zamanlamayı kullanır. Kabul edilen diğer değer "exponential"dir. Üstel zamanlama bu modele dahil edilmiştir: https://huggingface.co/stabilityai/cosxl.

num_train_timesteps (`int`, varsayılan 1000) : Modelin eğitileceği difüzyon adım sayısı.

prediction_type (`str`, defaults to `epsilon`, *optional*) : Prediction type of the scheduler function; can be `epsilon` (predicts the noise of the diffusion process), `sample` (directly predicts the noisy sample`) or `v_prediction` (see section 2.4 of [Imagen Video](https://huggingface.co/papers/2210.02303) paper).

rho (`float`, *isteğe bağlı*, varsayılan 7.0) : Karras sigma zamanlamasındaki rho parametresi. Bu değer, EDM makalesinde [1] 7.0 olarak ayarlanmıştır.

solver_order (`int`, varsayılan 2) : `1` veya `2` veya `3` olabilecek DPMSolver derecesi. Rehberli örneklemeler için `solver_order=2`, koşulsuz örneklemeler için ise `solver_order=3` kullanılması önerilir.

thresholding (`bool`, varsayılan `False`) : "Dinik eşikleme" yönteminin kullanılıp kullanılmayacağını belirtir. Bu, Stable Diffusion gibi gizli uzay difüzyon modelleri için uygun değildir.

dynamic_thresholding_ratio (`float`, varsayılan 0.995) : Dinamik eşikleme yöntemi için oran. Yalnızca `thresholding=True` olduğunda geçerlidir.

sample_max_value (`float`, varsayılan 1.0) : Dinamik eşikleme için eşik değeri. Yalnızca `thresholding=True` ve `algorithm_type="dpmsolver++"` olduğunda geçerlidir.

algorithm_type (`str`, varsayılan `dpmsolver++`) : Çözücü için algoritma türü; `dpmsolver++` veya `sde-dpmsolver++` olabilir. `dpmsolver++` türü, [DPMSolver++](https://huggingface.co/papers/2211.01095) makalesindeki algoritmaları uygular. Stable Diffusion'daki gibi yönlendirilmiş örneklemeler için `dpmsolver++` veya `sde-dpmsolver++` ile `solver_order=2` kullanılması önerilir.

solver_type (`str`, varsayılan `midpoint`) : İkinci mertebe çözücü için çözücü türü; `midpoint` veya `heun` olabilir. Çözücü türü, özellikle adım sayısı az olduğunda örnek kalitesini hafifçe etkiler. `midpoint` çözücülerinin kullanılması önerilir.

lower_order_final (`bool`, varsayılan `True`) : Son adımlarda düşük dereceli çözücülerin kullanılıp kullanılmayacağı. Yalnızca 15'ten az çıkarım adımı için geçerlidir. Bu, özellikle 10 ve altı adımlar için DPMSolver'ın 15'ten az adımlarda örneklemesini kararlı hale getirebilir.

euler_at_final (`bool`, varsayılan `False`) : Son adımda Euler yönteminin kullanılıp kullanılmayacağı. Sayısal kararlılık ile detay zenginliği arasında bir ödünleşimdir. Bu, DPMSolver'ın SDE varyantının örneklemesini, düşük sayıda çıkarım adımı için kararlı hale getirebilir, ancak bazen bulanıklığa yol açabilir.

final_sigmas_type (`str`, varsayılan `"zero"`) : Örnekleme süreci sırasında gürültü zamanlaması için son `sigma` değeri. `"sigma_min"` ise, son sigma, eğitim zamanlamasındaki son sigma ile aynıdır. `zero` ise, son sigma 0 olarak ayarlanır.

Karras et al. 2022 [1]'de sunulan EDM formülasyonunda DPMSolverMultistepScheduler'ı uygular. `EDMDPMSolverMultistepScheduler`, difüzyon ODE'leri için hızlı, özel bir yüksek dereceli çözücüdür.

[1] Karras, Tero, ve diğerleri. "Elucidating the Design Space of Diffusion-Based Generative Models." https://huggingface.co/papers/2206.00364

Bu model [SchedulerMixin](/docs/diffusers/main/tr/api/schedulers/overview#diffusers.SchedulerMixin) ve [ConfigMixin](/docs/diffusers/main/tr/api/configuration#diffusers.ConfigMixin) sınıflarından devralır. Kütüphanenin tüm zamanlayıcılar için yükleme ve kaydetme gibi genel yöntemleri uyguladığı üst sınıf belgelendirmesini kontrol edin.

#### add_noise[[diffusers.EDMDPMSolverMultistepScheduler.add_noise]]

```python
add_noise(original_samples: Tensor, noise: Tensor, timesteps: Tensor)
```

[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_edm_dpmsolver_multistep.py#L808)

**Parametreler:**

original_samples (`torch.Tensor`) : Gürültü eklenecek orijinal örnekler.

noise (`torch.Tensor`) : Orijinal örneklerin üzerine eklenecek gürültü tensörü.

timesteps (`torch.Tensor`) : Gürültünün ekleneceği zaman adımları, zaman çizelgesinden gürültü seviyesini belirler.

**Dönüş:** `torch.Tensor`

Zaman adımı zamanlamasına göre ölçeklendirilen eklenen gürültüye sahip gürültülü örnekler.

Belirtilen zaman adımlarındaki gürültü planına göre orijinal örneklerin gürültü ekleyin.

#### convert_model_output[[diffusers.EDMDPMSolverMultistepScheduler.convert_model_output]]

```python
convert_model_output(model_output: Tensor, sample: Tensor)
```

[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_edm_dpmsolver_multistep.py#L471)

**Parametreler:**

model_output (`torch.Tensor`) : Öğrenen difüzyon modelinden gelen doğrudan çıktı.

sample (`torch.Tensor`) : Difüzyon süreci tarafından oluşturulan bir örneğin mevcut bir örneği.

**Dönüş:** `torch.Tensor`

Dönüştürülen model çıktısı.

Model çıktısını, DPMSolver/DPMSolver++ algoritmasının gerektirdiği ilgili tipe dönüştürün. DPM-Solver, gürültü tahmin modelinin bir integralini ayrıklaştırmak için tasarlanmıştır ve DPM-Solver++, veri tahmin modelinin bir integralini ayrıklaştırmak için tasarlanmıştır.

> [!TIP] > Algoritma ve model tipi birbirinden bağımsızdır. Her ikisi için de DPMSolver veya DPMSolver++ kullanabilirsiniz
noise > tahmin ve veri tahmin modelleri.

#### dpm_solver_first_order_update[[diffusers.EDMDPMSolverMultistepScheduler.dpm_solver_first_order_update]]

```python
dpm_solver_first_order_update(model_output: Tensor, sample: Tensor, noise: typing.Optional[torch.Tensor] = None)
```

[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_edm_dpmsolver_multistep.py#L502)

**Parametreler:**

model_output (`torch.Tensor`) : Öğrenen difüzyon modelinden gelen doğrudan çıktı.

sample (`torch.Tensor`) : Difüzyon süreci tarafından oluşturulan bir örneğin mevcut bir örneği.

noise (`torch.Tensor`, *isteğe bağlı*) : Orijinal örneklerin üzerine eklenecek gürültü tensörü.

**Dönüş:** `torch.Tensor`

Önceki zaman adımındaki örnek tensör.

Birinci dereceden DPMSolver için tek adım (DDIM ile eşdeğer).

#### index_for_timestep[[diffusers.EDMDPMSolverMultistepScheduler.index_for_timestep]]

```python
index_for_timestep(timestep: typing.Union[int, torch.Tensor], schedule_timesteps: typing.Optional[torch.Tensor] = None)
```

[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_edm_dpmsolver_multistep.py#L673)

**Parametreler:**

timestep (`int` veya `torch.Tensor`) : İndeksini bulmak istediğiniz zaman adımı.

schedule_timesteps (`torch.Tensor`, *isteğe bağlı*) : Aranacak zaman adımı zamanlaması. `None` ise `self.timesteps` kullanılır.

**Dönüş:** `int`

Zaman adımı planındaki zaman adımının indeksi.

Zamanlamadaki (schedule) belirli bir zaman adımının (timestep) indeksini bulun.

#### multistep_dpm_solver_second_order_update[[diffusers.EDMDPMSolverMultistepScheduler.multistep_dpm_solver_second_order_update]]

```python
multistep_dpm_solver_second_order_update(model_output_list: typing.List[torch.Tensor], sample: Tensor, noise: typing.Optional[torch.Tensor] = None)
```

[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_edm_dpmsolver_multistep.py#L545)

**Parametreler:**

model_output_list (`list[torch.Tensor]`) : Öğrenen difüzyon modelinin mevcut ve sonraki zaman adımlarındaki doğrudan çıktıları.

sample (`torch.Tensor`) : Difüzyon süreci tarafından oluşturulan bir örneğin mevcut bir örneği.

noise (`torch.Tensor`, *isteğe bağlı*) : Orijinal örneklerin üzerine eklenecek gürültü tensörü.

**Dönüş:** `torch.Tensor`

Önceki zaman adımındaki örnek tensör.

İkinci mertebeden çok adımlı DPMSolver için tek adım.

#### multistep_dpm_solver_third_order_update[[diffusers.EDMDPMSolverMultistepScheduler.multistep_dpm_solver_third_order_update]]

```python
multistep_dpm_solver_third_order_update(model_output_list: list, sample: Tensor)
```

[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_edm_dpmsolver_multistep.py#L618)

**Parametreler:**

model_output_list (`list[torch.Tensor]`) : Öğrenen difüzyon modelinin mevcut ve sonraki zaman adımlarındaki doğrudan çıktıları.

sample (`torch.Tensor`) : Difüzyon süreci tarafından oluşturulan bir örneğin mevcut bir örneği.

**Dönüş:** `torch.Tensor`

Önceki zaman adımındaki örnek tensör.

Üçüncü dereceden çok adımlı DPMSolver için tek adım.

#### precondition_inputs[[diffusers.EDMDPMSolverMultistepScheduler.precondition_inputs]]

```python
precondition_inputs(sample: Tensor, sigma: typing.Union[float, torch.Tensor])
```

[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_edm_dpmsolver_multistep.py#L180)

**Parametreler:**

sample (`torch.Tensor`) : Ön koşullandırılacak girdi örnek tensörü.

sigma (`float` veya `torch.Tensor`) : Güncel sigma (gürültü seviyesi) değeri.

**Dönüş:** `torch.Tensor`

Ölçeklendirilmiş giriş örneği.

Giriş örneğini, EDM formülasyonuna göre ölçekleyerek ön koşullandırın.

#### precondition_noise[[diffusers.EDMDPMSolverMultistepScheduler.precondition_noise]]

```python
precondition_noise(sigma: typing.Union[float, torch.Tensor])
```

[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_edm_dpmsolver_multistep.py#L199)

**Parametreler:**

sigma (`float` veya `torch.Tensor`) : Ön koşullandırılacak sigma (gürültü seviyesi) değeri.

**Dönüş:** `torch.Tensor`

`0.25 * log(sigma)` olarak hesaplanan ön koşullandırılmış gürültü değeri.

Gürültü seviyesini, logaritmik bir dönüşüm uygulayarak ön koşullandırın.

#### precondition_outputs[[diffusers.EDMDPMSolverMultistepScheduler.precondition_outputs]]

```python
precondition_outputs(sample: Tensor, model_output: Tensor, sigma: typing.Union[float, torch.Tensor])
```

[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_edm_dpmsolver_multistep.py#L219)

**Parametreler:**

sample (`torch.Tensor`) : Girdi örnek tensörü.

model_output (`torch.Tensor`) : Öğrenen difüzyon modelinden gelen doğrudan çıktı.

sigma (`float` veya `torch.Tensor`) : Güncel sigma (gürültü seviyesi) değeri.

**Dönüş:** `torch.Tensor`

Atlamalı bağlantı ve çıktı ölçeklendirmesini birleştirerek hesaplanan gürültüden arındırılmış örnek.

Model çıktılarını EDM formülasyonuna göre ön koşullandırın.

#### scale_model_input[[diffusers.EDMDPMSolverMultistepScheduler.scale_model_input]]

```python
scale_model_input(sample: Tensor, timestep: typing.Union[float, torch.Tensor])
```

[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_edm_dpmsolver_multistep.py#L255)

**Parametreler:**

sample (`torch.Tensor`) : Girdi örnek tensörü.

timestep (`float` veya `torch.Tensor`) : Difüzyon zincirindeki mevcut zaman adımı.

**Dönüş:** `torch.Tensor`

Ölçeklendirilmiş bir girdi örneği.

Gürültü azaltma modelinin girdisini Euler algoritmasıyla eşleşecek şekilde ölçeklendirir. Mevcut zaman adımına bağlı olarak gürültü azaltma modelinin girdisini ölçeklendirmesi gereken zamanlayıcılarla değiştirilebilirliği sağlar.

#### set_begin_index[[diffusers.EDMDPMSolverMultistepScheduler.set_begin_index]]

```python
set_begin_index(begin_index: int = 0)
```

[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_edm_dpmsolver_multistep.py#L169)

**Parametreler:**

begin_index (`int`, varsayılan `0`) : Zamanlayıcının başlangıç indeksi.

Zamanlayıcının başlangıç indeksini ayarlar. Bu işlev, çıkarım (inference) öncesinde pipeline'dan çalıştırılmalıdır.

#### set_timesteps[[diffusers.EDMDPMSolverMultistepScheduler.set_timesteps]]

```python
set_timesteps(num_inference_steps: int = None, device: typing.Union[str, torch.device, NoneType] = None)
```

[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_edm_dpmsolver_multistep.py#L279)

**Parametreler:**

num_inference_steps (`int`) : Ön eğitilmiş bir modelle örnekler oluşturulurken kullanılan difüzyon adım sayısı.

device (`str` veya `torch.device`, *opsiyonel*) : Timestep'lerin taşınacağı cihaz. `None` ise timestep'ler taşınmaz.

Difüzyon zinciri için kullanılan ayrık zaman adımlarını ayarlar (çalıştırılmadan önce çıkarım yapılmalıdır).

#### adım[[diffusers.EDMDPMSolverMultistepScheduler.step]]

```python
step(model_output: Tensor, timestep: typing.Union[int, torch.Tensor], sample: Tensor, generator: typing.Optional[torch.Generator] = None, return_dict: bool = True)
```

[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_edm_dpmsolver_multistep.py#L726)

**Parametreler:**

model_output (`torch.Tensor`) : Öğrenen difüzyon modelinden gelen doğrudan çıktı.

timestep (`int`) : Difüzyon zincirindeki mevcut ayrık zaman adımı.

sample (`torch.Tensor`) : Difüzyon süreci tarafından oluşturulan bir örneğin mevcut bir örneği.

generator (`torch.Generator`, *isteğe bağlı*) : Rastgele sayı üreteci.

return_dict (`bool`) : [SchedulerOutput](/docs/diffusers/main/tr/api/schedulers/ipndm#diffusers.schedulers.scheduling_utils.SchedulerOutput) mu yoksa `tuple` mu döndürüleceğini belirtir.

**Dönüş:** [SchedulerOutput](/docs/diffusers/main/tr/api/schedulers/ipndm#diffusers.schedulers.scheduling_utils.SchedulerOutput) veya `tuple`

return_dict `True` ise [SchedulerOutput](/docs/diffusers/main/tr/api/schedulers/ipndm#diffusers.schedulers.scheduling_utils.SchedulerOutput) döndürülür, aksi halde bir tuple döndürülür ve bu tuple'ın ilk öğesi örnek tensörüdür.

Önceki zaman adımından örneklemeyi SDE'yi tersine çevirerek tahmin edin. Bu fonksiyon, örneklemeyi çok adımlı DPMSolver ile ilerletir.

## 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)
```

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

**Parametreler:**

prev_sample (`torch.Tensor`, görüntüler için `(batch_size, num_channels, height, width)` boyutunda) : Önceki zaman adımının hesaplanan `(x_{t-1})` örneği. `prev_sample`, gürültü azaltma döngüsünde bir sonraki model girdisi olarak kullanılmalıdır.

Bir zamanlayıcının `step` işlevinin çıktısı için temel sınıf.

