# ExecuTorch

[`ExecuTorch`](https://github.com/pytorch/executorch) هو حل شامل من الطرف إلى الطرف لتمكين قدرات الاستدلال على الجهاز عبر الأجهزة المحمولة وأجهزة الحافة، بما في ذلك الأجهزة القابلة للارتداء والأجهزة المدمجة ومعالجات الميكرو. وهو جزء من منظومة PyTorch، ويدعم نشر نماذج PyTorch مع التركيز على قابلية النقل والإنتاجية والأداء.

يُقدّم ExecuTorch نقاط دخول محددة بوضوح لتنفيذ تحسينات خاصة بالنموذج أو الجهاز أو حالة الاستخدام، مثل تفويض الخلفية، وتحويلات المُجمِّع التي يعرّفها المستخدم، وتخطيط الذاكرة، وغيرها. الخطوة الأولى في تجهيز نموذج PyTorch للتنفيذ على جهاز طرفي باستخدام ExecuTorch هي تصدير النموذج. ويتم ذلك من خلال استخدام واجهة برمجة تطبيقات PyTorch تُسمى [`torch.export`](https://pytorch.org/docs/stable/export.html).

## تكامل ExecuTorch[[transformers.TorchExportableModuleWithStaticCache]]

يتم تطوير نقطة تكامل لضمان إمكانية تصدير 🤗 Transformers باستخدام `torch.export`. لا يقتصر هدف هذا التكامل على تمكين التصدير فحسب، بل يمتد إلى ضمان إمكانية خفض المُنتَج المُصدَّر وتحسينه ليُنفَّذ بكفاءة في `ExecuTorch`، لا سيما في حالات الاستخدام على الأجهزة المحمولة والأطراف.

#### transformers.TorchExportableModuleWithStaticCache[[transformers.TorchExportableModuleWithStaticCache]]

```python
transformers.TorchExportableModuleWithStaticCache(model: PreTrainedModel, batch_size: int | None = None, max_cache_len: int | None = None, device: typing.Optional[torch.device] = None)
```

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

وحدة وصفات صُممت لجعل `PreTrainedModel` قابلة للتصدير باستخدام `torch.export`، وتحديداً لنماذج اللغة التي تعتمد على المُفكِّك فقط إلى `StaticCache`. تضمن هذه الوحدة أن النموذج المُصدَّر متوافق مع عمليات التحويل والتنفيذ اللاحقة في `ExecuTorch`.

ملاحظة: صُمِّم هذا الصنف خصيصًا لدعم عملية التصدير باستخدام `torch.export` بطريقة تضمن إمكانية خفض النموذج (lowering) وتنفيذه بكفاءة في `ExecuTorch`.

#### forward[[transformers.TorchExportableModuleWithStaticCache.forward]]

```python
forward(input_ids: typing.Optional[torch.LongTensor] = None, inputs_embeds: typing.Optional[torch.Tensor] = None, cache_position: typing.Optional[torch.Tensor] = None)
```

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

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

input_ids (`torch.Tensor`) : متجه يمثل معرّف الرمز الحالي المُدخل إلى الوحدة.

inputs_embeds (`torch.Tensor`) : متجه يمثل تضمينات الإدخال الحالية للوحدة.

cache_position (`torch.Tensor`) : متجه يمثل موضع الإدخال الحالي في ذاكرة التخزين المؤقت.

**يعيد:** `torch.Tensor`

مخرجات Logits من النموذج.

مرور أمامي للوحدة، وهو متوافق مع وقت تشغيل ExecuTorch.

يخدم هذا المُحوِّل الأمامي غرضين رئيسيين:

1. **جعل النموذج متوافقًا مع `torch.export`**: يخفي المُكيّف الكائنات غير المدعومة، مثل `Cache`، عن مدخلات ومخرجات الرسم البياني، مما يتيح تصدير النموذج باستخدام `torch.export` دون مواجهة أي مشكلات.

2. **ضمان التوافق مع وقت تشغيل `ExecuTorch`**: يطابق المُكيّف توقيع الدالة الأمامية للنموذج مع التوقيع الموجود في `executorch/extension/llm/runner`، مما يضمن إمكانية تنفيذ النموذج المُصدَّر في `ExecuTorch` دون أي إعدادات مسبقة.

#### transformers.convert_and_export_with_cache[[transformers.convert_and_export_with_cache]]

```python
transformers.convert_and_export_with_cache(model: PreTrainedModel, example_input_ids: typing.Optional[torch.Tensor] = None, example_cache_position: typing.Optional[torch.Tensor] = None, dynamic_shapes: dict | None = None, strict: bool | None = None)
```

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

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

model (`PreTrainedModel`) : النموذج المُسبَق التدريب الذي سيتم تصديره.

example_input_ids (`Optional[torch.Tensor]`) : مثال على معرّف الرمز المُدخل المستخدم بواسطة `torch.export`.

example_cache_position (`Optional[torch.Tensor]`) : مثال على موضع الكاش الحالي المستخدم بواسطة `torch.export`.

dynamic_shapes(`Optional[dict]`) : الأشكال الديناميكية التي يستخدمها `torch.export`.

strict(`Optional[bool]`) : علم لتوجيه `torch.export` إلى استخدام `dynamo`.

**يعيد:** البرنامج المُصدَّر (`torch.export.ExportedProgram`)

البرنامج المُصدَّر الذي تم إنشاؤه عبر `torch.export`.

تحويل `PreTrainedModel` إلى وحدة قابلة للتصدير وتصديرها باستخدام `torch.export`، مع التأكد من أن النموذج المُصدَّر متوافق مع `ExecuTorch`.

