# UNet

تستهدف بعض طرق التدريب - مثل LoRA وCustom Diffusion - عادةً طبقات الانتباه في UNet، لكن يمكن لهذه الطرق التدريبية أن تستهدف أيضًا طبقات غير انتباه أخرى. وبدلًا من تدريب جميع معاملات النموذج، يتم تدريب مجموعة فرعية فقط من المعاملات، وهو ما يكون أسرع وأكثر كفاءة. تكون هذه الفئة مفيدة إذا كنت *تحمّل* الأوزان في UNet فقط. إذا كنت بحاجة إلى تحميل الأوزان في مشفّر النص أو في مشفّر النص وUNet، فحاول استخدام دالة [load_lora_weights()](/docs/diffusers/v0.43.0/ar/api/loaders/lora#diffusers.loaders.StableDiffusionLoraLoaderMixin.load_lora_weights) بدلاً من ذلك.

توفر فئة `UNet2DConditionLoadersMixin` دوال لتحميل وحفظ الأوزان، ودمج وإلغاء دمج LoRA، وتعطيل وتفعيل LoRA، وإعداد وحذف المحوِّلات.

> [!TIP]
> للتعرف على المزيد حول كيفية تحميل أوزان LoRA، راجع دليل [LoRA](../../tutorials/using_peft_for_inference).

## UNet2DConditionLoadersMixin[[diffusers.loaders.UNet2DConditionLoadersMixin]]

#### diffusers.loaders.UNet2DConditionLoadersMixin[[diffusers.loaders.UNet2DConditionLoadersMixin]]

```python
diffusers.loaders.UNet2DConditionLoadersMixin()
```

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

حمّل طبقات LoRA إلى `UNet2DCondtionModel`.

#### load_attn_procs[[diffusers.loaders.UNet2DConditionLoadersMixin.load_attn_procs]]

```python
load_attn_procs(pretrained_model_name_or_path_or_dict: str | dict[str, torch.Tensor], **kwargs)
```

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

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

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

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 أو محليًا.

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

حمّل طبقات معالج الانتباه (attention processor) المُسبقة التدريب من Custom Diffusion إلى [UNet2DConditionModel](/docs/diffusers/v0.43.0/ar/api/models/unet2d-cond#diffusers.UNet2DConditionModel). يجب أن تكون طبقات معالج الانتباه معرّفة في [`attention_processor.py`](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/attention_processor.py) وأن تكون من فئة `torch.nn.Module`. لتحميل طبقات LoRA، استخدم [load_lora_adapter()](/docs/diffusers/v0.43.0/ar/api/loaders/peft#diffusers.loaders.PeftAdapterMixin.load_lora_adapter) بدلاً من ذلك.

مثال:

```py
import torch
from diffusers import DiffusionPipeline

pipeline = DiffusionPipeline.from_pretrained(
    "CompVis/stable-diffusion-v1-4",
    torch_dtype=torch.float16,
).to("cuda")
pipeline.unet.load_attn_procs("path-to-save-model", weight_name="pytorch_custom_diffusion_weights.bin")
```

#### save_attn_procs[[diffusers.loaders.UNet2DConditionLoadersMixin.save_attn_procs]]

```python
save_attn_procs(save_directory: str | os.PathLike, is_main_process: bool = True, weight_name: str = None, save_function: typing.Callable = None, safe_serialization: bool = True, **kwargs)
```

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

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

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

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

save_function (`Callable`) : الدالة المستخدمة لحفظ قاموس الحالة. مفيدة أثناء التدريب الموزع عندما تحتاج إلى استبدال `torch.save` بطريقة أخرى. يمكن ضبطها باستخدام متغير البيئة `DIFFUSERS_SAVE_MODE`.

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

احفظ طبقات معالج الانتباه الخاص بتخصيص الانتشار (Custom Diffusion) في مجلد حتى يمكن إعادة تحميلها باستخدام طريقة [load_attn_procs()](/docs/diffusers/v0.43.0/ar/api/loaders/unet#diffusers.loaders.UNet2DConditionLoadersMixin.load_attn_procs). لحفظ طبقات LoRA، استخدم [save_lora_adapter()](/docs/diffusers/v0.43.0/ar/api/loaders/peft#diffusers.loaders.PeftAdapterMixin.save_lora_adapter) بدلاً من ذلك.

مثال:

```py
import torch
from diffusers import DiffusionPipeline

pipeline = DiffusionPipeline.from_pretrained(
    "CompVis/stable-diffusion-v1-4",
    torch_dtype=torch.float16,
).to("cuda")
pipeline.unet.load_attn_procs("path-to-save-model", weight_name="pytorch_custom_diffusion_weights.bin")
pipeline.unet.save_attn_procs("path-to-save-model", weight_name="pytorch_custom_diffusion_weights.bin")
```

