هندسة المحفزات

تسريع استدلال نموذج اللغة الكبيرة: تقنيات للنشر الكفء

mm
أضف Unite.AI إلى مصادرك المفضلة على Google
LLM Inference Speed up

النماذج الكبيرة للغة (LLM) مثل GPT-4 و LLaMA و PaLM تدفع حدود ما هو ممكن مع معالجة اللغة الطبيعية. ومع ذلك ، فإن نشر هذه النماذج الضخمة في بيئات الإنتاج يعرض تحديات كبيرة من حيث المتطلبات الحاسوبية ، واستخدام الذاكرة ، والكفاءة ، والتكلفة. مع استمرار نمو النماذج الكبيرة وأكثر قدرة ، تحسين أداء الاستدلال هو أمر بالغ الأهمية للتطبيقات الواقعية.

في هذا الغوص التقني ، سنستكشف تقنيات متقدمة لتسريع استدلال LLM ، مما يتيح أوقات استجابة أسرع ، وزيادة الإنتاجية ، واستخدام أكثر كفاءة للموارد الحاسوبية. سنغطي الطرق التي تتراوح من تقنيات الدقة العددية إلى آليات الانتباه المبتكرة إلى الابتكارات المعمارية المخصصة بشكل صريح للتنمية النصية الكفء.

دعونا نبدأ بفهم لماذا يعتبر استدلال LLM تحديًا كبيرًا مقارنة بنماذج معالجة اللغة الطبيعية التقليدية.

تحدي الاستدلال مع نماذج اللغة الكبيرة

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

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

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

بالإضافة إلى ذلك ، غالبًا ما تتطلب النماذج الكبيرة للغة تسلسلات مدخلات طويلة (تحفيزات) لتحديد السياق اللازم لإنشاء نص عالي الجودة. أطوال المدخلات الأطول تتطلب المزيد من الذاكرة لتخزين الحالات والمتجهات الانتباهية الوسيطة ، مما يزيد من عبء الموارد الحاسوبية.

مع هذه التحديات الفريدة ، يمكن أن تقصر تقنيات التحسين التقليدية مثل الكمية والرسوم البيانية الحسابية الثابتة عن الحفاظ على أداء النماذج الكبيرة للغة أثناء تقديم تسريعات ملحوظة. دعونا نغوص في بعض الاستراتيجيات الرئيسية المخصصة بشكل صريح لتسريع استدلال LLM.

تقنيات الدقة العددية

From 32-Bit to 16-Bit Precision

من 32 بت إلى 16 بت الدقة

ممر واحد لتسريع استدلال LLM هو الاستفادة من الدقة العددية المنخفضة لوزن النموذج والتنشيطات. الإطارات الحديثة للتعلم العميق مثل PyTorch و TensorFlow تستخدم بشكل عام دقة الفاصلة العائمة 32 بت (FP32) افتراضيًا. ومع ذلك ، أظهر البحث أن النماذج الكبيرة للغة يمكنها في كثير من الأحيان الحفاظ على دقة عالية حتى عند العمل بدقة أقل ، مثل 16 بت (FP16) ، أو 8 بت أعداد صحيحة (INT8) ، أو حتى 4 بت أعداد صحيحة (INT4).

تقليل الدقة العددية يقدم عدة مزايا:

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

في حين أن تقنيات الدقة العددية قوية ، فإنها تroduce بعض فقدان الدقة مقارنة بتشغيل FP32. المفتاح هو تقييم هذه التجارة بين المكاسب الحاسوبية والانخفاض المحتمل في الأداء لケース الاستخدام الخاص بك.

هناك طريقتان رئيسيتان للكمية مع LLM:

الكمية بعد التدريب (PTQ): في هذه الطريقة ، يتم تدريب LLM أولاً باستخدام دقة FP32 القياسية. بعد التدريب ، يتم تحويل أوزان النموذج إلى تنسيق دقة أقل مثل INT8 أو INT4. PTQ بسيط في التنفيذ ولكن يمكن أن يؤدي إلى انخفاض أكبر في الدقة.

الكمية الحساسة للتدريب (QAT): مع QAT ، يتم محاكاة عملية الكمية خلال مرحلة التدريب نفسها. هذا يسمح للنموذج بالتعلم لتعويض عن أخطاء الكمية ، مما يقلل من تدهور الدقة عند نشر النموذج المكمم最終.

للتطبيق العملي ، قد يستفيد المرء من النماذج المكممة الموجودة على منصات مثل Hugging Face ، التي تستضيف مجموعة من النماذج المُحسنة من خلال طرق كمية مختلفة. على سبيل المثال ، إذا كان المرء يرغب في تحميل نموذج LLaMA-2-7b المكمم باستخدام Auto-GPTQ ، فيمكن للمستخدمين تحميله بسهولة باستخدام مكتبة المُحولات من Hugging Face. بالإضافة إلى ذلك ، لكمية نموذج ، يمكن استخدام أدوات مثل AutoGPTQ ، التي تدمج بشكل متكامل مع المكتبات الحالية لضغط النموذج بكفاءة.

هنا مثال على تحميل نموذج LLaMA-2-7b المكمم باستخدام مكتبة المُحولات من Hugging Face:

from transformers import AutoModelForCausalLM, AutoTokenizer

<p>model_id = &quot;TheBloke/Llama-2-7b-Chat-GPTQ&quot;
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id)
And for custom quantization, one might follow these steps using the AutoGPTQ toolkit:</p>

<p>from transformers import AutoModelForCausalLM, AutoTokenizer, GPTQConfig</p>

<p>model_id = &quot;llama-2-7b-original&quot;
tokenizer = AutoTokenizer.from_pretrained(model_id)
quantization_config = GPTQConfig(bits=4, dataset=&quot;your-dataset&quot;, tokenizer=tokenizer)
model = AutoModelForCausalLM.from_pretrained(model_id, quantization_config=quantization_config)</p>

تذكر أن الكمية قد تتطلب تعديل ما بعد الكمية أو هندسة التحفيز للحفاظ على جودة النموذج. لكمية جديدة ، يمكن للمرء المساهمة في المجتمع عن طريق دفع نماذجهم المكممة إلى منصات مثل Hugging Face.

احرص دائمًا على تحقيق التوازن بين حجم النموذج والمتطلبات الحاسوبية والأداء عند اختيار استراتيجية الكمية لケース الاستخدام الخاص بك.

 

خوارزمية الانتباه الفلاش

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

خوارزمية الانتباه الفلاش ، المقدمة في ورقة FlashAttention ، توفر نهجًا أكثر كفاءة في الذاكرة وموازیة ودية لعملية الانتباه. بدلاً من إعادة حساب قيم الانتباه لكل رمز ، تخزين الانتباه الفلاش واعادة استخدام مصفوفات المفتاح / القيمة الوسيطة ، وتجنب الحسابات الزائدة.

هذه التحسين لا يقلل فقط من العبء الحاسوبي ، بل يحسن أيضًا أنماط الوصول إلى الذاكرة ، مما يؤدي إلى استخدام أفضل ل帯عة الذاكرة وتمويلي وحدات المعالجة المركزية.

على الرغم من أن تفاصيل الانتباه الفلاش معقدة ، فإن الفكرة العامة هي تقسيم عملية الانتباه إلى مرحلتين:

  1. تضمين Prefix Sum: هذه المرحلة تحسب وتخزين تضمينات المفتاح / القيمة لجميع الرموز المدخلة ، مما يسمح بالاستخدام الفعال خلال التوليد.
  2. انتباه سببي: عملية الانتباه الفعلية ، الآن محسنة للاستفادة من تضمينات المفتاح / القيمة المخزنة من المرحلة الأولى.

من خلال فصل هذه المراحل ، يمكن للانتباه الفلاش الاستفادة من عمليات وحدات المعالجة المركزية الموازیة عاليًا ، مما يسرع بشكل كبير من عرقوبة الانتباه في استدلال LLM.

هنا توضيح موجز لمفهوم تنفيذ الانتباه الفلاش مع LLM:

from transformers import AutoModelForCausalLM
import torch
from flash_attention import flash_attention

<p># تحميل نموذج LLM مثل OctoCoder
model = AutoModelForCausalLM.from_pretrained(&quot;bigcode/octocoder&quot;)</p>

<p># تحفيز نظام عينة يوجه النموذج نحو كونه مساعدًا أفضل للبرمجة
system_prompt = &quot;&quot;&quot;... (تفاصيل تحفيز النظام) ...&quot;&quot;&quot;</p>

<p># تحضير مدخل أطول مع تحفيز النظام
long_prompt = system_prompt + &quot;سؤال: من فضلك اكتب دالة في Python لتحويل البايت إلى جيجابايت.&quot;</p>

<p># تحويل النموذج إلى تحسين الانتباه الفلاش
model.to_bettertransformer()</p>

<p># تشغيل النموذج مع الانتباه الفلاش
start_time = time.time()
with torch.backends.cuda.sdp_kernel(enable_flash=True):
result = model.generate(long_prompt, max_new_tokens=60)
print(f&quot;تم إنشاؤه في {time.time() - start_time} ثواني.&quot;)

على الرغم من أن الانتباه الفلاش يقدم مكاسب أداء مثيرة للإعجاب ، إلا أنه يعمل داخل المعمارية الحالية للمحولات. لتحقيق إمكانات استدلال LLM المُسرع بالكامل ، يجب استكشاف الابتكارات المعمارية المخصصة بشكل صريح لهذه المهمة.

تقليم LLM

تقليم LLM هو تقنية لتقليل حجم النموذج مع الحفاظ على الوظيفة. يستخدم تقديرًا зависим بالبيانات لاهمية الوزن dựa على تقديرات مصفوفة هيسيان. في التقليم ، يتم إزالة مجموعات الأوزان الأقل أهمية ، ثم يتم تعديل النموذج لاستعادة الدقة. حزمة LLM-Pruner توفر سكريبتات للتقليم مع استراتيجيات دعم مختلفة. يتضمن التقليم اكتشاف التبعيات ، وتقدير مساهمات المجموعة ، ومرحلة الاسترداد التي تتضمن تعديلًا قصيرًا بعد التدريب.

هنا مثال مبسط على استخدام LLM-Pruner لنموذج LLaMA:

from transformers import AutoModelForSequenceClassification
from pruning import LLMPruner

<p># تحميل نموذج LLaMA المُتدرب مسبقًا
model = AutoModelForSequenceClassification.from_pretrained(&quot;llama-base&quot;)</p>

<p># تهيئة المُقلم مع التكوين المُراد
pruner = LLMPruner(
model,
pruning_ratio=0.25,
block_mlp_layers=(4, 30),
block_attention_layers=(4, 30),
pruner_type=&#039;taylor&#039;
)</p>

<p># تنفيذ التقليم
pruned_model = pruner.prune()</p>

<p># تعديل النموذج المُقلم
pruned_model.fine_tune(training_data)

يمثل هذا المخطط رمزًا لتحميل نموذج LLaMA المُتدرب مسبقًا ، وتهيئة المُقلم مع تكوين معين (مثل الطبقات التي يجب تقليمها ونوع المُقلم) ، وتنفيذ عملية التقليم ، وأخيرًا تعديل النموذج المُقلم.

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

الابتكارات المعمارية للتنمية النصية الكفء

معمارية المحولات ، على الرغم من كفاءتها العالية لمهام معالجة اللغة ، تم تصميمها كمُحول تسلسلي عام. عند نشر النماذج الكبيرة للغة لمهام إنشاء نص مع سياقات مدخلة طويلة ، وجد الباحثون أن المعماريات المخصصة يمكن أن تحسن بشكل كبير كفاءة الاستدلال دون التضحية بالجودة.

هنا بعض الابتكارات المعمارية الرئيسية التي تمكن من تسريع استدلال LLM:

Alibi: معمارية Alibi ، المقدمة في ورقة PAL-Instruction ، تفصل نمذجة السياق المدخل الطويل عن عملية إنشاء النص نفسها. يستخدم تمثيلًا مضغوطًا للسياق المدخل (ال “عذر” ) لتهيئة عملية التوليد ، وتجنب الحاجة إلى معالجة التسلسل المدخل الكامل بشكل متكرر خلال التوليد التكراري.

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

انتباه الاستفسار المتعدد (MQA): في الانتباه التقليدي ، يركز كل رمز مُخرج على التسلسل المدخل بالكامل ، مما يؤدي إلى حسابات زائدة. يُعاد صياغة MQA لعملية الانتباه لتقاسم الحسابات عبر رموز مُخرجات متعددة ، مما يقلل من التعقيد العام.

انتباه الاستفسار المتعدد

انتباه الاستفسار المتعدد

انتباه الاستفسار المجمّع (GQA): بناءً على MQA ، يقوم GQA بتقسيم رموز المُخرجات إلى مجموعات ويتحكم في الانتباه بشكل مشترك لكل مجموعة. يقلل هذا النهج من المتطلبات الحاسوبية مع الحفاظ على جودة توليد النص العالية.

على الرغم من أن هذه الابتكارات المعمارية لا تزال قيد البحث والتطوير ، إلا أنها أظهرت تسريعات مثيرة للإعجاب لاستدلال LLM ، خاصة عند الجمع بينها وبين تقنيات مثل الانتباه الفلاش وتحسين الدقة العددية.

نشر العالم الحقيقي

عندما يتعلق الأمر بنشر النماذج الكبيرة للغة في بيئات الإنتاج ، هناك العديد من الاعتبارات العملية والترادفات التي يجب مراعاتها:

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

الدفعة والتوازي: للاستفادة الكاملة من التمويل الحاسوبي ، يمكن أن تساعد استراتيجيات مثل استدلال الدفعة (معالجة عدة مدخلات في نفس الوقت) وتمويلي النموذج (توزيع LLM عبر أجهزة متعددة) في تعزيز الإنتاجية بشكل كبير.

الكمية مقابل الجودة: درجة الكمية (8 بت ، 4 بت ، إلخ) ستؤثر بشكل مباشر على سرعة الاستدلال واستخدام الذاكرة ، ولكنها ستؤثر أيضًا على جودة الإخراج. يجب تقييم هذه التجارة بعناية لケース الاستخدام الخاص بك.

استخلاص النموذج: بديل للكمية ، يمكن أن تقنيات استخلاص النموذج ضغط النماذج الكبيرة إلى نماذج طالب أصغر وأكثر كفاءة مع الحفاظ على دقة عالية.

الแคش وتحسين وقت التشغيل: يمكن أن توفر أوقات تشغيل التعلم العميق المُحسنة مثل TensorRT من NVIDIA (NVDA ) و الإطارات المصممة للخدمة LLM (مثل حزمة Composable Inference Suite من MosaicML) تحسينات كبيرة في الأداء من خلال تقنيات مثل اندماج المشغل ، وتحسين النواة ، و استراتيجيات التخزين الذكية.

مسار نشر LLM الأمثل غالبًا ما يتضمن الجمع بين عدة تقنيات مع مراعاة احتياجات تطبيقك المحددة ، قيود البنية التحتية ، وأهداف الأداء.

الخلاصة

مع استمرار تطور النماذج الكبيرة للغة بسرعة ، يصبح تسريع أداء الاستدلال أكثر أهمية لتمكين التطبيقات الواقعية وتسهيل الوصول إلى هذه القدرات الذكية.

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

في المستقبل ، يمكننا期待 استمرار البحث والتطوير في هذا المجال ، مدفوعًا بالطلب المتزايد على نماذج اللغة الأكثر قدرة وسهولة الوصول. من تسريع الأجهزة إلى ضغط النماذج وصولاً إلى معماريات جديدة بالكامل ، بقاء استدلال LLM الكفء يظل حقلًا مثيرًا في معالجة اللغة الطبيعية والذكاء الاصطناعي.

لقد قمت بإنفاق الخمس سنوات الماضية في غمرة العالم المثير للاهتمام من التعلم الآلي والتعلم العميق. وقد أدت شغفي وخبرتي إلى المساهمة في أكثر من 50 مشروعًا متنوعًا في هندسة البرمجيات، مع التركيز بشكل خاص على الذكاء الاصطناعي والتعلم الآلي. كما أدت فضولي المستمر إلى جذبي نحو معالجة اللغة الطبيعية، وهو مجال أنا متحمس لاستكشافه بشكل أكبر.