# PEFT[[transformers.integrations.PeftAdapterMixin]]

يوفر [PeftAdapterMixin](/docs/transformers/main/ar/main_classes/peft#transformers.integrations.PeftAdapterMixin) دوالاً من مكتبة [PEFT](https://huggingface.co/docs/peft/index) لإدارة المُكيّفات (adapters) مع Transformers. يدعم هذا الميكسين جميع طرق PEFT غير المعتمدة على تعلّم المُوجّهات (LoRA، وIA3، وAdaLoRA، وغيرها). لا تُدعم طرق ضبط المُوجّه (prefix tuning) (مثل prompt tuning وprompt learning) لأنها لا يمكن حقنها في وحدة torch.

#### transformers.integrations.PeftAdapterMixin[[transformers.integrations.PeftAdapterMixin]]

```python
transformers.integrations.PeftAdapterMixin()
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/integrations/peft.py#L57)

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

جميع طرق PEFT المدعومة حاليًا هي طرق غير مبنية على التلميح (مثل LoRA وIA³ وغيرها). أما نماذج PEFT الأخرى مثل ضبط التلميح (prompt tuning) وتعلم التلميح (prompt learning) فهي خارج نطاق هذا الدليل، لأن هذه المكيّفات (adapters) لا يمكن "حقنها" في وحدة torch. لاستخدام هذه الطرق، يُرجى الرجوع إلى دليل استخدام مكتبة PEFT.

مع هذا المزيج، إذا تم تثبيت الإصدار الصحيح من PEFT (>= 0.20.0)، فمن الممكن:

- حمّل مُكيِّفًا (adapter) مخزَّنًا في مسار محلي أو في مستودع بعيد على Hub، وأدرجه في النموذج
- اربط مُكيّفات جديدة في النموذج ودرّبها باستخدام Trainer أو بطريقتك الخاصة.
- إرفاق عدة محوِّلات وتفعيلها / تعطيلها بشكل متكرر
- تفعيل / تعطيل جميع المُكيّفات من النموذج.
- احصل على `state_dict` للمُكيّف النشط.

#### load_adapter[[transformers.integrations.PeftAdapterMixin.load_adapter]]

```python
load_adapter(peft_model_id: str | None = None, adapter_name: str | None = None, peft_config: dict[str, typing.Any] | None = None, adapter_state_dict: dict[str, 'torch.Tensor'] | None = None, low_cpu_mem_usage: bool = False, is_trainable: bool = False, hotswap: typing.Union[bool, typing.Literal['auto']] = 'auto', local_files_only: bool = False, adapter_kwargs: dict[str, typing.Any] | None = None, load_config: typing.Optional[ForwardRef('LoadStateDictConfig')] = None, **kwargs)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/integrations/peft.py#L80)

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

peft_model_id (`str`، *اختياري*) : المعرّف الخاص بالنموذج الذي يجب البحث عنه على Hub، أو مسار محلي إلى ملف إعدادات المحوّل المحفوظ وأوزان المحوّل.

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

load_config (`LoadStateDictConfig`، *اختياري*) : إعدادات تحميل لإعادة استخدامها عند جلب أوزان المُكيِّف، وعادةً من `from_pretrained`.

kwargs (`dict[str, Any]`، *اختياري*) : حقول إضافية من `LoadStateDictConfig` تُمرَّر كحجج مُسمّاة.

peft_config (`dict[str, Any]`، *اختياري*) : إعدادات المُكيّف (adapter) الذي سيتم إضافته، حيث تشمل المُكيّفات المدعومة جميع إعدادات التعلم غير المرتبطة بالموجّه (prompt) مثل (LoRA وIA³ وغيرها). يُستخدم هذا الحُجّة في حال مرّر المستخدمون قواميس حالة PEFT مباشرةً.

adapter_state_dict (`dict[str, torch.Tensor]`, *اختياري*) : قاموس الحالة الخاص بالمُكيّف (adapter) الذي سيتم تحميله. يُستخدم هذا الحُجّة في حال مرّر المستخدمون قواميس حالة PEFT مباشرةً.

low_cpu_mem_usage (`bool`، *اختياري*، القيمة الافتراضية `False`) : تقليل استهلاك الذاكرة أثناء تحميل مُكيّف PEFT. كما ينبغي أن يسرّع هذا عملية التحميل.

is_trainable (`bool`، *اختياري*، القيمة الافتراضية `False`) : ما إذا كان يجب أن يكون المُكيّف قابلًا للتدريب أم لا. إذا كانت القيمة `False`، فسيتم تجميد المُكيّف ولن يمكن استخدامه إلا للاستدلال.

hotswap : (`"auto"` أو `bool`، *اختياري*، القيمة الافتراضية `"auto"`) ما إذا كان يجب استبدال مُكيّف (LoRA) موجود بمُكيّف جديد محمّل في مكانه. وهذا يعني أنه، بدلاً من تحميل مُكيّف إضافي، سيتم أخذ أوزان المُكيّف الحالي واستبدالها بأوزان المُكيّف الجديد. يمكن أن يكون هذا أسرع وأكثر كفاءة في استخدام الذاكرة. ومع ذلك، فإن الميزة الرئيسية للتبديل الساخن هي أنه عند تجميع النموذج باستخدام torch.compile، فإن تحميل المُكيّف الجديد لا يتطلب إعادة تجميع النموذج. عند استخدام التبديل الساخن، يجب أن يكون `adapter_name` المُمرَّر هو اسم مُكيّف محمّل بالفعل. إذا كان للمُكيّف الجديد والمُكيّف القديم رتب مختلفة و/أو قيم LoRA alpha (أي التدرج)، فستحتاج إلى استدعاء طريقة إضافية قبل تحميل المُكيّف: ```py model = AutoModel.from_pretrained(...) max_rank = ...  # the highest rank among all LoRAs that you want to load # call *before* compiling and loading the LoRA adapter model.enable_peft_hotswap(target_rank=max_rank) model.load_adapter(file_name_1, adapter_name="default") # optionally compile the model now model = torch.compile(model, ...) output_1 = model(...) # now you can hotswap the 2nd adapter, use the same name as for the 1st # hotswap is activated by default since enable_peft_hotswap was called model.load_adapter(file_name_2, adapter_name="default") output_2 = model(...) ``` بشكل افتراضي، يكون التبديل الساخن معطلاً ويتطلب تمرير `hotswap=True`. إذا كنت قد استدعيت `enable_peft_hotswap` أولاً، فهو مفعّل. يمكنك مع ذلك تعطيله يدوياً في تلك الحالة عن طريق تمرير `hotswap=False`. لاحظ أن التبديل الساخن يأتي مع بعض القيود الموثقة هنا: https://huggingface.co/docs/peft/main/en/package_reference/hotswap

adapter_kwargs (`dict[str, Any]`، *اختياري*) : حُجج إضافية تُمرَّر إلى طريقة `from_pretrained` الخاصة بإعدادات المُكيِّف (adapter) وطريقة `find_adapter_config_file`.

حمّل أوزان المُكيّف من ملف أو من مجلد بعيد على Hub. إذا لم تكن على دراية بالمُكيّفات وطرق PEFT، ندعوك إلى قراءة المزيد عنها في التوثيق الرسمي لـ PEFT: https://huggingface.co/docs/peft

يتطلب تثبيت PEFT كخلفية (backend) لتحميل أوزان المحوّل (adapter).

#### add_adapter[[transformers.integrations.PeftAdapterMixin.add_adapter]]

```python
add_adapter(adapter_config, adapter_name: str | None = None)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/integrations/peft.py#L390)

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

adapter_config (`~peft.PeftConfig`) : إعدادات المُكيّف (adapter) المُراد إضافته، حيث تشمل المُكيّفات المدعومة طرق التعلم غير المعتمدة على المُوجّهات (LoRA، IA³، إلخ).

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

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

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

لاحظ أن المُكيّف المُضاف حديثًا لا يتم تفعيله تلقائيًا. لتفعيله، استخدم `model.set_adapter`.

#### set_adapter[[transformers.integrations.PeftAdapterMixin.set_adapter]]

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

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/integrations/peft.py#L430)

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

adapter_name (`Union[list[str], str]`) : اسم المُكيّف الذي يجب تعيينه. يمكن أن يكون أيضًا قائمة من النصوص لتعيين عدة مُكيّفات.

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

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

#### disable_adapters[[transformers.integrations.PeftAdapterMixin.disable_adapters]]

```python
disable_adapters()
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/integrations/peft.py#L471)

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

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

#### enable_adapters[[transformers.integrations.PeftAdapterMixin.enable_adapters]]

```python
enable_adapters()
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/integrations/peft.py#L490)

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

تفعيل المُكيّفات (adapters) المرتبطة بالنموذج.

#### enable_peft_hotswap[[transformers.integrations.PeftAdapterMixin.enable_peft_hotswap]]

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

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/integrations/peft.py#L353)

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

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

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

يتيح إمكانية تبديل محركات PEFT ذات الرتب المختلفة بشكل فوري، أو، إذا كان النموذج مُجمَّعًا، دون تحفيز إعادة التجميع.

حالياً، يُدعم تبديل الحار (hotswapping) فقط لتقنية LoRA.

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

#### active_adapters[[transformers.integrations.PeftAdapterMixin.active_adapters]]

```python
active_adapters()
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/integrations/peft.py#L508)

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

يحصل على المُكيِّفات النشطة حاليًا للنموذج. في حالة الاستدلال متعدد المُكيِّفات (دمج عدة مُكيِّفات للاستدلال)، يُرجع قائمة بجميع المُكيِّفات النشطة حتى يتمكن المستخدمون من التعامل معها وفقًا لذلك.

في إصدارات PEFT السابقة (التي لا تدعم الاستدلال متعدد المحوِّلات)، سيعيد `module.active_adapter` نصاً واحداً.

#### get_adapter_state_dict[[transformers.integrations.PeftAdapterMixin.get_adapter_state_dict]]

```python
get_adapter_state_dict(adapter_name: str | None = None, state_dict: dict | None = None)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/integrations/peft.py#L537)

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

adapter_name (`str`، *اختياري*) : اسم المُكيّف الذي سيتم منه الحصول على حالة القاموس. إذا لم يُمرَّر أي اسم، فسيتم استخدام المُكيّف النشط.

state_dict (قاموس متداخل من `torch.Tensor`، *اختياري*) : قاموس الحالة للنموذج. سيكون الافتراضي `self.state_dict()`، لكن يمكن استخدامه إذا كانت هناك حاجة إلى اتخاذ احتياطات خاصة عند استعادة قاموس حالة النموذج (مثل عند استخدام توازي النموذج).

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

يحصل على حالة المُكيّف (adapter state dict) التي يجب أن تحتوي فقط على تensors الأوزان الخاصة بالمُكيّف المحدد باسم adapter_name. إذا لم يتم تمرير adapter_name، يتم استخدام المُكيّف النشط.

#### delete_adapter[[transformers.integrations.PeftAdapterMixin.delete_adapter]]

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

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/integrations/peft.py#L622)

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

adapter_names (`Union[list[str], str]`) : اسم(أسماء) المُكيّف(المُكيّفات) المراد حذفه(ا).

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

