# خط أنابيب

## ModularPipeline[[diffusers.ModularPipeline]]

#### diffusers.ModularPipeline[[diffusers.ModularPipeline]]

```python
diffusers.ModularPipeline(blocks: diffusers.modular_pipelines.modular_pipeline.ModularPipelineBlocks | None = None, pretrained_model_name_or_path: str | os.PathLike | None = None, components_manager: diffusers.modular_pipelines.components_manager.ComponentsManager | None = None, collection: str | None = None, workflow: str | None = None, modular_config_dict: dict[str, typing.Any] | None = None, config_dict: dict[str, typing.Any] | None = None, **kwargs)
```

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/modular_pipelines/modular_pipeline.py#L1697)

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

blocks : ModularPipelineBlocks، وهي الوحدات المستخدمة في خط المعالجة

الفئة الأساسية لجميع خطوط الأنابيب المعيارية.

#### from_pretrained[[diffusers.ModularPipeline.from_pretrained]]

```python
from_pretrained(pretrained_model_name_or_path: str | os.PathLike | None, trust_remote_code: bool | None = None, components_manager: diffusers.modular_pipelines.components_manager.ComponentsManager | None = None, collection: str | None = None, workflow: str | None = None, **kwargs)
```

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/modular_pipelines/modular_pipeline.py#L1922)

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

pretrained_model_name_or_path (`str` أو `os.PathLike`، اختياري) : المسار إلى تكوين خط أنابيب مُدرَّب مسبقًا. سيحاول أولًا تحميل التكوين من `modular_model_index.json`، ثم يلجأ إلى `model_index.json` لضمان التوافق مع المستودعات القياسية غير المعيارية. إذا لم يحتوي pretrained_model_name_or_path على أي تكوين لخط أنابيب، فسيتم تعيينه إلى None أثناء التهيئة.

trust_remote_code (`bool`, اختياري) : ما إذا كان يجب الثقة بالكود البعيد عند تحميل خط الأنابيب، ويجب ضبطه على True إذا كنت ترغب في إنشاء كتل خط الأنابيب بناءً على الكود المخصص في `pretrained_model_name_or_path`

components_manager (`ComponentsManager`، اختياري) : مثيل من ComponentsManager لإدارة عدة مكونات عبر خطوط أنابيب مختلفة وتطبيق استراتيجيات التفريغ.

collection (`str`، اختياري) --` اسم المجموعة لتنظيم المكونات في ComponentsManager.

workflow (`str`, اختياري) : اسم مسار عمل مُعلن بواسطة كتل خط الأنابيب. إذا تم تقديمه، تُقصّ الكتل إلى كتل التنفيذ الخاصة بذلك المسار، بحيث يتوقع خط الأنابيب فقط — ولا يحمّل `load_components()` إلا — المكونات التي يستخدمها ذلك المسار.

تحميل ModularPipeline من مستودع في huggingface hub.

#### get_component_spec[[diffusers.ModularPipeline.get_component_spec]]

```python
get_component_spec(name: str)
```

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/modular_pipelines/modular_pipeline.py#L2408)

**يعيد:**

- نسخة من كائن ComponentSpec للاسم المكوّن المحدد

#### load_components[[diffusers.ModularPipeline.load_components]]

```python
load_components(names: list[str] | str | None = None, workflow: str | None = None, **kwargs)
```

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/modular_pipelines/modular_pipeline.py#L2496)

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

names : list of component names to load. If None, will load all components with default_creation_method == "from_pretrained". If provided as a list or string, will load only the specified components.

workflow : اسم سير عمل مُعلن بواسطة كتل خط الأنابيب. إذا تم تقديمه، يتم تحميل المكونات التي تستخدمها كتل تنفيذ ذلك السير عمل فقط. لا يمكن دمجه مع `names`.

- ****kwargs** : معاملات إضافية تُمرَّر إلى `from_pretrained()`. يمكن أن تكون: - قيمة واحدة تُطبَّق على جميع المكونات التي سيتم تحميلها، مثل dtype=torch.bfloat16 - قاموس، مثل dtype={"unet": torch.bfloat16, "default": torch.float32} - إذا كان من المحتمل تجاوز ComponentSpec عند تمرير حقل تحميل مختلف في kwargs، مثل `pretrained_model_name_or_path`، `variant`، `revision`، إلخ. - إذا كان من المحتمل تجاوز ComponentSpec عند تمرير حقل تحميل مختلف في kwargs، مثل `pretrained_model_name_or_path`، `variant`، `revision`، إلخ.

تحميل المكونات المحددة من المواصفات.

#### register_components[[diffusers.ModularPipeline.register_components]]

```python
register_components(**kwargs)
```

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/modular_pipelines/modular_pipeline.py#L2193)

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

- ****kwargs** : حُجج بكلمات مفتاحية حيث تكون المفاتيح أسماء المكونات والقيم كائنات المكونات. على سبيل المثال، register_components(unet=unet_model, text_encoder=encoder_model)

سجّل المكونات مع مواصفاتها المقابلة.

تتولى هذه الطريقة المسؤولية عن:
1. يُعيّن كائنات المكوّنات كخصائص على المُحمِّل (مثل self.unet = unet)
2. يحدّث قاموس الإعدادات، الذي سيُحفظ باسم `modular_model_index.json` أثناء `save_pretrained` (لمكونات from_pretrained فقط)
3. يضيف المكونات إلى مدير المكونات إذا كان مرفقًا (للمكونات من from_pretrained فقط)

يتم استدعاء هذه الطريقة عند:
- تُهيّأ المكوّنات أولاً في __init__:
  - مكوّنات from_pretrained غير محمّلة أثناء __init__ لذا يتم تسجيلها على أنها None؛
  - تُنشأ مكوّنات non from_pretrained أثناء __init__ وتُسجَّل كالكائن نفسه
- تُحدَّث المكونات باستخدام طريقة `update_components()`؛ على سبيل المثال loader.update_components(unet=unet) أو loader.update_components(guider=guider_spec)
- (from_pretrained) يتم تحميل المكونات باستخدام طريقة `load_components()`: على سبيل المثال، loader.load_components(names=["unet"]) أو loader.load_components() لتحميل جميع المكونات الافتراضية

ملاحظات:
- When registering None for a component, it sets attribute to None but still syncs specs with the config dict, which will be saved as `modular_model_index.json` during `save_pretrained`
- component_specs are updated to match the new component outside of this method, e.g. in `update_components()` method

#### save_pretrained[[diffusers.ModularPipeline.save_pretrained]]

```python
save_pretrained(save_directory: str | os.PathLike, safe_serialization: bool = True, variant: str | None = None, max_shard_size: int | str | None = None, push_to_hub: bool = False, **kwargs)
```

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/modular_pipelines/modular_pipeline.py#L2023)

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

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

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

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

max_shard_size (`int` أو `str`، القيمة الافتراضية هي `None`) : الحد الأقصى لحجم نقطة التفتيش قبل تقسيمها إلى أجزاء. ستكون نقاط التفتيش المقسمة بعد ذلك كل منها بحجم أقل من هذا الحجم. إذا عُبر عنها كنص، فيجب أن تتكون من أرقام متبوعة بوحدة (مثل `"5GB"`). إذا عُبر عنها كعدد صحيح، فإن الوحدة هي البايت.

push_to_hub (`bool`، *اختياري*، الافتراضي `False`) : ما إذا كان يجب دفع خط الأنابيب إلى مركز نماذج Hugging Face بعد حفظه.

- ****kwargs** : حُجج إضافية بالكلمات المفتاحية: - `overwrite_modular_index` (`bool`، *اختياري*، القيمة الافتراضية `True`): ما إذا كان يجب تحديث `modular_model_index.json` بحيث تشير مواصفات التحميل لكل مكوّن محفوظ إلى الوجهة: `repo_id` عند الدفع إلى Hub، وإلا `save_directory`. المكوّنات غير المحمّلة لا تُحفظ وتحتفظ دائمًا بمواصفات التحميل المسجّلة لها. مرّر `False` للحفاظ أيضًا على المواصفات المسجّلة للمكوّنات التي يتم حفظها (مثل فهرس يشير عمدًا إلى مستودعات أخرى)؛ أما المكوّنات التي لا تحمل معرّف تحميل (مثل النماذج المخصصة المضافة عبر `update_components`) فتُعاد كتابتها على أي حال لأنها لا تملك مصدرًا مسجّلًا. - `repo_id` (`str`، *اختياري*): معرّف المستودع الذي سيتم دفع خط الأنابيب إليه. القيمة الافتراضية هي المكوّن الأخير من `save_directory`. - `commit_message` (`str`، *اختياري*): رسالة الالتزام لعملية الدفع إلى hub. - `private` (`bool`، *اختياري*): ما إذا كان يجب أن يكون المستودع خاصًا. - `create_pr` (`bool`، *اختياري*، القيمة الافتراضية `False`): ما إذا كان يجب إنشاء طلب سحب بدلاً من الدفع مباشرة. - `token` (`str`، *اختياري*): رمز Hugging Face المستخدم للمصادقة.

احفظ خط الأنابيب وجميع مكوّناته في مجلد، بحيث يمكن إعادة تحميله باستخدام طريقة الفئة [from_pretrained()](/docs/diffusers/main/ar/api/modular_diffusers/pipeline#diffusers.ModularPipeline.from_pretrained).

#### إلى[[diffusers.ModularPipeline.to]]

```python
to(*args, **kwargs)
```

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/modular_pipelines/modular_pipeline.py#L2658)

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

dtype (`torch.dtype`، *اختياري*) : يعيد خط أنابيب مع [`dtype`](https://pytorch.org/docs/stable/tensor_attributes.html#torch.dtype) المحدد

device (`torch.Device`، *اختياري*) : يعيد خط أنابيب مع [`device`](https://pytorch.org/docs/stable/tensor_attributes.html#torch.device) المحدد

silence_dtype_warnings (`str`، *اختياري*، القيمة الافتراضية `False`) : ما إذا كان يجب تجاهل التحذيرات إذا لم يكن `dtype` المستهدف متوافقًا مع `device` المستهدف.

**يعيد:** [DiffusionPipeline](/docs/diffusers/main/ar/api/pipelines/overview#diffusers.DiffusionPipeline)

تم تحويل خط الأنابيب إلى `dtype` و/أو `dtype` المحدد.

يُنفّذ تحويل نوع البيانات (dtype) و/أو الجهاز (device) الخاص بـ Pipeline. يتم استنتاج torch.dtype وtorch.device من معاملات `self.to(*args, **kwargs).`

> [!TIP] > إذا كان خط الأنابيب يحتوي بالفعل على torch.dtype وtorch.device الصحيحين، فإنه يُعاد كما هو.
وإلا، > فإن خط الأنابيب المُعاد هو نسخة من self مع torch.dtype وtorch.device المطلوبين.

إليك طرق استدعاء `to`:

- `to(dtype, silence_dtype_warnings=False) → DiffusionPipeline` لإرجاع خط أنابيب بالـ [`dtype`](https://pytorch.org/docs/stable/tensor_attributes.html#torch.dtype) المحدد
- `to(device, silence_dtype_warnings=False) → DiffusionPipeline` لإرجاع خط أنابيب مع [`device`](https://pytorch.org/docs/stable/tensor_attributes.html#torch.device) المحدد
- `to(device=None, dtype=None, silence_dtype_warnings=False) → DiffusionPipeline` لإرجاع خط أنابيب مع [`device`](https://pytorch.org/docs/stable/tensor_attributes.html#torch.device) و [`dtype`](https://pytorch.org/docs/stable/tensor_attributes.html#torch.dtype) المحددين

#### unload_components[[diffusers.ModularPipeline.unload_components]]

```python
unload_components(names: list[str] | str)
```

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/modular_pipelines/modular_pipeline.py#L2602)

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

names : اسم المكوّن أو قائمة بأسماء المكوّنات التي سيتم تفريغها.

تفريغ المكونات المحددة، مما يحرر ذاكرتها.

يُعاد تعيين خاصية المكوّن إلى `None`، وإذا كان مكوّن ComponentsManager مرفقًا، يُزال المكوّن منه. تبقى مواصفات المكوّن دون تغيير، لذا يمكن تحميل المكوّن مرة أخرى لاحقًا باستخدام `load_components()`.

#### update_components[[diffusers.ModularPipeline.update_components]]

```python
update_components(**kwargs)
```

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/modular_pipelines/modular_pipeline.py#L2415)

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

- ****kwargs** : كائنات المكونات أو قيم الإعدادات التي سيتم تحديثها: - كائنات المكونات: يتم وضع علامة تلقائيًا على النماذج المحمّلة عبر `AutoModel.from_pretrained()` أو `ComponentSpec.load()` بمعلومات التحميل. يمكن تمرير كائنات ConfigMixin التي لا تحتوي على أوزان (مثل المجدولين والموجهين) مباشرة. - قيم الإعدادات: قيم بسيطة لتحديث إعدادات التهيئة (مثل `requires_safety_checker=False`)

حدّث المكوّنات وقيم الإعدادات والمواصفات بعد إنشاء خط الأنابيب.

تتيح لك هذه الطريقة:
1. استبدال المكونات الموجودة بأخرى جديدة (مثل تحديث `self.unet` أو `self.text_encoder`)
2. تحديث قيم الإعدادات (مثل تغيير علم `self.requires_safety_checker`)

بالإضافة إلى تحديث المكونات وقيم الإعدادات كخصائص للخط، يقوم هذا الإجراء أيضًا بتحديث:
- المواصفات المقابلة في `_component_specs` و`_config_specs`
- قائمة `config` التي سيتم حفظها باسم `modular_model_index.json` أثناء `save_pretrained`

أمثلة:
```python
# Update pre-trained model
pipeline.update_components(unet=new_unet_model, text_encoder=new_text_encoder)

# Update configuration values
pipeline.update_components(requires_safety_checker=False)
```

ملاحظات:
- ستتمتع المكونات المحمّلة عبر `AutoModel.from_pretrained()` أو `ComponentSpec.load()`
تُحفظ المواصفات المحمّلة لأغراض التسلسل. أما المكونات المخصصة أو المحمّلة محليًا دون مراجع إلى Hub، فسيتم تحديث إدخالاتها في `modular_model_index.json` تلقائيًا أثناء `save_pretrained()`.
- يمكن تمرير كائنات ConfigMixin التي لا تحتوي على أوزان (مثل المجدولين والموجهين) مباشرة.

