# PEFT

يدعم Diffusers تحميل المُكيّفات (adapters) مثل [LoRA](../../tutorials/using_peft_for_inference) باستخدام مكتبة [PEFT](https://huggingface.co/docs/peft/index) من خلال فئة [PeftAdapterMixin](/docs/diffusers/main/ar/api/loaders/peft#diffusers.loaders.PeftAdapterMixin). وهذا يتيح لفئات النمذجة في Diffusers مثل [UNet2DConditionModel](/docs/diffusers/main/ar/api/models/unet2d-cond#diffusers.UNet2DConditionModel) و[SD3Transformer2DModel](/docs/diffusers/main/ar/api/models/sd3_transformer2d#diffusers.SD3Transformer2DModel) العمل مع مُكيّف.

> [!TIP]
> راجع شروحات [الاستدلال باستخدام PEFT](../../tutorials/using_peft_for_inference) للحصول على نظرة عامة حول كيفية استخدام PEFT في Diffusers للاستدلال.

## PeftAdapterMixin[[diffusers.loaders.PeftAdapterMixin]]

#### diffusers.loaders.PeftAdapterMixin[[diffusers.loaders.PeftAdapterMixin]]

```python
diffusers.loaders.PeftAdapterMixin()
```

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/loaders/peft.py#L62)

فئة تحتوي على جميع الدوال الخاصة بتحميل واستخدام أوزان المحوِّلات (adapters) المدعومة في مكتبة PEFT. لمزيد من التفاصيل حول المحوِّلات وحقنها في النموذج الأساسي، راجع [التوثيق](https://huggingface.co/docs/peft/index) الخاص بـ PEFT.

قم بتثبيت أحدث إصدار من PEFT، واستخدم هذا المكوّن المدمج (mixin) للقيام بما يلي:

- إرفاق محوِّلات جديدة في النموذج.
- إرفاق عدة محددات وتفعيلها/تعطيلها بشكل متكرر.
- تفعيل/تعطيل جميع المُكيّفات من النموذج.
- احصل على قائمة بالمُكيِّفات النشطة.

#### active_adapters[[diffusers.loaders.PeftAdapterMixin.active_adapters]]

```python
active_adapters()
```

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/loaders/peft.py#L652)

يحصل على القائمة الحالية للمُكيِّفات النشطة للنموذج.

إذا لم تكن على دراية بالمُكيِّفات (Adapters) وطرق PEFT، ندعوك إلى قراءة المزيد عنها في [التوثيق](https://huggingface.co/docs/peft) الخاص بـ PEFT.

#### add_adapter[[diffusers.loaders.PeftAdapterMixin.add_adapter]]

```python
add_adapter(adapter_config, adapter_name: str = 'default')
```

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/loaders/peft.py#L518)

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

adapter_config (`[~peft.PeftConfig]`) : إعدادات المُكيّف الذي سيتم إضافته؛ المُكيّفات المدعومة هي طرق الضبط غير البادئة (non-prefix tuning) و prompts التكيفية (adaption prompt).

adapter_name (`str`، *اختياري*، القيمة الافتراضية `"default"`) : اسم المُكيّف (adapter) الذي سيتم إضافته. إذا لم يتم تمرير اسم، فسيتم تعيين اسم افتراضي للمُكيّف.

يضيف مُكيّفًا جديدًا إلى النموذج الحالي للتدريب. إذا لم يتم تمرير اسم للمكيّف، يُسند اسم افتراضي للمكيّف لاتباع اتفاقية مكتبة PEFT.

إذا لم تكن على دراية بالمُكيِّفات (Adapters) وطرق PEFT، ندعوك إلى قراءة المزيد عنها في [التوثيق](https://huggingface.co/docs/peft) الخاص بـ PEFT.

#### delete_adapters[[diffusers.loaders.PeftAdapterMixin.delete_adapters]]

```python
delete_adapters(adapter_names: list[str] | str)
```

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/loaders/peft.py#L777)

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

adapter_names (`list[str, str]`) : أسماء (نص واحد أو قائمة نصوص) المُكيّف الذي سيتم حذفه.

احذف طبقات LoRA الخاصة بالمُكيّف من النموذج الأساسي.

مثال:

```py
from diffusers import AutoPipelineForText2Image
import torch

pipeline = AutoPipelineForText2Image.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16
).to("cuda")
pipeline.load_lora_weights(
    "jbilcke-hf/sdxl-cinematic-1", weight_name="pytorch_lora_weights.safetensors", adapter_names="cinematic"
)
pipeline.unet.delete_adapters("cinematic")
```

#### disable_adapters[[diffusers.loaders.PeftAdapterMixin.disable_adapters]]

```python
disable_adapters()
```

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/loaders/peft.py#L607)

تعطيل جميع المُكيّفات (adapters) المرتبطة بالنموذج والعودة إلى الاستدلال باستخدام النموذج الأساسي فقط.

إذا لم تكن على دراية بالمُكيِّفات (Adapters) وطرق PEFT، ندعوك إلى قراءة المزيد عنها في [التوثيق](https://huggingface.co/docs/peft) الخاص بـ PEFT.

#### disable_lora[[diffusers.loaders.PeftAdapterMixin.disable_lora]]

```python
disable_lora()
```

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/loaders/peft.py#L731)

يعطّل طبقات LoRA النشطة في النموذج الأساسي.

مثال:

```py
from diffusers import AutoPipelineForText2Image
import torch

pipeline = AutoPipelineForText2Image.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16
).to("cuda")
pipeline.load_lora_weights(
    "jbilcke-hf/sdxl-cinematic-1", weight_name="pytorch_lora_weights.safetensors", adapter_name="cinematic"
)
pipeline.unet.disable_lora()
```

#### enable_adapters[[diffusers.loaders.PeftAdapterMixin.enable_adapters]]

```python
enable_adapters()
```

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/loaders/peft.py#L629)

تفعيل المُكيّفات (adapters) المرتبطة بالنموذج. يستخدم النموذج `self.active_adapters()` لاسترجاع قائمة المُكيّفات التي يجب تفعيلها.

إذا لم تكن على دراية بالمُكيِّفات (Adapters) وطرق PEFT، ندعوك إلى قراءة المزيد عنها في [التوثيق](https://huggingface.co/docs/peft) الخاص بـ PEFT.

#### enable_lora[[diffusers.loaders.PeftAdapterMixin.enable_lora]]

```python
enable_lora()
```

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/loaders/peft.py#L754)

يُفعّل طبقات LoRA النشطة في النموذج الأساسي.

مثال:

```py
from diffusers import AutoPipelineForText2Image
import torch

pipeline = AutoPipelineForText2Image.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16
).to("cuda")
pipeline.load_lora_weights(
    "jbilcke-hf/sdxl-cinematic-1", weight_name="pytorch_lora_weights.safetensors", adapter_name="cinematic"
)
pipeline.unet.enable_lora()
```

#### enable_lora_hotswap[[diffusers.loaders.PeftAdapterMixin.enable_lora_hotswap]]

```python
enable_lora_hotswap(target_rank: int = 128, check_compiled: typing.Literal['error', 'warn', 'ignore'] = 'error')
```

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/loaders/peft.py#L815)

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

target_rank (`int`، *اختياري*، القيمة الافتراضية `128`) : أعلى رتبة بين جميع المحوِّلات التي سيتم تحميلها.

check_compiled (`str`، *اختياري*، القيمة الافتراضية `"error"`) : كيفية التعامل مع الحالة التي يكون فيها النموذج مُجمَّعًا مسبقًا، وهو ما ينبغي تجنّبه بشكل عام. الخيارات هي: - "error" (الافتراضي): رفع خطأ - "warn": إصدار تحذير - "ignore": عدم اتخاذ أي إجراء

يتيح إمكانية تبديل محولات LoRA بشكل فوري.

لا يُشترط استدعاء هذه الطريقة إلا عند تبديل المحولات (adapters) بشكل مباشر، وفي حال كان النموذج مُجمَّعًا (compiled) أو إذا اختلفت رتب المحولات المُحمَّلة.

#### load_lora_adapter[[diffusers.loaders.PeftAdapterMixin.load_lora_adapter]]

```python
load_lora_adapter(pretrained_model_name_or_path_or_dict, prefix = 'transformer', hotswap: bool = False, **kwargs)
```

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/loaders/peft.py#L85)

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

pretrained_model_name_or_path_or_dict (`str` أو `os.PathLike` أو `dict`) : يمكن أن يكون أحد ما يلي: - نص، وهو *معرف النموذج* (مثل `google/ddpm-celebahq-256`) لنموذج مُدرَّب مسبقًا مستضاف على Hub. - مسار إلى *مجلد* (مثل `./my_model_directory`) يحتوي على أوزان النموذج المحفوظة باستخدام [ModelMixin.save_pretrained()](/docs/diffusers/main/ar/api/models/overview#diffusers.ModelMixin.save_pretrained). - [قاموس حالة torch](https://pytorch.org/tutorials/beginner/saving_loading_models.html#what-is-a-state-dict).

prefix (`str`، *اختياري*) : بادئة لتصفية قاموس الحالة.

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

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

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

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

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

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

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

network_alphas (`dict[str, float]`) : قيمة ألفا للشبكة المستخدمة للتعلم المستقر ومنع النقص. تحمل هذه القيمة المعنى نفسه لخيار `--network_alpha` في سكربت المدرب kohya-ss. راجع [هذا الرابط](https://github.com/darkstorm2150/sd-scripts/blob/main/docs/train_network_README-en.md#execute-learning).

low_cpu_mem_usage (`bool`، *اختياري*) : تسريع تحميل النموذج من خلال تحميل أوزان LoRA المُسبقة التدريب فقط دون تهيئة الأوزان العشوائية.

hotswap : (`bool`، *اختياري*) القيمة الافتراضية هي `False`. ما إذا كان يجب استبدال مُكيّف (LoRA) موجود بمُكيّف جديد تم تحميله في مكانه. وهذا يعني أنه، بدلاً من تحميل مُكيّف إضافي، سيتم أخذ أوزان المُكيّف الحالي واستبدالها بأوزان المُكيّف الجديد. يمكن أن يكون هذا أسرع وأكثر كفاءة في استخدام الذاكرة. ومع ذلك، فإن الميزة الرئيسية للاستبدال الساخن هي أنه عند تجميع النموذج باستخدام torch.compile، فإن تحميل المُكيّف الجديد لا يتطلب إعادة تجميع النموذج. عند استخدام الاستبدال الساخن، يجب أن يكون `adapter_name` المُمرَّر هو اسم مُكيّف تم تحميله بالفعل. إذا كان للمُكيّف الجديد والمُكيّف القديم رتب مختلفة و/أو قيم LoRA alpha (أي التوسع)، فستحتاج إلى استدعاء طريقة إضافية قبل تحميل المُكيّف: ```py pipeline = ...  # load diffusers pipeline max_rank = ...  # the highest rank among all LoRAs that you want to load # call *before* compiling and loading the LoRA adapter pipeline.enable_lora_hotswap(target_rank=max_rank) pipeline.load_lora_weights(file_name) # optionally compile the model now ``` لاحظ أن استبدال مُكيّفات مُشفّر النص غير مدعوم بعد. هناك بعض القيود الإضافية على هذه التقنية، وهي موثقة هنا: https://huggingface.co/docs/peft/main/en/package_reference/hotswap

metadata : بيانات وصفية لمُكيّف LoRA. عند تقديمها، لا تُستخدم البيانات الوصفية المستنتجة عبر state dict لتبديل `LoraConfig`.

يحمّل مُكيّف LoRA في النموذج الأساسي.

#### save_lora_adapter[[diffusers.loaders.PeftAdapterMixin.save_lora_adapter]]

```python
save_lora_adapter(save_directory, adapter_name: str = 'default', upcast_before_saving: bool = False, safe_serialization: bool = True, weight_name: str | None = None)
```

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/loaders/peft.py#L394)

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

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

adapter_name : (`str`، القيمة الافتراضية هي "default"): اسم المُكيّف (adapter) الذي سيتم تسلسله. مفيد عندما يحتوي النموذج الأساسي على عدة مُكيّفات محمّلة.

upcast_before_saving (`bool`، القيمة الافتراضية `False`) : ما إذا كان سيتم تحويل النموذج الأساسي إلى `torch.float32` قبل التسلسل.

safe_serialization (`bool`، *اختياري*، الافتراضي `True`) : ما إذا كان سيتم حفظ النموذج باستخدام `safetensors` أو بالطريقة التقليدية الخاصة بـ PyTorch باستخدام `pickle`.

weight_name : (`str`, *اختياري*، القيمة الافتراضية `None`): اسم الملف الذي سيتم من خلاله تسلسل state dict.

احفظ معاملات LoRA المقابلة للنموذج الأساسي.

#### set_adapter[[diffusers.loaders.PeftAdapterMixin.set_adapter]]

```python
set_adapter(adapter_name: str | list[str])
```

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/loaders/peft.py#L558)

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

adapter_name (str | list[str])) : قائمة المُكيّفات التي يجب ضبطها أو اسم المُكيّف في حالة وجود مُكيّف واحد.

يُعيّن مُكيّفًا محددًا من خلال إجبار النموذج على استخدام ذلك المُكيّف فقط، مع تعطيل المُكيّفات الأخرى.

إذا لم تكن على دراية بالمُكيِّفات (Adapters) وطرق PEFT، ندعوك إلى قراءة المزيد عنها في [التوثيق](https://huggingface.co/docs/peft) الخاص بـ PEFT.

#### set_adapters[[diffusers.loaders.PeftAdapterMixin.set_adapters]]

```python
set_adapters(adapter_names: list[str] | str, weights: float | dict | list[float] | list[dict] | list[None] | None = None)
```

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/loaders/peft.py#L462)

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

adapter_names (`list[str]` أو `str`) : أسماء المُكيِّفات (adapters) المراد استخدامها.

weights (`Union[List[float], float]`، *اختياري*) : أوزان المُكيِّف (المُكيِّفات) المستخدمة مع UNet. إذا كانت `None`، تُضبط الأوزان على `1.0` لجميع المُكيِّفات.

اضبط المُكيِّفات (adapters) النشطة حاليًا للاستخدام في شبكة الانتشار (مثل unet وtransformer وغيرها).

مثال:

```py
from diffusers import AutoPipelineForText2Image
import torch

pipeline = AutoPipelineForText2Image.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16
).to("cuda")
pipeline.load_lora_weights(
    "jbilcke-hf/sdxl-cinematic-1", weight_name="pytorch_lora_weights.safetensors", adapter_name="cinematic"
)
pipeline.load_lora_weights("nerijs/pixel-art-xl", weight_name="pixel-art-xl.safetensors", adapter_name="pixel")
pipeline.unet.set_adapters(["cinematic", "pixel"], weights=[0.5, 0.5])
```

