Accelerate documentation
تدريب TPU
تدريب TPU
يُعدّ TPU (وحدة معالجة الموترات) نوعًا من العتاد مصمَّم خصيصًا لتدريب النماذج بكفاءة. يدعم Accelerate التدريب على TPU، لكن هناك بعض الأمور التي ينبغي أن تكون على دراية بها، وأبرزها تجميع الرسوم البيانية. يناقش هذا الشرح تجميع الرسوم البيانية بإيجاز، وللاطلاع على مزيد من التفاصيل، راجع دليل التدريب على TPU باستخدام Accelerate.
التجميع
ينشئ TPU رسمًا بيانيًا لجميع العمليات في خطوة التدريب، مثل المرور الأمامي، والمرور العكسي، وخطوة المُحسِّن. ولهذا السبب تستغرق خطوة التدريب الأولى دائمًا بعض الوقت، لأن بناء هذا الرسم البياني وتجميعه يستغرقان وقتًا. لكن بمجرد اكتمال التجميع، يُخزَّن في ذاكرة مؤقتة، وتصبح جميع الخطوات اللاحقة أسرع بكثير.
المفتاح هو تجنب إعادة تجميع الكود الخاص بك، وإلا فإن التدريب سيكون بطيئًا للغاية. وهذا يعني أن جميع عملياتك يجب أن تكون متطابقة تمامًا:
- يجب أن تكون جميع الموترات (tensors) في دفعاتك (batches) بنفس الطول (على سبيل المثال، لا يتم استخدام الحشو الديناميكي (dynamic padding) لمهام معالجة اللغة الطبيعية)
- يجب أن يكون كودك ثابتًا (على سبيل المثال، لا توجد طبقات تحتوي على حلقات for ذات أطوال مختلفة اعتمادًا على المدخلات، مثل LSTM)
ربط الأوزان
تصميم نموذج اللغة الشائع هو ربط أوزان طبقة التضمين وطبقة softmax. ومع ذلك، عند نقل النموذج إلى TPU (سواءً كنت تقوم بذلك بنفسك أو تمريره إلى طريقة prepare())، يتم كسر ربط الأوزان وستحتاج إلى إعادة ربطها.
لإضافة سلوك خاص (مثل ربط الأوزان) في سكربت الخاص بك للوحدات المعالجة TPU، اضبط distributed_type على DistributedType.TPU أولاً. ثم يمكنك استخدام طريقة tie_weights لربط الأوزان.
if accelerator.distributed_type == DistributedType.TPU:
model.tie_weights()