Accelerate documentation

التجميع

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v1.15.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

التجميع

نظرة عامة

أدخلت Pytorch 2.0 ميزة torch.compile القوية التي تجعل كود PyTorch يعمل بشكل أسرع من خلال تجميع كود PyTorch بشكل JIT إلى نواة مُحسّنة. وتشمل الميزات الرئيسية لـtorch.compile:

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

عند استخدامه مع Accelerate، يتكامل torch.compile بسلاسة مع سير عمل التدريب الموزّع، مما يتيح لك الاستفادة من كل من التنفيذ الموزّع وتحسينات الترجمة في آنٍ واحد.

عادةً ما تستغرق أول عملية تنفيذ للأكود المُجمَّع وقتًا أطول نظرًا لتضمينها زمن التجميع، لكن عمليات التنفيذ اللاحقة تكون أسرع بشكل ملحوظ. لتحقيق الأداء الأمثل في سيناريوهات مختلفة، يوفّر torch.compile أوضاعًا متنوعة مثل "default"، و"reduce-overhead" (الذي يستخدم رسوميات CUDA لتقليل النفقات الإضافية بشكل أكبر)، و"max-autotune" (الذي يقوم بإجراء ضبط تلقائي شامل للعثور على أفضل نوى (kernels) لنموذجك).

استخدام torch.compile مع Accelerate

Accelerate provides TorchDynamoPlugin for easy and seamless integration of torch.compile into your training scripts.

from accelerate import Accelerator
from accelerate.utils import TorchDynamoPlugin

# Configure the compilation backend
dynamo_plugin = TorchDynamoPlugin(
    backend="inductor",  # Options: "inductor", "aot_eager", "aot_nvfuser", etc.
    mode="default",      # Options: "default", "reduce-overhead", "max-autotune"
    fullgraph=True,
    dynamic=False
)

# Initialize accelerator with the plugin
accelerator = Accelerator(dynamo_plugin=dynamo_plugin)
# This will apply torch.compile to your model
model = accelerator.prepare(model)

يتوافق مع جميع الميزات والإضافات الأخرى في Accelerate، بما في ذلك الدقة المختلطة، والتدريب الموزّع (DDP، FSDP، Deepspeed)، وغيرها.

التجميع الإقليمي

بدلاً من محاولة تجميع النموذج بأكمله، والذي عادةً ما يواجه مساحة مشكلة كبيرة للتحسين، يستهدف التجميع الإقليمي الكتل المتكررة من نفس الفئة ويجمّعها تسلسليًا للوصول إلى ذاكرة المؤلّف (الكاش) الخاصة بالمجمّع. على سبيل المثال، في GPT2LMHeadModel، الكتلة/الفئة المتكررة هي GPT2Block، ويمكن الوصول إليها عبر model.transformer.h[0]. أما بقية النموذج (مثل model.lm_head) فتُجمَّع بشكل منفصل.

هذا يتيح لنا تسريع تكلفة التجميع / البدء البارد للنماذج مثل نماذج اللغة الكبيرة (LLMs) ومكتبة Transformers بشكل عام. راجع https://pytorch.org/tutorials/recipes/regional_compilation.html لمزيد من التفاصيل.

كيفية استخدام التجميع الإقليمي

يمكن تفعيله عن طريق تعيين use_regional_compilation=True في إعدادات TorchDynamoPlugin:

# Configure the compilation backend
dynamo_plugin = TorchDynamoPlugin(
    use_regional_compilation=True,
    ... # other parameters
)
# Initialize accelerator with the plugin
accelerator = Accelerator(dynamo_plugin=dynamo_plugin)
# This will apply compile_regions to your model
model = accelerator.prepare(model)

يمكنك أيضًا استخدام أداة accelerate.utils.compile_regions مباشرة بالطريقة نفسها التي تستخدم بها torch.compile.

فوائد التجميع الإقليمي

أجرينا اختبارات أداء شاملة لمقارنة التجميع الكامل والتجميع الإقليمي باستخدام ميزة torch.compile في PyTorch. النتائج الكاملة متاحة في مستودع accelerate. أبرز النتائج المستخلصة من اختبارات الأداء لدينا هي:

  1. أداء مماثل: يوفر التجميع الإقليمي تسريعًا للأداء مشابهًا للتجميع الكامل، لا سيما في حالة النماذج الأكبر حجمًا.
  2. تجميع أسرع: يقلل التجميع الإقليمي بشكل كبير من الوقت المطلوب لتجميع النماذج، مما يجعله خيارًا أكثر كفاءة للنشر.
  3. أثر حجم الدفعة: تقلّ الفروق في الأداء بين استراتيجيات التجميع مع زيادة أحجام الدفعات، مما يشير إلى أن العبء الإضافي للتجميع يكون أقل تأثيراً في تلك السيناريوهات.
  4. اعتبارات حجم النموذج: تكون فوائد التجميع الإقليمي أكثر وضوحًا في النماذج الأكبر حجمًا، حيث يمكن أن تكون وفورات وقت التجميع كبيرة.
  5. التطبيق العملي: في التطبيقات الواقعية، يُعدّ التجميع الإقليمي خيارًا عمليًا لتحسين أوقات بدء التدريب البارد، لا سيما عند العمل مع نماذج كبيرة.

الخلاصة

يمكن لكلٍّ من التجميع الكامل والتجميع الإقليمي أن يسرّع نماذجك بشكل كبير. ويوفر التجميع الإقليمي توازنًا عمليًا بين زمن التجميع وأداء وقت التشغيل، لا سيما عند تدريب النماذج الكبيرة باستخدام أحجام دفعات كبيرة.

Update on GitHub