# torch.compile للاستدلال

يقوم [torch.compile](https://pytorch.org/tutorials/intermediate/torch_compile_tutorial.html) بتجميع كود PyTorch إلى نوى مُحسّنة تسرّع الاستدلال بشكل كبير. يعتمد هذا الميزة على [TorchDynamo](https://pytorch.org/docs/stable/torch.compiler_dynamo_overview.html) لتجميع الكود إلى رسوم بيانية، وعلى [TorchInductor](https://dev-discuss.pytorch.org/t/torchinductor-a-pytorch-native-compiler-with-define-by-run-ir-and-symbolic-shapes/747) لتجميع هذه الرسوم البيانية بشكل إضافي إلى نوى مُحسّنة. وهي أداة تحسين قوية، وفي كثير من الحالات، لا تتطلب سوى إضافة سطر واحد من الكود.

قم بتغليف نموذج باستخدام torch.compile لتجميعه وإرجاع نموذج محسّن.

```py
from transformers import AutoModelForCausalLM

model = AutoModelForCausalLM.from_pretrained("google/gemma-2b", device_map="auto")
compiled_model = torch.compile(model)
```

> [!TIP]
> تكون الاستدعاء الأولي لـ torch.compile بطيئاً لأن النموذج يحتاج إلى التجميع. أما الاستدعاءات اللاحقة للنموذج المُجمَّع فتكون أسرع بكثير لأنه لا يحتاج إلى التجميع مرة أخرى.

تتوفر عدة معاملات لتخصيص عملية التجميع. وفيما يلي اثنان من أهمها. للاطلاع على القائمة الكاملة للمعاملات، يُرجى الرجوع إلى [التوثيق](https://pytorch.org/docs/stable/generated/torch.compile.html) الخاص بـ torch.compile.

## الأنماط

يوفر معامل `mode` عدة خيارات للأداء عند التجميع. جرّب أوضاعًا مختلفة لمعرفة أيها يعمل بشكل أفضل لحالتك الخاصة.

- `default` هو خيار متوازن بين السرعة والذاكرة.
- يقلل `reduce-overhead` من العبء الإضافي المرتبط بلغة بايثون مقابل استهلاك ذاكرة أكبر قليلاً، لكنه قد يكون أسرع.
- `max-autotune` يوفر أسرع سرعة، لكن عملية التجميع تستغرق وقتًا أطول.

```py
from transformers import AutoModelForCausalLM

model = AutoModelForCausalLM.from_pretrained("google/gemma-2b", device_map="auto")
compiled_model = torch.compile(model, mode="reduce-overhead")
```

## Fullgraph

يحاول Fullgraph تجميع النموذج بأكمله في رسم بياني واحد لتعظيم الأداء. يرفع torch.compile خطأً إذا واجه انقطاعاً في الرسم البياني، مما يعني أنه لا يستطيع تجميع النموذج في رسم بياني واحد.

```py
from transformers import AutoModelForCausalLM

model = AutoModelForCausalLM.from_pretrained("google/gemma-2b", device_map="auto")
compiled_model = torch.compile(model, mode="reduce-overhead", fullgraph=True)
```

## المعايير

راجع الجدول أدناه لمعايير الأداء التي تقارن متوسط زمن الاستدلال بالمللي ثانية مع تفعيل torch.compile وإيقافه عبر وحدات معالجة الرسوميات (GPU) وأحجام الدفعات (batch sizes) المختلفة على نفس الصورة لمهام الرؤية المختلفة.

اختر **Subset** في الجدول أدناه للتبديل بين وحدات معالجة الرسوميات المختلفة، وكذلك اختبارات الأداء على [PyTorch nightly](https://download.pytorch.org/whl/nightly/cu118) 2.1.0dev وtorch.compile مع تفعيل وضع `reduce-overhead`.

<iframe src="https://huggingface.co/datasets/docs-benchmarks/compile-benchmarks/embed/viewer/A100/train" frameborder="0" width="100%" height="560px"
>

## الخطوات التالية

- اطّلع على دليل [torch.compile للتدريب](./torch_compile) لمعرفة كيفية استخدام torch.compile للتدريب.

