# EDMDPMSolverMultistepScheduler

`EDMDPMSolverMultistepScheduler` هو [صياغة Karras](https://huggingface.co/papers/2206.00364) لـ `DPMSolverMultistepScheduler`، وهو مجدول متعدد الخطوات من [DPM-Solver: A Fast ODE Solver for Diffusion Probabilistic Model Sampling in Around 10 Steps](https://huggingface.co/papers/2206.00927) و [DPM-Solver++: Fast Solver for Guided Sampling of Diffusion Probabilistic Models](https://huggingface.co/papers/2211.01095) من تأليف Cheng Lu و Yuhao Zhou و Fan Bao و Jianfei Chen و Chongxuan Li و Jun Zhu.

DPMSolver (والنسخة المحسّنة DPMSolver++) هو محلل سريع مخصص من الرتبة العالية لمعادلات التفاضلية العادية للانتشار مع ضمان لرتبة التقارب. عمليًا، يمكن لعينة DPMSolver باستخدام 20 خطوة فقط توليد عينات عالية الجودة، كما يمكنها توليد عينات جيدة جدًا حتى في 10 خطوات.

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

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/schedulers/scheduling_edm_dpmsolver_multistep.py#L28)

**المعاملات:**

sigma_min (`float`، *اختياري*، القيمة الافتراضية 0.002) : الحد الأدنى لحجم الضوضاء في جدول سيجما. تم ضبطه على 0.002 في ورقة EDM [1]؛ النطاق المعقول هو [0، 10].

sigma_max (`float`، *اختياري*، القيمة الافتراضية 80.0) : أقصى حجم للضوضاء في جدول سيجما. تم ضبط هذه القيمة على 80.0 في ورقة EDM [1]؛ والنطاق المعقول هو [0.2، 80.0].

sigma_data (`float`، *اختياري*، القيمة الافتراضية 0.5) : الانحراف المعياري لتوزيع البيانات. تم ضبطه على 0.5 في ورقة EDM [1].

sigma_schedule (`str`، *اختياري*، القيمة الافتراضية `karras`) : جدول سيجما لحساب `sigmas`. بشكل افتراضي، نستخدم الجدول المقدم في ورقة EDM (https://huggingface.co/papers/2206.00364). القيمة المقبولة الأخرى هي "exponential". تم دمج الجدول الأسي في هذا النموذج: https://huggingface.co/stabilityai/cosxl.

num_train_timesteps (`int`، القيمة الافتراضية 1000) : عدد خطوات الانتشار لتدريب النموذج.

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`، *اختياري*، القيمة الافتراضية 7.0) : معامل rho في جدول Karras sigma. تم ضبطه على 7.0 في ورقة EDM [1].

solver_order (`int`، القيمة الافتراضية 2) : ترتيب DPMSolver الذي يمكن أن يكون `1` أو `2` أو `3`. يُوصى باستخدام `solver_order=2` للعينة الموجَّهة، و`solver_order=3` للعينة غير المشروطة.

thresholding (`bool`، القيمة الافتراضية `False`) : ما إذا كان سيتم استخدام طريقة "العتبة الديناميكية". هذه الطريقة غير مناسبة لنماذج الانتشار في الفضاء الكامن مثل Stable Diffusion.

dynamic_thresholding_ratio (`float`، القيمة الافتراضية 0.995) : نسبة طريقة العتبة الديناميكية. صالحة فقط عندما يكون `thresholding=True`.

sample_max_value (`float`، القيمة الافتراضية 1.0) : قيمة العتبة الخاصة بالعتبة الديناميكية. صالحة فقط عندما يكون `thresholding=True` و`algorithm_type="dpmsolver++"`.

algorithm_type (`str`، الافتراضي `dpmsolver++`) : نوع الخوارزمية للمُحلِّل؛ يمكن أن يكون `dpmsolver++` أو `sde-dpmsolver++`. يُنفِّذ النوع `dpmsolver++` الخوارزميات الواردة في ورقة [DPMSolver++](https://huggingface.co/papers/2211.01095). يُوصى باستخدام `dpmsolver++` أو `sde-dpmsolver++` مع `solver_order=2` لأخذ العينات الموجَّهة كما في Stable Diffusion.

solver_type (`str`، الافتراضي `midpoint`) : نوع المُحلِّل لمُحلِّل الرتبة الثانية؛ يمكن أن يكون `midpoint` أو `heun`. يؤثر نوع المُحلِّل قليلاً على جودة العينة، خاصةً عند استخدام عدد صغير من الخطوات. يُوصى باستخدام مُحلِّلات `midpoint`.

lower_order_final (`bool`، القيمة الافتراضية `True`) : ما إذا كان سيتم استخدام محللات من رتبة أدنى في الخطوات النهائية. صالح فقط لعدد خطوات الاستدلال < 15. يمكن أن يثبّت أخذ العينات لـ DPMSolver عند عدد خطوات < 15، خاصةً عند عدد خطوات <= 10.

euler_at_final (`bool`، القيمة الافتراضية `False`) : ما إذا كان سيتم استخدام طريقة أويلر في الخطوة النهائية. إنها موازنة بين الاستقرار العددي وغنى التفاصيل. يمكن أن يُثبّت هذا عملية أخذ العينات لنسخة DPMSolver المعتمدة على المعادلات التفاضلية العشوائية (SDE) عند استخدام عدد صغير من خطوات الاستدلال، لكنه قد يؤدي أحيانًا إلى ضبابية في الصورة.

final_sigmas_type (`str`، القيمة الافتراضية `"zero"`) : القيمة النهائية لـ`sigma` في جدول الضوضاء أثناء عملية أخذ العينات. إذا كانت `"sigma_min"`، فإن قيمة sigma النهائية هي نفسها آخر قيمة sigma في جدول التدريب. إذا كانت `zero`، تُضبط قيمة sigma النهائية على 0.

يُنفّذ `EDMDPMSolverMultistepScheduler` في صياغة EDM كما وردت في Karras et al. 2022 [1]. يُعدّ `EDMDPMSolverMultistepScheduler` محلّلاً عالي الترتيب مخصصاً وسريعاً لمعادلات ODE الانتشارية.

[1] كاراس، تيرو، وآخرون. “إيضاح مساحة التصميم للنماذج التوليدية القائمة على الانتشار.” https://huggingface.co/papers/2206.00364

يرث هذا النموذج من [SchedulerMixin](/docs/diffusers/v0.43.0/ar/api/schedulers/overview#diffusers.SchedulerMixin) و [ConfigMixin](/docs/diffusers/v0.43.0/ar/api/configuration#diffusers.ConfigMixin). راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع مجدولات التعلم، مثل التحميل والحفظ.

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

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

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/schedulers/scheduling_edm_dpmsolver_multistep.py#L808)

**المعاملات:**

original_samples (`torch.Tensor`) : العينات الأصلية التي سيتم إضافة الضوضاء إليها.

noise (`torch.Tensor`) : متجه الضوضاء الذي يُضاف إلى العينات الأصلية.

timesteps (`torch.Tensor`) : الخطوات الزمنية التي يُضاف عندها الضوضاء، مما يحدد مستوى الضوضاء من الجدول الزمني.

**يعيد:** `torch.Tensor`

العينات الضوضائية مع ضوضاء مضافة مُقيّمة وفقًا لجدول خطوات الزمن.

أضف الضوضاء إلى العينات الأصلية وفقًا لجدول الضوضاء عند خطوات الزمن المحددة.

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

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

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/schedulers/scheduling_edm_dpmsolver_multistep.py#L471)

**المعاملات:**

model_output (`torch.Tensor`) : المخرجات المباشرة من نموذج الانتشار المُتعلَّم.

sample (`torch.Tensor`) : نسخة حالية من عينة تم إنشاؤها بواسطة عملية الانتشار.

**يعيد:** `torch.Tensor`

مخرجات النموذج المحوّل.

حوّل مخرجات النموذج إلى النوع المقابل الذي يحتاجه خوارزمية DPMSolver/DPMSolver++. صُمِّم DPM-Solver لتقطيع تكامل نموذج التنبؤ بالضوضاء، بينما صُمِّم DPM-Solver++ لتقطيع تكامل نموذج التنبؤ بالبيانات.

> [!TIP] > الخوارزمية ونوع النموذج منفصلان. يمكنك استخدام DPMSolver أو DPMSolver++ لكليهما
الضوضاء > التنبؤ ونماذج التنبؤ بالبيانات.

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

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/schedulers/scheduling_edm_dpmsolver_multistep.py#L502)

**المعاملات:**

model_output (`torch.Tensor`) : المخرجات المباشرة من نموذج الانتشار المُتعلَّم.

sample (`torch.Tensor`) : نسخة حالية من عينة تم إنشاؤها بواسطة عملية الانتشار.

noise (`torch.Tensor`، *اختياري*) : متجه الضوضاء الذي يُضاف إلى العينات الأصلية.

**يعيد:** `torch.Tensor`

المصفوفة العينة عند خطوة الزمن السابقة.

خطوة واحدة لحلّ DPMSolver من الدرجة الأولى (المكافئ لـ DDIM).

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

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/schedulers/scheduling_edm_dpmsolver_multistep.py#L673)

**المعاملات:**

timestep (`int` أو `torch.Tensor`) : خطوة الزمن التي سيتم إيجاد فهرسها.

schedule_timesteps (`torch.Tensor`، *اختياري*) : جدول خطوات الزمن للبحث فيه. إذا كان `None`، يتم استخدام `self.timesteps`.

**يعيد:** `int`

مؤشر خطوة الزمن في الجدول الزمني.

حدد فهرس خطوة زمنية معينة في الجدول الزمني.

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

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/schedulers/scheduling_edm_dpmsolver_multistep.py#L545)

**المعاملات:**

model_output_list (`list[torch.Tensor]`) : المخرجات المباشرة من نموذج الانتشار المُتعلَّم عند خطوات الزمن الحالية واللاحقة.

sample (`torch.Tensor`) : نسخة حالية من عينة تم إنشاؤها بواسطة عملية الانتشار.

noise (`torch.Tensor`، *اختياري*) : متجه الضوضاء الذي يُضاف إلى العينات الأصلية.

**يعيد:** `torch.Tensor`

المصفوفة العينة عند خطوة الزمن السابقة.

خطوة واحدة لحلّ DPMSolver متعدد الخطوات من الدرجة الثانية.

#### 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[torch.Tensor], sample: Tensor)
```

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/schedulers/scheduling_edm_dpmsolver_multistep.py#L618)

**المعاملات:**

model_output_list (`list[torch.Tensor]`) : المخرجات المباشرة من نموذج الانتشار المُتعلَّم عند خطوات الزمن الحالية واللاحقة.

sample (`torch.Tensor`) : نسخة حالية من عينة تم إنشاؤها بواسطة عملية الانتشار.

**يعيد:** `torch.Tensor`

المصفوفة العينة عند خطوة الزمن السابقة.

خطوة واحدة لحلّ DPMSolver متعدد الخطوات من الرتبة الثالثة.

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

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

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/schedulers/scheduling_edm_dpmsolver_multistep.py#L180)

**المعاملات:**

sample (`torch.Tensor`) : متجه العينة المُدخل الذي يجب تجهيزه مسبقًا.

sigma (`float` أو `torch.Tensor`) : القيمة الحالية لسيجما (مستوى الضوضاء).

**يعيد:** `torch.Tensor`

عينة الإدخال المُقيَّمة.

جهّز عينة الإدخال مسبقًا عن طريق تحجيمها وفقًا لصياغة EDM.

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

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

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/schedulers/scheduling_edm_dpmsolver_multistep.py#L199)

**المعاملات:**

sigma (`float` أو `torch.Tensor`) : قيمة سيجما (مستوى الضوضاء) التي سيتم إعدادها مسبقًا.

**يعيد:** `torch.Tensor`

قيمة الضوضاء المُعدَّلة المُحسوبة على أنها `0.25 * log(sigma)`.

قم بتكييف مستوى الضوضاء من خلال تطبيق تحويل لوغاريتمي.

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

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

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/schedulers/scheduling_edm_dpmsolver_multistep.py#L219)

**المعاملات:**

sample (`torch.Tensor`) : متجه العينة المُدخل.

model_output (`torch.Tensor`) : المخرجات المباشرة من نموذج الانتشار المُتعلَّم.

sigma (`float` أو `torch.Tensor`) : القيمة الحالية لسيجما (مستوى الضوضاء).

**يعيد:** `torch.Tensor`

العينة المُزالة الضوضاء المحسوبة عن طريق دمج اتصال التخطي وتوسيط المخرجات.

قم بإعداد مخرجات النموذج مسبقاً وفقاً لصياغة EDM.

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

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

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/schedulers/scheduling_edm_dpmsolver_multistep.py#L255)

**المعاملات:**

sample (`torch.Tensor`) : متجه العينة المُدخل.

timestep (`float` أو `torch.Tensor`) : الخطوة الزمنية الحالية في سلسلة الانتشار.

**يعيد:** `torch.Tensor`

عينة إدخال مُقيّمة.

قم بتوسيع مدخلات نموذج إزالة الضوضاء لتتوافق مع خوارزمية Euler. يضمن ذلك إمكانية الاستبدال مع المجدولات التي تحتاج إلى توسيع مدخلات نموذج إزالة الضوضاء اعتمادًا على خطوة الزمن الحالية.

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

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

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/schedulers/scheduling_edm_dpmsolver_multistep.py#L169)

**المعاملات:**

begin_index (`int`، القيمة الافتراضية `0`) : فهرس البداية للمجدول.

يحدد الفهرس الابتدائي للمجدول. يجب تشغيل هذه الدالة من خط الأنابيب قبل الاستدلال.

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

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

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/schedulers/scheduling_edm_dpmsolver_multistep.py#L279)

**المعاملات:**

num_inference_steps (`int`) : عدد خطوات الانتشار المستخدمة عند توليد العينات باستخدام نموذج مُدرَّب مسبقًا.

device (`str` أو `torch.device`، *اختياري*) : الجهاز الذي يجب نقل خطوات الزمن (timesteps) إليه. إذا كان `None`، فلن يتم نقل خطوات الزمن.

يحدد الخطوات الزمنية المنفصلة المستخدمة لسلسلة الانتشار (لتُنفَّذ قبل الاستدلال).

#### خطوة[[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)
```

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/schedulers/scheduling_edm_dpmsolver_multistep.py#L726)

**المعاملات:**

model_output (`torch.Tensor`) : المخرجات المباشرة من نموذج الانتشار المُتعلَّم.

timestep (`int`) : الخطوة الزمنية المنفصلة الحالية في سلسلة الانتشار.

sample (`torch.Tensor`) : نسخة حالية من عينة تم إنشاؤها بواسطة عملية الانتشار.

generator (`torch.Generator`، *اختياري*) : مولّد أرقام عشوائية.

return_dict (`bool`) : ما إذا كان يجب إرجاع [SchedulerOutput](/docs/diffusers/v0.43.0/ar/api/schedulers/ipndm#diffusers.schedulers.scheduling_utils.SchedulerOutput) أو `tuple` أم لا.

**يعيد:** [SchedulerOutput](/docs/diffusers/v0.43.0/ar/api/schedulers/ipndm#diffusers.schedulers.scheduling_utils.SchedulerOutput) أو `tuple`

إذا كانت قيمة `True`، يُعاد [SchedulerOutput](/docs/diffusers/v0.43.0/ar/api/schedulers/ipndm#diffusers.schedulers.scheduling_utils.SchedulerOutput)، وإلا يُعاد tuple يكون العنصر الأول فيه tensor العينة.

تنبّأ بالعيّنة من خطوة الزمن السابقة عن طريق عكس معادلة ستوكستك التفاضلية (SDE). تنقل هذه الدالة العيّنة باستخدام محلّل DPMSolver متعدد الخطوات.

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

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/schedulers/scheduling_utils.py#L66)

**المعاملات:**

prev_sample (`torch.Tensor` من الشكل `(batch_size, num_channels, height, width)` للصور) : العينة المحسوبة `(x_{t-1})` لخطوة الزمن السابقة. يجب استخدام `prev_sample` كمدخل للنموذج التالي في حلقة إزالة الضوضاء.

الفئة الأساسية لمخرجات دالة `step` في المجدول.

