Hugging Face Blog→ المصدر

سرّعت Hugging Face استدلال LLM بنسبة 22% عبر batching غير متزامن

فعّلت Hugging Face التنفيذ غير المتزامن في استدلال LLM. وبدلًا من عمل CPU وGPU بالتناوب، أصبحا يعملان بالتوازي: بينما يحسب GPU دفعة، يجهّز CPU الدفعة التالية. ا

سرّعت Hugging Face استدلال LLM بنسبة 22% عبر batching غير متزامن
المصدر: Hugging Face Blog. كولاج: Hamidun News.
◐ استمع للمقال

وجدت Hugging Face طريقة بسيطة لتسريع توليد الرموز في نماذج اللغات الكبيرة بنسبة 22% — ببساطة بجعل وحدة المعالجة المركزية ووحدة معالجة الرسومات تعملان في نفس الوقت بدلاً من انتظار إحداهما الأخرى. وهذا لا يتطلب إعادة تدريب النماذج أو خوارزميات جديدة.

ما كانت المشكلة

في المعالجة المجمعة المتزامنة النموذجية، تقوم وحدة المعالجة المركزية بتحضير البيانات، ثم تقوم وحدة معالجة الرسومات بحسابها، ثم تنتظر وحدة المعالجة المركزية النتائج وتحضر الدفعة التالية. تصبح وحدة معالجة الرسومات عاطلة حوالي 24% من الوقت — بينما تتعامل وحدة المعالجة المركزية مع المعالجة المسبقة. إنها مثل خط التجميع حيث في كل خطوة ينظر شخص ما إلى الساعة. حتى لو كانت وحدة المعالجة المركزية تعمل بكامل طاقتها، فهي أبطأ من أبسط عملية حسابية لوحدة معالجة الرسومات، لذلك تجلس بطاقة الرسومات وتنتظر بيانات جديدة. في المعالجة المجمعة المتزامنة، أنتجت نموذج بـ 8 مليارات معامل بحجم دفعة 32، 8000 رمز في 300 ثانية مع نشاط وحدة معالجة الرسومات بنسبة 76% فقط.

كيف تحل عدم التزامن المشكلة

الفكرة بسيطة للغاية: تشغيل وحدة المعالجة المركزية ووحدة معالجة الرسومات بالتوازي من خلال تدفقات CUDA. يتم استخدام ثلاثة تدفقات مستقلة — أحدها لنقل البيانات إلى وحدة معالجة الرسومات (H2D)، وواحد للعمليات الحسابية الفعلية (Compute)، وواحد للنقل العكسي (D2H). يعيد كل تدفق التحكم إلى وحدة المعالجة المركزية فوراً دون حجبه. يتم وضع أحداث CUDA بين التدفقات — علامات تضمن الترتيب الصحيح:

  • يضع تدفق H2D علامة على الوقت الذي يتم فيه تحميل البيانات في وحدة معالجة الرسومات
  • ينتظر تدفق Compute هذه العلامة، يحسب، يضع علامته الخاصة
  • ينتظر تدفق D2H اكتمال العملية الحسابية ويسترجع النتائج

بينما تحسب وحدة معالجة الرسومات الدفعة N، تقوم وحدة المعالجة المركزية بالفعل بتحضير الدفعة N+1 في منطقة ذاكرة مختلفة. لا انتظار، فهما يعملان بالتوازي.

الحيلة الرئيسية للنقل المتكرر

التعقيد هو أنه عندما تمتد الطلب على عدة دفعات، تصبح رموز الإخراج من الدفعة N مدخلات للدفعة N+1. حلت Hugging Face هذا باستخدام العناصر النائبة: عند تحضير الدفعة N+1، يتم وضع أصفار حيث ستذهب مدخلات الرموز المستقبلية، وعندما تكتمل الدفعة N، يتم استبدال الأصفار بقيم حقيقية.

«يسمح هذا لوحدة المعالجة المركزية بتحضير الدفعة التالية دون انتظار نتائج الدفعة الحالية،» تشرح

Hugging Face. يتم الحفاظ على كل شيء معاً باستخدام رسوم بيانية CUDA مع مجمع ذاكرة مشترك، مما يوفر حتى ذاكرة الفيديو.

الأرقام تتحدث بنفسها

قبل التحسين: وحدة معالجة الرسومات نشطة 76%، توليد 8000 رمز — 300.6 ثانية. بعد: وحدة معالجة الرسومات نشطة 99.4%، نفس الرموز — 234.5 ثانية. التسريع بنسبة 22% — تقريباً الحد الأقصى النظري لهذه البنية (كان الحد الأقصى النظري 24%).

ماذا يعني هذا

هذا يعني أنك لا تحتاج إلى وحدات معالجة رسومات أكثر تكلفة أو إعادة تدريب النماذج لتحسينات خطيرة في السرعة. الكود موجود بالفعل في مكتبة Transformers، فئة `ContinuousBatchingAsyncIOs`. بالنسبة للشركات التي تولد الكثير من الرموز، يمكن لهذا أن يوفر ملايين على الأجهزة.

ZK
Hamidun News
أخبار الذكاء الاصطناعي بدون ضوضاء. اختيار تحريري يومي من أكثر من 400 مصدر. منتج من جمال حميدون، رئيس الذكاء الاصطناعي في Alpina Digital.
ما رأيك؟
جارٍ تحميل التعليقات…