Local AI

تسريع استنتاج النماذج اللغوية المحلية: غوص عميق في vLLM

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

يستكشف هذا المنشور البنية التحتية وراء vLLM، وسبب تفوقه على الحلول الحالية مثل Transformers الخاصة بـ Hugging Face أو Hugging Face Text Generation Inference (TGI)، وكيفية دمجها في سير عمل الذكاء الاصطناعي المحلي الخاص بك.

لماذا vLLM؟ بنية الكفاءة

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

  1. PagedAttention: على عكس إدارة ذاكرة التخزين المؤقت KV القياسية، يعامل PagedAttention ذاكرة التخزين المؤقت KV كمجموعة من صفحات الذاكرة. يسمح هذا بالتخصيص الديناميكي للذاكرة، مما يلغي عبء تخصيص مخازن مؤقتة ذات حجم ثابت مسبقاً، ويمكّن من زيادة استخدام ذاكرة GPU بنسبة تصل إلى 24 مرة.
  2. التجميع المستمر (Continuous Batching): ينتظر التجميع التقليدي انتهاء أطول تسلسل في المجموعة قبل بدء التكرار التالي. يستخدم vLLM التجميع المستمر، الذي يزيل التسلسلات المنتظمة ويضيف تسلسلات جديدة في كل خطوة، مما يعظم إشغال GPU.
  3. نوى CUDA المحسّنة: تم ضبط النوى الأساسية بدقة لتناسب هياكل البيانات المحددة المستخدمة في استنتاج النماذج اللغوية الكبيرة، مما يقلل من زمن الاستجابة.

التثبيت والإعداد

البدء في استخدام vLLM أمر مباشر، بشرط أن يكون لديك GPU متوافق من NVIDIA والسائقين المناسبين. تتوفر المكتبة عبر pip وتتطلب تثبيت CUDA.

# تثبيت أحدث إصدار من vLLM
pip install vllm

# التحقق من التثبيت
python -c "import vllm; print(vllm.__version__)"

تأكد من أن نظامك يحتوي على سائق NVIDIA المناسب ومجموعة أدوات CUDA مثبتة. يمكنك التحقق من توفر GPU باستخدام القطعة البرمجية التالية:

import torch
print(torch.cuda.is_available()) # يجب أن يعيد True

التطبيق العملي: تقديم نموذج Llama-3 محلياً

لنستعرض مثالاً عملياً لتقديم نموذج Llama-3 الخاص بشركة Meta. سنستخدم واجهة الخادم المدمجة في vLLM لإنشاء نقطة نهاية لواجهة برمجة التطبيقات REST، محاكياً تنسيق واجهة OpenAI API، مما يضمن التوافق مع العملاء الحاليين.

from vllm import LLM, SamplingParams

# تهيئة النموذج. 'meta-llama/Llama-3-8b-Instruct' هو نموذج تمثيلي.
# عدّل 'tensor_parallel_size' إذا كان لديك وحدات معالجة رسومات متعددة.
llm = LLM(model="meta-llama/Llama-3-8b-Instruct")

# تحديد معايير أخذ العينات
sampling_params = SamplingParams(
    temperature=0.7,
    top_p=0.9,
    max_tokens=512
)

# مثال على الموجه (Prompt)
prompt = "اشرح الحوسبة الكمية بمصطلحات بسيطة:"

# توليد المخرجات
outputs = llm.generate([prompt], sampling_params)

# طباعة النتائج
for output in outputs:
    generated_text = output.outputs[0].text
    print(generated_text)

للسيناريوهات المشابهة للإنتاج حيث تحتاج إلى خادم دائم، يمكنك تشغيل خادم vLLM مباشرة من سطر الأوامر:

vllm serve meta-llama/Llama-3-8b-Instruct --host 127.0.0.1 --port 8000

بمجرد التشغيل، يمكنك استعلامه باستخدام عملاء HTTP القياسية:

curl http://localhost:8000/v1/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "meta-llama/Llama-3-8b-Instruct",
    "prompt": "ما هي عاصمة فرنسا؟",
    "max_tokens": 7,
    "temperature": 0
  }'

أفضل الممارسات للنشر المحلي

  • الكمّنة (Quantization): إذا كنت مقيداً بالذاكرة، فكر في استخدام دعم vLLM لـ AWQ (كمّنة الأوزان المدركة للتنشيط) أو GPTQ. يتيح لك ذلك تشغيل نماذج كمّنة بـ 4 بت مع فقدان ضئيل في الجودة.
  • التوازي المعيني (Tensor Parallelism): للنماذج الأكبر من 70 مليار معلمة، استخدم التوازي المعيني لتقسيم النموذج عبر وحدات معالجة رسومات متعددة. اضبط tensor_parallel_size على عدد وحدات معالجة الرسومات المتاحة في تكوينك.
  • المراقبة: راقب استخدام ذاكرة GPU باستخدام أدوات مثل nvidia-smi أو nvtop. يتعامل PagedAttention في vLLM بشكل جيد مع تجزئة الذاكرة، لكن المراقبة تساعد في ضبط أحجام المجموعات.

الخاتمة

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

Share: