Local AI

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

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

فهم تسلسل التفريغ

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

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

التنفيذ الخاص بالإطار: Ollama و GGUF

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

# مثال على ملف النموذج لتفريغ متعدد وحدات معالجة الرسومات
FROM llama3.1:70b

# فرض استخدام جميع وحدات معالجة الرسومات المتاحة
PARAMETER num_gpu 999

# ضبط درجة الحرارة للاستقرار
PARAMETER temperature 0.7

ومع ذلك، فإن تعيين num_gpu 999 فقط ليس دائماً الأمثل. بالنسبة لنماذج مثل Llama-3-70B، قد ترغب في تحديد عدد الطبقات التي توجد على GPU 0 مقابل GPU 1 يدوياً لتوازن الحمل. إذا كانت إحدى وحدات معالجة الرسومات تحتوي على ذاكرة VRAM أكثر من الأخرى، فخصص المزيد من الطبقات لوحدة معالجة الرسومات الأكبر.

Hugging Face Accelerate وخريطة الجهاز

عند استخدام مكتبة Hugging Face Transformers، توفر مكتبة accelerate أدوات قوية لإدارة وحدات معالجة الرسومات المتعددة. تحاول حجة device_map="auto" توزيع النموذج بشكل أمثل، ولكن للتحكم الدقيق، يمكنك تحديد خريطة الجهاز صراحةً.

from transformers import AutoModelForCausalLM, AutoTokenizer
from accelerate import dispatch_model, infer_auto_device_map

model_id = "meta-llama/Llama-3-70b"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
    model_id,
    torch_dtype="auto",
    device_map="auto"
)

# التحقق من الطبقات الموجودة على كل جهاز
for name, module in model.named_modules():
    if hasattr(module, 'device'):
        print(f"{name}: {module.device}")

بالنسبة للنوافذ السياقية الكبيرة، ضع في اعتبارك استخدام max_memory لقيود استخدام الذاكرة لكل جهاز، مما يضمن عدم تجاوز ذاكرة التخزين المؤقت KV (KV cache) إلى ذاكرة النظام أثناء التوليد، مما قد يسبب ارتفاعات كبيرة في زمن الاستجابة.

التحسين للنوافذ السياقية الكبيرة

تزيد النوافذ السياقية الكبيرة (على سبيل المثال، 32 ألف أو 128 ألف رمز) بشكل كبير من البصمة الذاكرة لذاكرة التخزين المؤقت للقيمة-المفتاح (KV cache). حتى مع التفريغ المثالي لأوزان النموذج، يمكن أن تستهلك ذاكرة التخزين المؤقت KV جيجابايتات من VRAM. للتخفيف من ذلك، نفذ التقنيات التالية:

  1. Flash Attention 2: مكن هذه الآلية انتباه محسنة لتقليل استخدام الذاكرة أثناء الاستدلال.
  2. تكميم KV Cache: تخزين ذاكرة التخزين المؤقت KV بتنسيق INT8 أو FP16 بدلاً من FP32 لتقليل متطلبات الذاكرة إلى النصف.
  3. Paged Attention: استخدم الأطر التي تدعم PagedAttention (مثل vLLM) لإدارة تجزئة الذاكرة والسماح باستخدام أكثر كفاءة للذاكرة المؤقتة.

الخاتمة

إن تحسين أحمال العمل متعددة وحدات معالجة الرسومات للنوافذ السياقية الكبيرة يتعلق أقل بالقوة الخام وأكثر بكفاءة الهندسة المعمارية. من خلال فهم تسلسل التفريغ والاستفادة من الأدوات الخاصة بالإطار مثل ملف نموذج Ollama أو Hugging Face’s Accelerate، يمكن للمطورين دفع حدود الذكاء الاصطناعي المحلي. راقب دائماً استخدام الذاكرة باستخدام أدوات مثل nvidia-smi وقم بتصميم حلقات الاستدلال الخاصة بك لتحديد الاختناقات. مستقبل الذكاء الاصطناعي المحلي متعدد الأجهزة، وإتقان استراتيجيات التفريغ هذه أمر ضروري لأي شخص جاد بشأن نشر النماذج الكبيرة على الأجهزة الاستهلاكية.

Share: