# المجدولون

🤗 يوفر Diffusers العديد من دوال المجدول (scheduler) لعملية الانتشار. يستقبل المجدول مخرجات النموذج (العينة التي تعمل عليها عملية الانتشار) وخطوة زمنية (timestep) ليعيد عينة منزوعة الضوضاء. وتكمن أهمية الخطوة الزمنية في أنها تحدد موقع الخطوة ضمن عملية الانتشار؛ إذ يتم توليد البيانات عبر التكرار للأمام لعدد *n* من الخطوات الزمنية، بينما يحدث الاستدلال (inference) عبر التراجع للخلف عبر الخطوات الزمنية. بناءً على الخطوة الزمنية، قد يكون المجدول *منفصلا* (discrete) وفي هذه الحالة تكون الخطوة الزمنية من نوع `int`، أو *مستمرا* (continuous) وفي هذه الحالة تكون الخطوة الزمنية من نوع `float`.

يعتمد على السياق، يحدد المُجدول كيفية إضافة الضوضاء إلى صورة بشكل تكراري، أو كيفية تحديث عينة بناءً على مخرجات النموذج:

- أثناء *التدريب*، يضيف مُجدول ضوضاء (توجد خوارزميات مختلفة لكيفية إضافة الضوضاء) إلى عينة لتدريب نموذج الانتشار
- أثناء *الاستدلال*، يحدد المجدول كيفية تحديث عينة بناءً على مخرجات نموذج مُدرَّب مسبقًا

تم تنفيذ العديد من المجدولين من مكتبة [k-diffusion](https://github.com/crowsonkb/k-diffusion) بواسطة [Katherine Crowson](https://github.com/crowsonkb/)، كما أنها تُستخدم على نطاق واسع في A1111. لمساعدتك على مطابقة المجدولين من k-diffusion وA1111 مع المجدولين في 🤗 Diffusers، راجع الجدول أدناه:

| A1111/k-diffusion    | 🤗 Diffusers                         | الاستخدام                                                                                                         |
|---------------------|-------------------------------------|---------------------------------------------------------------------------------------------------------------|
| DPM++ 2M            | [DPMSolverMultistepScheduler](/docs/diffusers/main/ar/api/schedulers/multistep_dpm_solver#diffusers.DPMSolverMultistepScheduler)     |                                                                                                               |
| DPM++ 2M Karras     | [DPMSolverMultistepScheduler](/docs/diffusers/main/ar/api/schedulers/multistep_dpm_solver#diffusers.DPMSolverMultistepScheduler)     | مع `use_karras_sigmas=True`                                                                            |
| DPM++ 2M SDE        | [DPMSolverMultistepScheduler](/docs/diffusers/main/ar/api/schedulers/multistep_dpm_solver#diffusers.DPMSolverMultistepScheduler)     | باستخدام `algorithm_type="sde-dpmsolver++"`                                                                  |
| DPM++ 2M SDE Karras | [DPMSolverMultistepScheduler](/docs/diffusers/main/ar/api/schedulers/multistep_dpm_solver#diffusers.DPMSolverMultistepScheduler)     | ابدأ باستخدام `use_karras_sigmas=True` و`algorithm_type="sde-dpmsolver++"`                                     |
| DPM++ 2S a          | N/A                                 | شبيه جدًا بـ `DPMSolverSinglestepScheduler`                         |
| DPM++ 2S a Karras   | N/A                                 | شبيه جدًا بـ `DPMSolverSinglestepScheduler(use_karras_sigmas=True, ...)` |
| DPM++ SDE           | [DPMSolverSinglestepScheduler](/docs/diffusers/main/ar/api/schedulers/singlestep_dpm_solver#diffusers.DPMSolverSinglestepScheduler)    |                                                                                                               |
| DPM++ SDE Karras    | [DPMSolverSinglestepScheduler](/docs/diffusers/main/ar/api/schedulers/singlestep_dpm_solver#diffusers.DPMSolverSinglestepScheduler)    | مع `use_karras_sigmas=True`                                                                            |
| DPM2                | [KDPM2DiscreteScheduler](/docs/diffusers/main/ar/api/schedulers/dpm_discrete#diffusers.KDPM2DiscreteScheduler)          |                                                                                                               |
| DPM2 Karras         | [KDPM2DiscreteScheduler](/docs/diffusers/main/ar/api/schedulers/dpm_discrete#diffusers.KDPM2DiscreteScheduler)          | مع `use_karras_sigmas=True`                                                                            |
| DPM2 a              | [KDPM2AncestralDiscreteScheduler](/docs/diffusers/main/ar/api/schedulers/dpm_discrete_ancestral#diffusers.KDPM2AncestralDiscreteScheduler) |                                                                                                               |
| DPM2 a Karras       | [KDPM2AncestralDiscreteScheduler](/docs/diffusers/main/ar/api/schedulers/dpm_discrete_ancestral#diffusers.KDPM2AncestralDiscreteScheduler) | مع `use_karras_sigmas=True`                                                                            |
| DPM التكيفي        | N/A                                 |                                                                                                               |
| DPM fast            | N/A                                 |                                                                                                               |
| Euler               | [EulerDiscreteScheduler](/docs/diffusers/main/ar/api/schedulers/euler#diffusers.EulerDiscreteScheduler)          |                                                                                                               |
| Euler a             | [EulerAncestralDiscreteScheduler](/docs/diffusers/main/ar/api/schedulers/euler_ancestral#diffusers.EulerAncestralDiscreteScheduler) |                                                                                                               |
| هون                | [HeunDiscreteScheduler](/docs/diffusers/main/ar/api/schedulers/heun#diffusers.HeunDiscreteScheduler)           |                                                                                                               |
| LMS                 | [LMSDiscreteScheduler](/docs/diffusers/main/ar/api/schedulers/lms_discrete#diffusers.LMSDiscreteScheduler)            |                                                                                                               |
| LMS Karras          | [LMSDiscreteScheduler](/docs/diffusers/main/ar/api/schedulers/lms_discrete#diffusers.LMSDiscreteScheduler)            | مع `use_karras_sigmas=True`                                                                            |
| N/A                 | [DEISMultistepScheduler](/docs/diffusers/main/ar/api/schedulers/deis#diffusers.DEISMultistepScheduler)          |                                                                                                               |
| N/A                 | [UniPCMultistepScheduler](/docs/diffusers/main/ar/api/schedulers/unipc#diffusers.UniPCMultistepScheduler)         |                                                                                                               |

## جداول الضوضاء وأنواع الجداول
| A1111/k-diffusion        | 🤗 Diffusers                                                               |
|--------------------------|----------------------------------------------------------------------------|
| Karras                   | مع `use_karras_sigmas=True`                                         |
| sgm_uniform              | init مع `timestep_spacing="trailing"`                                    |
| بسيط                   | init مع `timestep_spacing="trailing"`                                    |
| أُسّي              | init مع `timestep_spacing="linspace"`، `use_exponential_sigmas=True`     |
| بيتا                     | init مع `timestep_spacing="linspace"`، `use_beta_sigmas=True`            |

جميع المجدولين مبنية من الفئة الأساسية [SchedulerMixin](/docs/diffusers/main/ar/api/schedulers/overview#diffusers.SchedulerMixin) التي تنفّذ أدوات منخفضة المستوى مشتركة بين جميع المجدولين.

## SchedulerMixin[[diffusers.SchedulerMixin]]

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

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

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

الفئة الأساسية لجميع مجدولات التعلم.

يتضمن [SchedulerMixin](/docs/diffusers/main/ar/api/schedulers/overview#diffusers.SchedulerMixin) دوالًا مشتركة بين جميع المجدولين، مثل وظائف التحميل والحفظ العامة.

يتولى [ConfigMixin](/docs/diffusers/main/ar/api/configuration#diffusers.ConfigMixin) مهمة تخزين سمات الإعداد (مثل `num_train_timesteps`) التي تُمرَّر إلى دالة `__init__` للمجدول، ويمكن الوصول إلى هذه السمات عبر `scheduler.config.num_train_timesteps`.

خصائص الفئة:
- **_compatibles** (`list[str]`) -- قائمة بفئات المجدول (scheduler) المتوافقة مع فئة المجدول الأصلية. استخدم [from_config()](/docs/diffusers/main/ar/api/configuration#diffusers.ConfigMixin.from_config) لتحميل فئة مجدول متوافقة مختلفة (يجب أن يتم تجاوزها بواسطة الفئة الأصلية).

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

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

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

pretrained_model_name_or_path (`str` أو `os.PathLike`، *اختياري*) : يمكن أن يكون أحد ما يلي: - نص، وهو *معرف النموذج* (مثل `google/ddpm-celebahq-256`) لنموذج مُدرَّب مسبقًا مستضاف على Hub. - مسار إلى *مجلد* (مثل `./my_model_directory`) يحتوي على إعدادات المجدول المحفوظة بواسطة [save_pretrained()](/docs/diffusers/main/ar/api/schedulers/overview#diffusers.SchedulerMixin.save_pretrained).

subfolder (`str`، *اختياري*) : موقع المجلد الفرعي لملف النموذج داخل مستودع نموذج أكبر على Hub أو محليًا.

return_unused_kwargs (`bool`، *اختياري*، الافتراضي `False`) : ما إذا كان يجب إرجاع معاملات kwargs التي لا تستهلكها فئة Python أم لا.

cache_dir (`str` أو `os.PathLike`، *اختياري*) : مسار إلى مجلد حيث تُخزَّن مؤقتًا إعدادات النموذج المُسبق التحميل المُحمَّل إذا لم يُستخدم التخزين المؤقت القياسي.

force_download (`bool`، *اختياري*، القيمة الافتراضية `False`) : ما إذا كان يجب إجبار إعادة تنزيل أوزان النموذج وملفات الإعداد، مع تجاوز النسخ المخزنة مؤقتًا إذا كانت موجودة.

proxies (`dict[str, str]`، *اختياري*) : قاموس لخوادم الوكيل (proxy servers) للاستخدام حسب البروتوكول أو نقطة النهاية، على سبيل المثال، `{'http': 'foo.bar:3128', 'http://hostname': 'foo.bar:4012'}`. تُستخدم هذه الوكلاء في كل طلب.

output_loading_info (`bool`، *اختياري*، القيمة الافتراضية `False`) : ما إذا كان يجب إرجاع قاموس يحتوي على المفاتيح المفقودة والمفاتيح غير المتوقعة ورسائل الأخطاء أم لا.

local_files_only (`bool`، *اختياري*، القيمة الافتراضية `False`) : ما إذا كان سيتم تحميل أوزان النموذج المحلية وملفات الإعداد فقط أم لا. إذا تم ضبطه على `True`، فلن يتم تنزيل النموذج من Hub.

token (`str` أو `bool`، *اختياري*) : الرمز الذي يُستخدم كتوكن مصادقة HTTP bearer للملفات البعيدة. إذا كان `True`، يُستخدم التوكن المولّد من `diffusers-cli login` (المخزَّن في `~/.huggingface`).

revision (`str`، *اختياري*، القيمة الافتراضية `"main"`) : إصدار النموذج المحدد الذي سيتم استخدامه. يمكن أن يكون اسم فرع، أو اسم وسم، أو معرف التزامن، أو أي معرّف مسموح به بواسطة Git.

**يعيد:** [SchedulerMixin](/docs/diffusers/main/ar/api/schedulers/overview#diffusers.SchedulerMixin) أو `tuple[SchedulerMixin, dict[str, Any]]`

المجدول المُثبَّت من الإعداد. إذا كان `return_unused_kwargs` هو `True`، يُعاد tuple يكون عنصره الثاني قاموسًا من معاملات الكلمات المفتاحية غير المستخدمة.

أنشئ جدولة (scheduler) من ملف تكوين JSON مُعرّف مسبقًا في مجلد محلي أو مستودع على Hub.

> [!TIP] > لاستخدام النماذج الخاصة أو [النماذج المُقيَّدة](https://huggingface.co/docs/hub/models-gated#gated-models)، سجّل الدخول
باستخدام `hf > auth login`. يمكنك أيضًا تفعيل وضع ["offline-mode"](https://huggingface.co/diffusers/installation.html#offline-mode) الخاص لاستخدام هذه الطريقة في بيئة محمية بجدار ناري.

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

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

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

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

save_directory (`str` أو `os.PathLike`) : المجلد الذي سيتم حفظ ملف الإعدادات بصيغة JSON فيه (سيتم إنشاؤه إذا لم يكن موجودًا).

push_to_hub (`bool`، *اختياري*، القيمة الافتراضية `False`) : ما إذا كان سيتم رفع نموذجك إلى Hugging Face Hub بعد حفظه. يمكنك تحديد المستودع الذي تريد الرفع إليه باستخدام `repo_id` (سيكون الافتراضي هو اسم `save_directory` ضمن نطاقك).

kwargs (`dict[str, Any]`، *اختياري*) : حُجج إضافية تُمرَّر إلى طريقة [push_to_hub()](/docs/diffusers/main/ar/api/schedulers/overview#diffusers.utils.PushToHubMixin.push_to_hub).

احفظ كائن تكوين المجدول في مجلد بحيث يمكن إعادة تحميله باستخدام طريقة الفئة [from_pretrained()](/docs/diffusers/main/ar/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)
```

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

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

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

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

## KarrasDiffusionSchedulers

`KarrasDiffusionSchedulers` تعميم واسع للمجدولين في 🤗 Diffusers. تتميز المجدولات في هذه الفئة على مستوى عالٍ باستراتيجية أخذ عينات الضوضاء، ونوع الشبكة والتوسع، واستراتيجية التدريب، وكيفية وزن الخسارة.

تندرج المجدولات المختلفة في هذه الفئة، اعتماداً على نوع محلل المعادلات التفاضلية العادية (ODE)، ضمن التصنيف المذكور أعلاه، وتوفر تجريدًا جيدًا لتصميم المجدولات الرئيسية المُنفَّذة في 🤗 Diffusers. يمكن العثور على المجدولات في هذه الفئة [هنا](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()
```

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/utils/hub_utils.py#L491)

مزيج (Mixin) لدفع نموذج أو مجدول أو خط أنابيب إلى 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)
```

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/utils/hub_utils.py#L526)

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

repo_id (`str`) : اسم المستودع الذي تريد دفع ملفات النموذج أو المجدول أو خط الأنابيب إليه. يجب أن يحتوي على اسم مؤسستك عند الدفع إلى مؤسسة. يمكن أن يكون `repo_id` أيضًا مسارًا إلى مجلد محلي.

commit_message (`str`، *اختياري*) : الرسالة التي سيتم الالتزام بها أثناء الدفع. الافتراضي هو `"Upload {object}"`.

private (`bool`، *اختياري*) : ما إذا كان سيتم جعل المستودع خاصًا. إذا كان `None` (الافتراضي)، فسيكون المستودع عامًا ما لم يكن الافتراضي الخاص بالمنظمة هو الخاص. يتم تجاهل هذه القيمة إذا كان المستودع موجودًا بالفعل.

token (`str`، *اختياري*) : الرمز الرمزي (التوكن) المستخدم كترخيص HTTP bearer للملفات البعيدة. الرمز الرمزي الذي يتم إنشاؤه عند تشغيل `hf auth login` (يُخزَّن في `~/.huggingface`).

create_pr (`bool`، *اختياري*، الافتراضي `False`) : ما إذا كان سيتم إنشاء طلب سحب (PR) مع الملفات المرفوعة أم الالتزام مباشرة.

safe_serialization (`bool`، *اختياري*، الافتراضي `True`) : ما إذا كان سيتم تحويل أوزان النموذج إلى صيغة `safetensors` أم لا.

variant (`str`، *اختياري*) : إذا تم تحديده، تُحفظ الأوزان بالتنسيق `pytorch_model.<variant>.bin`.

ارفع ملفات النموذج أو المجدول أو خط الأنابيب إلى 🤗 Hugging Face Hub.

أمثلة:

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

