Local AI

تقنيات عملية لإدارة ذاكرة وحدة معالجة الرسومات لتشغيل نماذج لغوية كبيرة مُكمّمة على أجهزة المستهلك

وصلت ديمقراطية النماذج اللغوية الكبيرة (LLMs) إلى نقطة حرجة. بينما تهيمن الحلول المؤسسية على السرد، يدفع مجتمع عشاق الذكاء الاصطناعي المحلي حدود ما هو ممكن على بطاقات الرسومات المخصصة للمستهلكين. يتطلب تشغيل نماذج مثل Llama-3 وMistral أو Qwen على بطاقة RTX 3090 أو 4070 Ti واحدة أكثر من مجرد تنزيل نقطة تفتيش؛ فهو يتطلب فهماً صارماً لهيكلية الذاكرة وتحسين الاستدلال.

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

فهم عنق الزجاجة للذاكرة

قبل التحسين، يجب علينا قياس القيد. يتطلب نموذج قياسي يحتوي على 7 مليارات معلمة (7B) بدقة كاملة (FP16) حوالي 14 جيجابايت من ذاكرة الفيديو (VRAM) للأوزان فقط. عند أخذ ذاكرة التخزين المؤقت للقيم الرئيسية (KV cache) في الاعتبار - والتي تنمو خطياً مع طول السياق - والعبء الإضافي لمحرك التنفيذ، حتى بطاقات المستهلك عالية الأداء تواجه صعوبة مع السياقات الطويلة دون استخدام التكميم.

يقلل التكميم من دقة أوزان النموذج من 16 بت إلى 8 بت، أو 4 بت، أو حتى أقل. على سبيل المثال، ينكمش نموذج 7B في تكميم 4 بت (Q4_K_M) إلى حوالي 4-5 جيجابايت. وهذا يحرر مساحة كبيرة من ذاكرة الفيديو لذاكرة التخزين المؤقت للقيم الرئيسية، مما يسمح بنوافذ سياق أطول ومعدل إخراج أعلى.

تعيين الجهاز الاستراتيجي والتحميل الخارجي

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

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

from transformers import AutoModelForCausalLM, AutoTokenizer

model_name = "microsoft/Phi-3-mini-4k-instruct"

# Load model with specific quantization
model = AutoModelForCausalLM.from_pretrained(
    model_name,
    device_map="auto",       # Automatically determines best split
    load_in_4bit=True,       # Enables 4-bit quantization
    bnb_4bit_compute_dtype="float16",
    bnb_4bit_quant_type="nf4", # NormalFloat 4 for better precision
    bnb_4bit_use_double_quant=True
)

tokenizer = AutoTokenizer.from_pretrained(model_name)

في الكود أعلاه، يشير `device_map="auto"` إلى المكتبة لتقسيم طبقات النموذج تلقائياً عبر بطاقات الرسومات المتاحة. إذا كان لديك عدة بطاقات رسومات، فإنها توازن الحمل. إذا كانت ذاكرة الفيديو محدودة، فإنها تنقل الطبقات الأثقل إلى وحدة المعالجة المركزية. للتحكم الدقيق، يمكنك تحديد `device_map={"": 0}` لبطاقة الرسومات 0 يدوياً والتعامل مع الباقي في بايثون.

تحسين حجم الدفعة وطول السياق

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

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

استخدام محركات الاستدلال المتخصصة

بينما تعد المكتبة القياسية `transformers` ممتازة للتجارب، فإن محركات الاستدلال المتخصصة توفر إدارة ذاكرة متفوقة. تستخدم أدوات مثل llama.cpp وMLC LLM نوى محسنة للغاية تقلل من عبء تخصيص الذاكرة. فهي تستخدم تقنيات مثل الانتباه الصفحي (paged attention)، الذي يدير ذاكرة التخزين المؤقت للقيم الرئيسية في كتل ذاكرة غير متجاورة، تماماً مثل الذاكرة الافتراضية في نظام التشغيل، مما يمنع التجزئة ويعظم ذاكرة الفيديو القابلة للاستخدام.

الخاتمة

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

Share: