# تدريب TPU

يُعدّ [TPU (وحدة معالجة الموترات)](https://cloud.google.com/tpu/docs/intro-to-tpu) نوعًا من العتاد مصمَّم خصيصًا لتدريب النماذج بكفاءة. يدعم Accelerate التدريب على TPU، لكن هناك بعض الأمور التي ينبغي أن تكون على دراية بها، وأبرزها تجميع الرسوم البيانية. يناقش هذا الشرح تجميع الرسوم البيانية بإيجاز، وللاطلاع على مزيد من التفاصيل، راجع دليل [التدريب على TPU باستخدام Accelerate](../concept_guides/training_tpu).

## التجميع

ينشئ TPU رسمًا بيانيًا لجميع العمليات في خطوة التدريب، مثل المرور الأمامي، والمرور العكسي، وخطوة المُحسِّن. ولهذا السبب تستغرق خطوة التدريب الأولى دائمًا بعض الوقت، لأن بناء هذا الرسم البياني وتجميعه يستغرقان وقتًا. لكن بمجرد اكتمال التجميع، يُخزَّن في ذاكرة مؤقتة، وتصبح جميع الخطوات اللاحقة أسرع بكثير.

المفتاح هو تجنب إعادة تجميع الكود الخاص بك، وإلا فإن التدريب سيكون بطيئًا للغاية. وهذا يعني أن جميع عملياتك يجب أن تكون متطابقة تمامًا:

* يجب أن تكون جميع الموترات (tensors) في دفعاتك (batches) بنفس الطول (على سبيل المثال، لا يتم استخدام الحشو الديناميكي (dynamic padding) لمهام معالجة اللغة الطبيعية)
* يجب أن يكون كودك ثابتًا (على سبيل المثال، لا توجد طبقات تحتوي على حلقات for ذات أطوال مختلفة اعتمادًا على المدخلات، مثل LSTM)

## ربط الأوزان

تصميم نموذج اللغة الشائع هو ربط أوزان طبقة التضمين وطبقة softmax. ومع ذلك، فإن نقل النموذج إلى TPU (سواءً كنت تقوم بذلك بنفسك أو تمريره إلى طريقة [prepare()](/docs/accelerate/main/ar/package_reference/accelerator#accelerate.Accelerator.prepare)) يكسر ربط الأوزان، وستحتاج إلى إعادة ربط الأوزان.

لإضافة سلوك خاص (مثل ربط الأوزان) في سكربت الخاص بك للوحدات المعالجة TPU، اضبط `distributed_type` على `DistributedType.TPU` أولاً. ثم يمكنك استخدام طريقة [tie_weights](https://huggingface.co/docs/transformers/main/en/main_classes/model#transformers.PreTrainedModel.tie_weights) لربط الأوزان.

```py
if accelerator.distributed_type == DistributedType.TPU:
    model.tie_weights()
```

