منذ 3.5 عامًا مضت، كان Accelerate عبارة عن إطار عمل بسيط يهدف إلى جعل التدريب على أنظمة GPU وTPU المتعددة أسهل من خلال وجود تجريد منخفض المستوى يعمل على تبسيط عملية خام حلقة تدريب PyTorch:

منذ ذلك الحين، توسعت شركة Accelerate لتصبح مكتبة متعددة الأوجه تهدف إلى معالجة العديد من المشكلات الشائعة من خلال تدريب واسع النطاق ونماذج كبيرة في عصر يمثل فيه 405 مليار معلمة (Llama) حجم نموذج اللغة الجديد. وهذا ينطوي على:

  • واجهة برمجة تطبيقات تدريب مرنة منخفضة المستوى، تسمح بالتدريب على ستة مسرعات أجهزة مختلفة (CPU، وGPU، وTPU، وXPU، وNPU، وMLU) مع الحفاظ على 99% من حلقة التدريب الأصلية الخاصة بك
  • واجهة سطر أوامر سهلة الاستخدام تهدف إلى تكوين البرامج النصية وتشغيلها عبر تكوينات الأجهزة المختلفة
  • مسقط رأس الاستدلال الكبير للنموذج أو device_map="auto"، مما يسمح للمستخدمين ليس فقط بإجراء الاستدلال على LLMs باستخدام أجهزة متعددة ولكن الآن أيضًا المساعدة في تدريب LLMs على الحوسبة الصغيرة من خلال تقنيات مثل الضبط الدقيق الفعال للمعلمات (PEFT)

لقد سمحت هذه الجوانب الثلاثة لـ Accelerate بأن يصبح أساسًا تقريبًا كل عبوة في Hugging Face، مشتمل transformers, diffusers, peft, trlوأكثر!

نظرًا لأن الحزمة ظلت مستقرة لمدة عام تقريبًا، يسعدنا أن نعلن أننا قمنا بنشرها اعتبارًا من اليوم الإصدار الأول من المرشحين لـ Accelerate 1.0.0!

هذه المدونة سوف تشرح بالتفصيل:

  1. لماذا قررنا أن نفعل 1.0؟
  2. ما هو مستقبل Accelerate، وإلى أين نرى PyTorch ككل؟
  3. ما هي التغييرات الطارئة والإهمال التي حدثت، وكيف يمكنك الترحيل بسهولة؟

لماذا 1.0؟

خطط إطلاق الإصدار 1.0.0 كانت قيد التنفيذ منذ أكثر من عام. لقد كانت واجهة برمجة التطبيقات (API) تقريبًا عند النقطة التي أردناها، مع التركيز على Accelerator الجانب، مما يؤدي إلى تبسيط الكثير من التكوين وجعله أكثر قابلية للتوسعة. ومع ذلك، كنا نعلم أن هناك بعض القطع المفقودة قبل أن نتمكن من تسمية “قاعدة” الأرض Accelerate “اكتملت الميزة”:

مع التغييرات التي تم إجراؤها للإصدار 1.0، أصبح برنامج Accelerate جاهزًا للتعامل مع عمليات التكامل التقنية الجديدة مع الحفاظ على استقرار واجهة برمجة التطبيقات (API) التي تواجه المستخدم.

مستقبل تسريع

الآن بعد أن انتهى الإصدار 1.0 تقريبًا، يمكننا التركيز على التقنيات الجديدة التي تظهر في جميع أنحاء المجتمع وإيجاد مسارات التكامل في Accelerate، حيث نتوقع بعض التغييرات الجذرية في نظام PyTorch البيئي قريبًا جدًا:

  • كجزء من دعم DeepSpeed ​​متعدد النماذج، وجدنا أنه في حين أن الوضع العام لـ DeepSpeed ​​حاليًا استطاع في العمل، قد تكون هناك حاجة في النهاية إلى بعض التغييرات الكبيرة في واجهة برمجة التطبيقات (API) الشاملة حيث نعمل على دعم الأغلفة البسيطة لإعداد النماذج لأي سيناريو تدريبي متعدد النماذج.
  • مع اشتداد قوة الشعلة والشعلة، فإنهما يلمحان إلى مستقبل PyTorch ككل. بهدف الحصول على مزيد من الدعم الأصلي لتدريب FP8، وواجهة برمجة التطبيقات الموزعة الجديدة، ودعم إصدار جديد من FSDP، FSDPv2، نتوقع أن الكثير من واجهات برمجة التطبيقات الداخلية والاستخدام العام لـ Accelerate ستحتاج إلى التغيير (نأمل ألا تكون جذرية جدًا) لتلبية هذه الاحتياجات حيث تصبح أطر العمل أكثر استقرارًا ببطء.
  • الركوب torchao/FP8، تقدم العديد من أطر العمل الجديدة أفكارًا وتطبيقات مختلفة حول كيفية جعل تدريب FP8 ناجحًا ومستقرًا (transformer_engine, torchao, MS-AMP, nanotron، على سبيل المثال لا الحصر). هدفنا من Accelerate هو تجميع كل من هذه التطبيقات في مكان واحد مع تكوينات سهلة للسماح للمستخدمين باستكشاف واختبار كل تطبيق كما يحلو لهم، بهدف العثور على التطبيقات التي ينتهي بها الأمر إلى أن تكون الأكثر استقرارًا ومرونة. إنه مجال بحث سريع التسارع (لا يقصد التورية)، خاصة مع دعم تدريب FP4 من NVIDIA في الطريق، ونريد التأكد من أنه ليس فقط يمكننا دعم كل من هذه الأساليب ولكن نهدف إلى توفيرها معايير قوية لكل منهما لإظهار ميولهم خارج الصندوق (مع الحد الأدنى من التغيير والتبديل) مقارنة بتدريب BF16 الأصلي

نحن متحمسون للغاية بشأن مستقبل التدريب الموزع في نظام PyTorch البيئي، ونريد التأكد من وجود Accelerate في كل خطوة على الطريق، مما يوفر حاجزًا أقل أمام دخول هذه التقنيات الجديدة. ومن خلال القيام بذلك، نأمل أن يستمر المجتمع في التجربة والتعلم معًا حيث نجد أفضل الطرق للتدريب وتوسيع نطاق النماذج الأكبر على أنظمة الحوسبة الأكثر تعقيدًا.

كيفية تجربتها

لتجربة الإصدار الأول من برنامج Accelerate اليوم، يرجى استخدام إحدى الطرق التالية:

pip install --pre accelerate
docker pull huggingface/accelerate:gpu-release-1.0.0rc1

علامات الإصدار الصالحة هي:

  • gpu-release-1.0.0rc1
  • cpu-release-1.0.0rc1
  • gpu-fp8-transformerengine-release-1.0.0rc1
  • gpu-deepspeed-release-1.0.0rc1

مساعدة الهجرة

فيما يلي التفاصيل الكاملة لجميع حالات الإيقاف التي تم تفعيلها كجزء من هذا الإصدار:

  • تمر dispatch_batches, split_batches, even_batches، و use_seedable_sampler إلى Accelerator() يجب الآن التعامل معها عن طريق إنشاء accelerate.utils.DataLoaderConfiguration() وتمرير هذا إلى Accelerator() بدلاً من (Accelerator(dataloader_config=DataLoaderConfiguration(...)))
  • Accelerator().use_fp16 و AcceleratorState().use_fp16 تمت إزالتها؛ يجب استبدال هذا بالفحص accelerator.mixed_precision == "fp16"
  • Accelerator().autocast() لم يعد يقبل أ cache_enabled دعوى. بدلا من ذلك، أ AutocastKwargs() يجب استخدام المثيل الذي يتعامل مع هذه العلامة (من بين أشياء أخرى) ويمررها إلى ملف Accelerator (Accelerator(kwargs_handlers=[AutocastKwargs(cache_enabled=True)]))
  • accelerate.utils.is_tpu_available ينبغي استبداله ب accelerate.utils.is_torch_xla_available
  • accelerate.utils.modeling.shard_checkpoint ينبغي استبداله ب split_torch_state_dict_into_shards من huggingface_hub مكتبة
  • accelerate.tqdm.tqdm() لم يعد يقبل True/False كالحجة الأولى، وبدلا من ذلك، main_process_only يجب أن يتم تمريرها كوسيطة مسماة
  • ACCELERATE_DISABLE_RICH لم يعد متغيرًا بيئيًا صالحًا، وبدلاً من ذلك، يجب تمكينه يدويًا rich التتبع عن طريق الإعداد ACCELERATE_ENABLE_RICH=1
  • إعداد FSDP fsdp_backward_prefetch_policy تم استبداله بـ fsdp_backward_prefetch

إغلاق الأفكار

شكرًا جزيلاً لك على استخدام Accelerate؛ لقد كان من المذهل مشاهدة فكرة صغيرة تتحول إلى أكثر من 100 مليون عملية تنزيل وما يقرب من 300000 يوميًا التنزيلات على مدى السنوات القليلة الماضية.

مع هذا الإصدار المرشح، نأمل أن نمنح المجتمع فرصة لتجربته والانتقال إلى الإصدار 1.0 قبل الإصدار الرسمي.

يرجى متابعة المزيد من المعلومات من خلال مراقبة موقع github ومواقع التواصل الاجتماعي!

شاركها.
اترك تعليقاً