Sunday, 23 August 2026 | التحديث اليومي نظرة ثاقبة للذكاء الاصطناعي، مكتوبة للبناة

دعم vLLM متعدد الوسائط: تشغيل النماذج متعددة الوسائط باستخدام vLLM

  • «vLLM omni» يشير في الغالب إلى التشغيل متعدد الوسائط النماذج (نص + رؤية + صوت + فيديو) على خادم الاستنتاج vLLM — وأكثرها شيوعًا نماذج شركة علي بابا Qwen2.5-Omni المجموعة.
  • أضاف vLLM دعم النماذج متعددة الوسائط تدريجيًّا بدءًا من الإصدارات 0.6.x/0.7.x؛ يُرجى التحقق من vllm --version وصفحة النموذج على Hugging Face للحصول على أدنى إصدار مطلوب.
  • التشغيل باستخدام الأمر vllm serve Qwen/Qwen2.5-Omni-7B --trust-remote-codeثم إرسال طلبات متعددة الوسائط المتوافقة مع واجهة برمجة تطبيقات OpenAI تحتوي على أجزاء image_url, audio_urlأو video_url .
  • يتوقع استهلاك ٢٠–٤٠ جيجابايت من ذاكرة VRAM لنموذج متعدد الوسائط بحجم ٧ مليار معلَّمة عند استخدام تنسيق bf16؛ لذا يُرجى استخدام حاسبة الذاكرة VRAM قبل شراء الأجهزة.

vLLM omni ليست منتجًا منفصلًا. بل هي اختصارٌ لاستخدام في إل إل إم — محرك استنتاج النماذج اللغوية الكبيرة عالي الإنتاجية — لتشغيل متعدد الوسائط النماذج متعددة الوسائط، أي النماذج التي تقبل المدخلات النصية والصور والصوت والفيديو ضمن محادثة واحدة. وفي الواقع، يشير هذا في الغالب إلى سلسلة نماذج شركة علي بابا Qwen2.5-Omni ، رغم أن نظام vLLM متعدد الوسائط يتعامل أيضًا مع النماذج البصرية فقط أو الصوتية فقط عبر نفس واجهة البرمجة.

يغطي هذا الدليل معنى مصطلح «omni» داخل سياق vLLM، والنماذج المدعومة، وكيفية تثبيتها وتشغيلها، وشكل تنسيق الطلبات، وأهم القيود الحالية.

معنى «Omni» في سياق vLLM

يصنِّف النظام الفرعي متعدد الوسائط في vLLM النماذج حسب الوسائط التي تقبلها كمدخلات. والفئات ذات الصلة هي:

الفئةالمدخلاتنماذج أمثلة
نصية فقطنصLlama 3، Mistral، Qwen2.5
لغوية بصرية (VLM)نص + صورةLlama 3.2 Vision، Pixtral، Qwen2-VL
لغوية صوتيةنص + صوتQwen2-Audio، Ultravox
متعددة الوسائطنص + صورة + صوت + فيديوQwen2.5-Omni، MiniCPM-o

تشارك النماذج متعددة الوسائط عمود لغويًّا واحدًا مع مشفرات منفصلة لكل وسيلة (مثل ViT للصور وإطارات الفيديو، ومشفر صوتي مستند إلى هندسة Whisper، وهكذا). وتتمثل مهمة vLLM في جدولة هذه المشفرات، وتخزين مخرجاتها مؤقتًا في الذاكرة المؤقتة، ودمجها مع تدفق الرموز النصية داخل ذاكرة التخزين المؤقت KV للحفاظ على ارتفاع الإنتاجية.

يكون الإخراج الناتج عن عملية التوليد في vLLM نصيًّا. فإذا كنت ترغب في قدرة الإخراج الصوتي التي يدعمها نموذج Qwen2.5-Omni بشكل أصلي (إعادة توليد الكلام)، فستحتاج حاليًّا إلى التنفيذ المرجعي من مطوري النموذج — إذ سيقدِّم لك vLLM النسخة النصية فقط دون الموجة الصوتية. وهذه أكبر نقطة يجب فهمها قبل اختيار vLLM لأي مهمة متعددة الوسائط.

النماذج المدعومة متعددة الوسائط

توجد القائمة الرسمية في وثائق vLLM تحت قسم النماذج المدعومة ← النماذج اللغوية متعددة الوسائط. وبصفتها مرجعًا ثابتًا، فإن العائلات التالية تحظى بدعم رسمي منذ فترة طويلة:

  • Qwen2.5-Omni (٣ مليارات، ٧ مليارات معلَّمة) — النموذج «الكلاسيكي» متعدد الوسائط، يقبل المدخلات النصية والبصرية والصوتية والمرئية، ويُخرِج نصًّا.
  • MiniCPM-o 2.6 — نموذج متعدد الوسائط بحجم ٨ مليارات معلَّمة من OpenBMB.
  • Qwen2-VL / Qwen2.5-VL — يدعم الرؤية والفيديو فقط، لكنه غالبًا ما يُضمَّن ضمن سير العمل «متعدد الوسائط».
  • Qwen2-Audio — نموذج صوتي فقط يُعتبر مرافقًا.

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

متطلبات الأجهزة

تتميَّز النماذج متعددة الوسائط بأنها أثقل من نظيراتها النصية فقط عند نفس عدد المعلمات، لأنها تحتوي على مشفرات إضافية، ولأن المدخلات البصرية أو الصوتية تستهلك عددًا كبيرًا من الرموز بعد عملية التجزئة. فقد تتحول صورة واحدة بدقةها الأصلية إلى ١٠٠٠–٤٠٠٠ رمز، بينما قد تنتج دقيقة واحدة من الصوت عدة مئات من الرموز.

النموذجالدقةأدنى سعة مطلوبة من ذاكرة VRAM (للأوزان فقط)السعة الموصى بها من الذاكرة VRAM (مع ذاكرة التخزين المؤقت KV وحجم الدفعة > 1)
Qwen2.5-Omni-3Bbf16~8 غيغابايت16–24 جيجابايت
Qwen2.5-Omni-7Bbf16~18 جيجابايت24–40 جيجابايت
Qwen2.5-Omni-7BAWQ / GPTQ 4-bitحوالي ٦ جيجابايت12–20 جيجابايت
MiniCPM-o 2.6 (8B)bf16~20 جيجابايت28–40 جيجابايت

هذه نطاقات عملية، وليست الحدود الدنيا المذكورة في ورقة المواصفات. وللحصول على رقم دقيق يتوافق مع طول السياق وحجم الدفعة المستخدمين لديك، قم بإدخال النموذج في أداة حاسبة الذاكرة VRAM أو راجع مرجع احتياجات ذاكرة VRAM. وإذا لم تكن قد اخترت الأجهزة بعد، فإن الدليل الخاص بـ أفضل وحدات معالجة الرسوميات لتشغيل نماذج اللغة الكبيرة محليًّا يغطي المفاضلات بين مستويات السعة 24 جيجابايت و48 جيجابايت وتعدد بطاقات GPU.

التثبيت

يعتمد vLLM أساسًا على نظام Linux. ولا يُدعم نظام Windows رسميًّا؛ لذا استخدم WSL2 أو حاوية Linux. أما نظام macOS فيحتوي على إصدار يعمل على وحدة المعالجة المركزية فقط، ويمكنه تحميل النماذج الصغيرة تقنيًّا، لكنه غير عملي لتشغيل النماذج الشاملة متعددة الوسائط في بيئة الإنتاج.

Linux (موصى به)

المتطلبات: وحدة معالجة رسوميات GPU متوافقة مع CUDA (قدرة الحوسبة 7.0 فما فوق)، وبرامج تشغيل CUDA 12.x، وPython 3.9–3.12.

# إنشاء بيئة معزولة
python -m venv vllm-env
source vllm-env/bin/activate

# تثبيت vLLM (سيقوم هذا بتثبيت إصدار متوافق من PyTorch تلقائيًّا)
pip install vllm

# تثبيت التبعيات الإضافية المطلوبة عادةً للنماذج الشاملة
pip install librosa soundfile decord

vllm --version

الـ librosa, soundfile، و decord تتعامل حزم البرامج هذه مع فك ترميز الصوت واستخراج إطارات الفيديو. وبعض النماذج الشاملة تقوم باستيرادها تلقائيًّا عبر خيار trust_remote_code؛ لذا فإن تثبيتها مسبقًا يجنبك حدوث فشل في أول طلب.

Windows (عبر WSL2)

قم بتثبيت WSL2 باستخدام توزيعة Ubuntu 22.04 أو 24.04، ثم ثبِّت برنامج تشغيل NVIDIA على نظام Windows (حيث يستخدم الجانب الخاص بـ WSL برنامج التشغيل الخاص بنظام Windows مباشرةً)، وبعد ذلك اتبع خطوات التثبيت الخاصة بنظام Linux داخل بيئة WSL. ولا تحاول تثبيت برنامج تشغيل منفصل لـ NVIDIA داخل WSL — فهذا سيؤدي إلى تعطيل CUDA.

macOS

لا يتوفر دعم CUDA في نظام macOS، كما أن vLLM لا يستهدف واجهة Metal. وللاستدلال متعدد الوسائط محليًّا على رقائق Apple Silicon، استخدم بدلًا من ذلك LM Studio أو بيئات التشغيل القائمة على MLX. إذ إن vLLM ليس الأداة المناسبة لهذا الغرض.

تشغيل نموذج متعدد الوسائط

تشغيل خادم متوافق مع واجهة OpenAI:

vllm serve Qwen/Qwen2.5-Omni-7B 
  --trust-remote-code 
  --dtype bfloat16 
  --max-model-len 32768 
  --limit-mm-per-prompt image=4,audio=2,video=1 
  --port 8000

أبرز العلمات المستخدمة:

  • --trust-remote-code مطلوبة لأن النماذج الشاملة تحتوي على أكواد مخصصة للمعالجة المسبقة ضمن مستودعاتها على Hugging Face.
  • --limit-mm-per-prompt تحدد الحد الأقصى لعدد العناصر لكل وسيلة في كل طلب. وزيادة هذه القيم ترفع من ميزانية المدخلات متعددة الوسائط، لكنها تزيد في الوقت نفسه الضغط على ذاكرة VRAM.
  • --max-model-len يجب تعيينها بشكل صريح، إذ تُحتسب رموز الرؤية والصوت ضمن هذا الحد.
  • --tensor-parallel-size N يُوزَّع التحميل تلقائيًّا على N وحدات GPU إذا كانت سعة البطاقة الواحدة غير كافية.

إرسال طلبات متعددة الوسائط

يقدّم vLLM واجهة برمجة تطبيقات OpenAI الخاصة بالمحادثات وإكمال النصوص (Chat Completions API). أما أجزاء الوسائط المتعددة فهي تتبع اتفاقية مصفوفة المحتوى الخاصة بـ OpenAI:

curl http://localhost:8000/v1/chat/completions 
  -H "Content-Type: application/json" 
  -d '{
    "model": "Qwen/Qwen2.5-Omni-7B",
    "messages": [{
      "role": "user",
      "content": [
        {"type": "text", "text": "صف ما تراه وما تسمعه."},
        {"type": "image_url", "image_url": {"url": "https://example.com/scene.jpg"}},
        {"type": "audio_url", "audio_url": {"url": "https://example.com/clip.wav"}}
      ]
    }]
  }'

إن عميل Python مطابق تمامًا لعميل OpenAI:

from openai import OpenAI
client = OpenAI(base_url="http://localhost:8000/v1", api_key="EMPTY")

resp = client.chat.completions.create(
    model="Qwen/Qwen2.5-Omni-7B",
    messages=[{"role": "user", "content": [
        {"type": "text", "text": "قم بتحويل الكلام إلى نص وملخّصه."},
        {"type": "audio_url", "audio_url": {"url": "file:///data/meeting.wav"}},
    ]}],
)
print(resp.choices[0].message.content)

عناوين البيانات (Data URLs) مثلdata:image/png;base64,...) ومسارات الملفات المحلية مثل file:// تعمل بكفاءة؛ وقد توسع نطاق المخططات المدعومة عبر الإصدارات المختلفة، لذا يُرجى الرجوع إلى وثائق الإصدار المعني إذا لم تعمل إحدى المخططات.

ملاحظات الأداء

  • مرحلة التحضير المبدئي (Prefill) هي المهيمنة. يتطلب ترميز مقطع صوتي مدته دقيقة واحدة أو صورة بدقة 720p معالجة كثيفة على وحدة المعالجة المركزية أو وحدة معالجة الرسومات، وتتم هذه المرحلة قبل إنتاج أول رمز. ويساعد التجميع (Batching) في تحسين الإنتاجية الكلية، لكنه لا يقلل زمن الاستجابة لكل طلب على حدة.
  • الضغط على ذاكرة التخزين المؤقت KV. قد يؤدي تحميل صورة واحدة إلى إضافة آلاف الرموز إلى الذاكرة المؤقتة. لذا قلل قيمة --max-model-len أو خفّض قيمة --limit-mm-per-prompt إذا واجهت خطأ ناتجًا عن نفاد الذاكرة (OOM) أثناء التشغيل تحت ضغط عالٍ.
  • التكميم (Quantisation). تتناسب الإصدارات المكممة بـ 4-bit من Qwen2.5-Omni-7B باستخدام AWQ وGPTQ مع بطاقة سعة 16 جيجابايت، مع فقدان ضئيل نسبيًّا في الجودة عند تنفيذ مهام فهم الرؤية والصوت. ويعتمد توفر هذه الإصدارات على التحميلات التي يقوم بها المجتمع على منصة Hugging Face.
  • التحضير المبدئي المجزأ (Chunked prefill) (مفعّل افتراضيًّا في الإصدارات الحديثة) يُحسّن زمن الاستجابة عند خلط الطلبات متعددة الوسائط مع الطلبات النصية فقط.

متى يجب استخدام vLLM Omni مقابل البدائل الأخرى

الاستخدام المقصودأفضل خيار
للاستخدام في بيئة الإنتاج، مع عدد كبير من المستخدمين المتزامنين، ونظام Linux مع وحدات معالجة رسوميات من NVIDIAفي إل إل إم
للاستخدام المحلي على سطح المكتب، لمستخدم واحد، ونظامي macOS أو WindowsOllama أو LM Studio
تحتاج إلى إخراج صوتي (speech-output) من نموذج Qwen2.5-Omniالتنفيذ المرجعي من مُطَوِّري النموذج
الاستدعاء البسيط لواجهة برمجة التطبيقات المُستضافةقارن الأداء على منصة لوحة تصنيف النماذج اللغوية الكبيرة (LLM)

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

الأسئلة الشائعة

هل يدعم vLLM إخراج الصوت الخاص بنموذج Qwen2.5-Omni؟

لا. يتعامل vLLM مع توليد النصوص من العمود الفقري اللغوي للنموذج فقط. أما رأس فك التشفير الصوتي الاختياري الذي يولّد الاستجابات المنطوقَة في التنفيذ المرجعي لـ Qwen2.5-Omni، فهو غير مدمج في vLLM. وبالتالي، ستحصل فقط على الاستجابة النصية من النموذج، ولإنشاء الصوت ستتطلّب الأمر خطوة منفصلة لتوليد الكلام (TTS)، أو استخدام كود الاستنتاج الأصلي.

هل يمكنني تشغيل نماذج vLLM أومني على بطاقة ذاكرة وصول عشوائي (VRAM) سعة ٢٤ جيجابايت مثل RTX 4090؟

نعم، بالنسبة إلى الإصدارين ٣ مليار ومليارَي معلّمة (3B و7B)، وبخاصة عند استخدام تنسيق bf16 مع سياق قصير نسبيًّا، أو بشكل مريح أكثر عند استخدام تقنيات التكميم AWQ أو GPTQ مع سياقات أطول. وستحتاج إلى ضبط --max-model-len و --limit-mm-per-prompt للبقاء ضمن الحد الأقصى لسعة الذاكرة. وتأكد من ذلك باستخدام حاسبة الذاكرة VRAM قبل الالتزام.

لماذا يفشل طلبي مع ظهور خطأ «trust_remote_code»؟

تأتي النماذج متعددة الوسائط مزوَّدة بمُعالِجات مسبقة مخصصة بلغة بايثون ضمن مستودعاتها على Hugging Face. ولا يقوم vLLM بتنفيذ هذه الشيفرة ما لم تُمرِّر المعامل --trust-remote-code عند بدء تشغيل الخادم. ويجب تفعيل هذا الخيار فقط للمستودعات التي تثق بها تمامًا.

كيف أرسل فيديوًّا إلى نقطة نهاية (endpoint) vLLM أومني؟

استخدم جزء المحتوى (content part) مع "type": "video_url" يشير إلى عنوان URL قابل للوصول إليه أو ملف محلي. ويقوم vLLM بأخذ عيّنات من الإطارات (frames) باستخدام decord؛ وتختلف سياسة أخذ العيّنات وعدد الإطارات المأخوذة حسب النموذج، وهي موثَّقة في بطاقة النموذج (model card). وبما أن الفيديو يستهلك الرموز (التوكينات) بسرعة كبيرة، فاحرص على إبقاء مقاطع الفيديو قصيرة، وعيّن المعامل --limit-mm-per-prompt video=1 ما لم تكن تمتلك كمية وافرة من ذاكرة VRAM.

هل توجد صورة Docker جاهزة لـ vLLM أومني؟

تدعم الصورة الرسمية لـ vllm/vllm-openai على Docker Hub النماذج متعددة الوسائط افتراضيًّا، وذلك حسب إصدار vLLM المحدَّد في العلامة (tag) الخاصة بهذه الصورة. لذا يُفضَّل تحديد علامة محددة بدلًا من الاعتماد على العلامة أحدث إصدار لكي لا يتغيّر إصدار vLLM المطلوب لنموذجك الأومني دون سابق إنذار.

هل يمكن لـ Ollama تشغيل هذه النماذج الأومني بدلًا من ذلك؟

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

بقلم مصطفى إحسان

مصطفى إحسان هو مؤسس ومُحرِّر موقع Convly.ai. وقد أنشأ قاعدة بيانات النماذج الحية للذكاء الاصطناعي الخاصة بالموقع، ومؤشر الأداء السعري الخاص به، بالإضافة إلى الحاسبات المجانية لحساب متطلبات الذاكرة VRAM، وتكاليف واجهة برمجة التطبيقات (API)، والاقتصاديات المرتبطة بالاستضافة الذاتية. ويكتب مصطفى عن أسعار النماذج، ونتائج الاختبارات المعيارية، والأجهزة اللازمة لتشغيل نماذج الذكاء الاصطناعي محليًّا، ويعطي دائمًا الأولوية للأرقام المُقاسة بدقة على الادعاءات التي تطلقها الشركات المصنِّعة.

انتقل إلى الأعلى
Featured on There's An AI For That