الذكاء الاصطناعي

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

mm
Memory for Large Language Model Inference

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

فهم متطلبات الذاكرة

تحدد الذاكرة المطلوبة لتحميل LLM في الغالب من خلال عدد المعلمات والدقة العددية المستخدمة لتخزين المعلمات. قاعدة بسيطة هي:

  • تحميل نموذج مع X مليار معلمة يتطلب حوالي 4X GB من VRAM في دقة 32-bit
  • تحميل نموذج مع X مليار معلمة يتطلب حوالي 2X GB من VRAM في دقة 16-bit

على سبيل المثال ، تحميل نموذج GPT-3 ذي 175 مليار معلمة يتطلب حوالي 350GB من VRAM في دقة bfloat16. كما من اليوم ، أكبر بطاقات الرسومات التجارية المتاحة مثل NVIDIA A100 و H100 توفر فقط 80GB من VRAM ، مما يتطلب تقنيات موازاة التنسور ونموذج موازاة.

خلال الاستدلال ، يتمحور بصمة الذاكرة من المعلمات النموذجية والتنشيطات المؤقتة المنتجة. تقدير تقريبي لاستخدام الذاكرة الأقصى خلال الاستدلال هو مجموع الذاكرة المطلوبة لتحميل معلمات النموذج والذاكرة للتنشيطات.

تحديد كمية الذاكرة للاستدلال

دعونا نحدد متطلبات الذاكرة للاستدلال باستخدام نموذج OctoCode ، الذي يحتوي على حوالي 15 مليار معلمة في تنسيق bfloat16 (~ 31GB). سنستخدم مكتبة Transformers لتحميل النموذج وتوليد النص:

from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline
import torch

<p>model = AutoModelForCausalLM.from_pretrained(&quot;bigcode/octocoder&quot;,
torch_dtype=torch.bfloat16,
device_map=&quot;auto&quot;,
pad_token_id=0)
tokenizer = AutoTokenizer.from_pretrained(&quot;bigcode/octocoder&quot;)
pipe = pipeline(&quot;text-generation&quot;, model=model, tokenizer=tokenizer)</p>

<p>prompt = &quot;Question: Please write a Python function to convert bytes to gigabytes.\n\nAnswer:&quot;
result = pipe(prompt, max_new_tokens=60)[0][&quot;generated_text&quot;][len(prompt):]</p>

<p>def bytes_to_gigabytes(bytes):
return bytes / 1024 / 1024 / 1024</p>

<p>bytes_to_gigabytes(torch.cuda.max_memory_allocated())

الإخراج:

29.0260648727417

استخدام الذاكرة الأقصى على GPU هو حوالي 29GB ، وهو يتوافق مع تقديرنا البالغ 31GB لتحميل معلمات النموذج في تنسيق bfloat16.

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

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

دعونا نرى مدى توفير الذاكرة من كمية 8 بت و 4 بت لنموذج OctoCode:

&amp;lt;/div&amp;gt;
# 8-bit كمية
model = AutoModelForCausalLM.from_pretrained(&quot;bigcode/octocoder&quot;, load_in_8bit=True,
pad_token_id=0)
pipe = pipeline(&quot;text-generation&quot;, model=model, tokenizer=tokenizer)
result = pipe(prompt, max_new_tokens=60)[0][&quot;generated_text&quot;][len(prompt):]
bytes_to_gigabytes(torch.cuda.max_memory_allocated())&lt;/pre&gt;
الإخراج:
15.219234466552734
# 4-bit كمية
model = AutoModelForCausalLM.from_pretrained(&quot;bigcode/octocoder&quot;, load_in_4bit=True,
low_cpu_mem_usage=True, pad_token_id=0)
pipe = pipeline(&quot;text-generation&quot;, model=model, tokenizer=tokenizer)
result = pipe(prompt, max_new_tokens=60)[0][&quot;generated_text&quot;][len(prompt):]
bytes_to_gigabytes(torch.cuda.max_memory_allocated())

الإخراج:

9.543574333190918

مع كمية 8 بت ، يتقلص متطلب الذاكرة من 31GB إلى 15GB ، بينما يقلل كمية 4 بت من ذلك إلى 9.5GB فقط! هذا يسمح بتشغيل نموذج OctoCode ذي 15 مليار معلمة على بطاقات الرسومات المستهلكة مثل RTX 3090 (24GB VRAM).

然而 ، يجب ملاحظة أن كمية أكثر عدوانية مثل 4 بت يمكن أن تؤدي أحيانًا إلى تدهور الدقة مقارنة بدقة 8 بت أو bfloat16. هناك توازن بين توفير الذاكرة والدقة التي يجب على المستخدمين تقييمها لاستخدامهم.

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

تقييم الذاكرة للضبط

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

استهلاك الذاكرة الأقصى أثناء الضبط عادة ما يكون 3-4 مرات أعلى من الاستدلال بسبب متطلبات الذاكرة الإضافية ل:

  • المتغيرات
  • حالات المُحسِّن
  • التنشيطات من المرور الأمامي المخزنة للخلف

تقدير محافظ هو أن ضبط LLM مع X مليار معلمة يتطلب حوالي 4 * (2X) = 8X GB من VRAM في دقة bfloat16.

على سبيل المثال ، ضبط نموذج LLaMA ذي 7 مليار معلمة يتطلب حوالي 7 * 8 = 56GB of VRAM لكل وحدة معالجة رسومات في دقة bfloat16. هذا يتجاوز سعة الذاكرة الحالية للوحدات ، مما يتطلب تقنيات ضبط موزعة.

تقنيات الضبط الموزعة

تم اقتراح عدة طرق للضبط الموزعة للتغلب على قيود الذاكرة للوحدات:

  1. الموازاة البيانية: يكرر هذا النهج النموذج بأكمله عبر وحدات معالجة متعددة بينما يقسم ويوزع مجموعات البيانات. هذا يقلل من وقت التدريب بشكل خطي مع عدد الوحدات ولكن لا يقلل من متطلب الذاكرة الأقصى على كل وحدة.
  2. ZeRO Stage 3: شكل متقدم من الموازاة البيانية يقسم معلمات النموذج والمتغيرات وحالات المُحسِّن عبر الوحدات. يقلل من الذاكرة مقارنة بالموازاة البيانية التقليدية من خلال الاحتفاظ فقط بالبيانات المقسمة المطلوبة على كل وحدة خلال مراحل مختلفة من التدريب.
  3. الموازاة التنسورية: بدلاً من تكرار النموذج ، تقسم الموازاة التنسورية معلمات النموذج إلى صفوف أو أعمدة وتوزعها عبر الوحدات. تعمل كل وحدة على مجموعة مقسمة من المعلمات والمتغيرات وحالات المُحسِّن ، مما يؤدي إلى توفير كبير في الذاكرة.
  4. الموازاة الأنبوبية: تقسم هذه التقنية طبقات النموذج عبر وحدات مختلفة ، حيث تنفذ كل وحدة مجموعة فرعية من الطبقات. يتم تمرير التنشيطات بين العمال ، مما يقلل من الذاكرة الأقصى ولكنه يزيد من أعباء الاتصال.

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

حل LLMem

اقترح الباحثون مؤخرًا LLMem ، وهو حل يقدّر استخدام الذاكرة على GPU بدقة عند تطبيق تقنيات الضبط الموزعة على LLM عبر وحدات متعددة.

تقييم استخدام الذاكرة على GPU لضبط LLM

تقييم استخدام الذاكرة على GPU لضبط LLM

يأخذ LLMem في الاعتبار عوامل مثل إعادة تجميع المعلمات قبل الحساب (ZeRO Stage 3) وجمع الإخراج في المرور الخلفي (الموازاة التنسورية) و استراتيجيات تخصيص الذاكرة المختلفة لجسم الترانسفورمر ورأس نمذجة اللغة.

تظهر النتائج التجريبية أن LLMem يمكن أن يقدّر استخدام الذاكرة الأقصى على GPU لضبط LLM بمتوسط خطأ يصل إلى 1.6% ، متجاوزًا معدل الخطأ المتوسط ل DNNMem البالغ 42.6%. عند تطبيق تقنيات الضبط الموزعة على LLM مع أكثر من مليار معلمة على وحدات متعددة ، يصل LLMem إلى معدل خطأ متوسط يبلغ 3.0%.

من خلال تقدير متطلبات الذاكرة بدقة مسبقًا ، يمكن لـ LLMem مساعدة المستخدمين في اختيار أكثر طريقة ضبط موزعة فعالة والتي تتجنب مشاكل الذاكرة بينما تقلل من وقت التدريب.

تقنيات ناشئة

في حين أن الكمية والموازاة التنسورية ونموذج موازاة هي تقنيات محددة ، يستمر الباحثون في استكشاف طرق جديدة لتحسين تدريب وتنفيذ LLM.

  1. LoRA و QLoRA: تتضمن هذه التقنيات تدريب وحدة محسّن صغيرة لتحديث LLM المسبق التدريب بمعرفة جديدة بدلاً من ضبط عدد كبير من المعلمات مباشرة.
  2. FlashAttention: آليات الانتباه هي عائق في الذاكرة والحساب في نماذج الترانسفورمر. تقارب FlashAttention الانتباه القياسي مع تعقيد خطي ، مما يقلل من متطلبات الذاكرة من二次 إلى خطي في طول التسلسل.
  3. مزيج الخبراء: هذه الطريقة توجيه كل عينة بيانات مدخلة إلى نموذج خبير متخصص بدلاً من معالجتها من خلال النموذج بأكمله. يمكن أن يوفر هذا النشاط الديناميكي الذاكرة عن طريق تفعيل مجموعة فرعية فقط من الخبراء لكل عينة.
  4. جراحة النموذج المعكوسة: استكشف الباحثون الضغط الجراحي للنموذج عن طريق إزالة المكونات الأقل أهمية مثل رؤوس الانتباه بشكل متكرر لتجارة الذاكرة / السرعة مقابل الدقة.
  5. التنزيل: أخيرًا ، يمكن أن تعمل التقنيات التي تنزل المعلمات أو حالات المُحسِّن أو التنشيطات إلى ذاكرة CPU أو القرص كمكمل لذاكرة GPU المحدودة للنماذج الكبيرة.

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

الختام

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

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

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

سيكون تحقيق التوازن الصحيح بين سعة النموذج والدقة واستخدام الموارد حاسمًا لفك شفرة إمكانيات النماذج اللغوية الكبيرة عبر مجالات وcases مختلفة.

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

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