الكتابات/blog/2026/06
Blog14 يونيو 2026·6 دقيقة

vLLM لخدمة نماذج LLM في الإنتاج: دليل المطوّر 2026

قدّم نماذج LLM مفتوحة المصدر على نطاق واسع باستخدام vLLM: PagedAttention والتجميع المستمر والتوازي التنسوري وتكميم FP8 وواجهة متوافقة مع OpenAI للإنتاج في 2026.

تشغيل عرض توضيحي لروبوت محادثة على وحدة معالجة رسومات واحدة باستخدام transformers أمرٌ سهل. أما تقديم النموذج ذاته لآلاف المستخدمين المتزامنين دون استنزاف ميزانيتك فمشكلة مختلفة تمامًا. هذه الفجوة — بين دفتر ملاحظات يعمل ونقطة نهاية تصمد أمام حركة مرور الإنتاج — هي بالضبط حيث أصبح vLLM الجواب الافتراضي في 2026.

إذا كان فريقك يستضيف ذاتيًا نماذج مفتوحة المصدر مثل Qwen أو Llama أو Mistral أو DeepSeek بدلاً من الدفع لكل رمز لواجهة مغلقة، فهذا الدليل يشرح ما يفعله vLLM، ولماذا هو سريع، وكيف تنشره لأحمال عمل حقيقية.

لماذا تنهار الخدمة الساذجة

حلقة الاستدلال القياسية في Hugging Face تعالج الطلبات دفعة واحدة في كل مرة. يجب أن تنتهي الدفعة كاملة قبل أن تبدأ التالية، فيؤدي توليد طويل واحد إلى حجب التوليدات القصيرة خلفه. والأسوأ أن ذاكرة وحدة المعالجة المخصصة لـ مخبأ KV — وهو حالة الانتباه المتراكمة لكل رمز في كل تسلسل — تُخصّص ككتلة متجاورة كبيرة لكل طلب، بحجم أسوأ الحالات. ومعظمها يبقى فارغًا.

النتيجة: عادةً ما يتراوح استغلال وحدة المعالجة حول 30–40٪. أنت تدفع ثمن عتاد يقضي معظم وقته في الانتظار. وعلى المسرّعات باهظة الثمن، يمثّل هذا الهدر أكبر بند منفرد في ميزانية الاستدلال.

PagedAttention: الفكرة الجوهرية

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

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

التجميع المستمر

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

الانتقال من التجميع الثابت إلى التجميع المستمر مع PagedAttention يرفع عادةً استغلال وحدة المعالجة من نطاق 30–40٪ إلى 75–90٪، ما يُترجَم إلى نحو 2–4 أضعاف من الرموز المُخرَجة لكل ساعة وحدة معالجة. وعبر الاختبارات المرجعية، يقدّم vLLM غالبًا إنتاجية أعلى بمقدار 2–3 أضعاف من الخدمة الأساسية، وأكثر من ذلك بكثير مقابل حلقات الطلب المفرد الساذجة.

في 2026، يكون محرّك V1 المُعاد كتابته هو الافتراضي. فقد نظّف المجدول، وجعل التعبئة المسبقة المجزّأة قياسية، وحسّن تخزين البادئات — لذا فالمكاسب أعلاه هي ما تحصل عليه جاهزًا، لا بعد ضبط ثقيل.

البدء

التثبيت حزمة واحدة، والخدمة أمر واحد. يكشف vLLM عن خادم متوافق مع OpenAI، وهي الميزة التي تجعل التبنّي سلسًا: أي شيفرة مكتوبة مسبقًا لتعمل مع OpenAI SDK تشير إلى نقطة نهايتك بتغيير عنوان URL واحد.

pip install vllm
 
# تشغيل خادم متوافق مع OpenAI على المنفذ 8000
vllm serve Qwen/Qwen2.5-7B-Instruct \
  --gpu-memory-utilization 0.90 \
  --max-num-batched-tokens 8192

والآن استدعِه تمامًا مثل واجهة OpenAI:

from openai import OpenAI
 
client = OpenAI(
    base_url="http://localhost:8000/v1",
    api_key="not-needed-for-local",
)
 
resp = client.chat.completions.create(
    model="Qwen/Qwen2.5-7B-Instruct",
    messages=[{"role": "user", "content": "اشرح PagedAttention في جملة واحدة."}],
)
print(resp.choices[0].message.content)

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

التوسّع إلى النماذج الكبيرة

يتسع نموذج بحجم 7B بأريحية على وحدة معالجة واحدة. أما نموذج 70B فلا. لذلك يدعم vLLM التوازي التنسوري، الذي يوزّع أوزان كل طبقة عبر عدة وحدات معالجة على عقدة واحدة:

vllm serve meta-llama/Llama-3.3-70B-Instruct \
  --tensor-parallel-size 4 \
  --gpu-memory-utilization 0.90

اضبط --tensor-parallel-size على عدد وحدات المعالجة في الجهاز. وللنماذج الأكبر من أن تتسع على عقدة واحدة، يقسّم التوازي الأنبوبي الطبقات عبر العقد أيضًا. والقاعدة العملية: استخدم التوازي التنسوري داخل الجهاز أولاً، لأنه نهِم لعرض النطاق ويستفيد من الوصلات السريعة داخل العقدة.

التكميم من أجل الإنتاجية والملاءمة

التكميم يقلّص الأوزان ليحتاج النموذج إلى ذاكرة أقل ويتحرّك أسرع. ويدعم vLLM مجموعة واسعة من الطرق — منها FP8 وAWQ وGPTQ وGPTQ-Marlin وbitsandbytes وcompressed-tensors.

مساران عمليان:

  • FP8 على المسرّعات الحديثة هو الخيار الأمثل في 2026. فمعظم النماذج المفتوحة الكبرى (Llama 3.x وMistral وQwen 2.5 وPhi-4) مُتحقَّق منها مع vLLM FP8، وإن لم تتوفّر أوزان مُكمَّمة مسبقًا، يستطيع vLLM التكميم أثناء التنفيذ من الأوزان الأصلية.
  • AWQ خيار قوي حين تريد نحو ضعفَي الإنتاجية مع فقد جودة طفيف على عتاد بلا دعم أصيل لـ FP8.
vllm serve Qwen/Qwen2.5-72B-Instruct-AWQ \
  --quantization awq \
  --tensor-parallel-size 2

العائد ملموس: التكميم يحرّر الذاكرة، والمزيد من الذاكرة الحرة يعني مخبأ KV أكبر، والمخبأ الأكبر يعني تسلسلات متزامنة أكثر، والتزامن الأكبر يعني إنتاجية أعلى. التحسينات تتراكم.

تكوين جاهز للإنتاج

لوحدة معالجة من فئة 80 غيغابايت تخدم نموذجًا متوسط الحجم عبر الإنترنت، تبدو نقطة الانطلاق المعقولة هكذا:

vllm serve <your-model> \
  --gpu-memory-utilization 0.90 \
  --max-num-batched-tokens 16384 \
  --max-model-len 32768 \
  --enable-prefix-caching \
  --tensor-parallel-size 2

بعض الملاحظات حول المقابض الأهم:

  • gpu-memory-utilization — اترك هامشًا (0.90 لا 0.98) كي لا تُطلق ذرى الذاكرة أعطال نفاد الذاكرة تحت الحمل.
  • max-num-batched-tokens — رافعة الإنتاجية مقابل زمن الاستجابة. القيم الأعلى تحزم عملاً أكثر في كل خطوة (جيد للأعمال الدفعية)؛ والأقل تُبقي الردود الفردية سريعة.
  • enable-prefix-caching — مكسب شبه مجاني حين تتشارك طلبات كثيرة موجّه نظام أو قالبًا، بفضل الكتل القابلة للمشاركة التي يتيحها PagedAttention.
  • max-model-len — حُدّ السياق بما تحتاجه فعلاً. حجز مساحة لـ 128 ألف رمز لا تستخدمها يسرق سعة مخبأ KV من حركة المرور الحقيقية.

شغّله خلف مدير عمليات، وضعه على شبكة خاصة، واجعل أمامه وكيلًا عكسيًا يتولّى TLS وتحديد المعدّل. ولأن الواجهة على هيئة OpenAI، يمكن لبوّابة LLM أو موجّه أن يوازن الحمل بين عدة نسخ من vLLM دون أي شيفرة ربط مخصّصة.

لماذا يهم هذا فرق منطقة الشرق الأوسط وشمال إفريقيا

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

ومكاسب الإنتاجية هي ما يجعل هذا ممكنًا لا حلمًا: فالحصول على 3–4 أضعاف من الرموز من كل ساعة وحدة معالجة هو الفارق بين أن تكون الاستضافة الذاتية مركز تكلفة أو توفيرًا حقيقيًا.

الخلاصة

حوّل vLLM خدمة LLM عالية الأداء من مشكلة بحثية إلى أمر من سطر واحد. فـ PagedAttention يستعيد ذاكرة مخبأ KV المهدورة، والتجميع المستمر يُبقي وحدة المعالجة مشغولة، والتوازي التنسوري يتجاوز البطاقة الواحدة، والتكميم يمدّد كل غيغابايت — كل ذلك خلف واجهة متوافقة مع OpenAI تندمج في الشيفرة القائمة.

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

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