كيف يتعامل Ollama مع الطلبات المتزامنة
تهيئة ollama لتنفيذ طلبات متوازية.
عندما يتلقى خادم Ollama طلبين في نفس الوقت، فإن سلوكه يعتمد على إعداداته وموارد النظام المتاحة.
معالجة الطلبات المتزامنة
-
المعالجة المتوازنة: يدعم Ollama معالجة الطلبات المتزامنة. إذا كان النظام يمتلك ذاكرة كافية (RAM للتنبؤ بالمعالجة المركزية، VRAM للتنبؤ بالمعالجة المُستندة إلى وحدة معالجة الرسومات)، يمكن تحميل نماذج متعددة في نفس الوقت، ويمكن لكل نموذج مُحمّل معالجة عدة طلبات متوازنة. يتم التحكم في ذلك عبر المتغير البيئي
OLLAMA_NUM_PARALLEL
، الذي يحدد عدد الطلبات المتوازنة القصوى التي يمكن لكل نموذج معالجتها في وقت واحد. القيمة الافتراضية هي 4 (أو 1، حسب توفر الذاكرة)، ولكن يمكن تعديلها. -
التوحيد: عندما تصل طلبات متعددة لنفس النموذج في وقت واحد، يقوم Ollama بتوحيد هذه الطلبات ويعالجها معًا. هذا يعني أن الطلبات تُعالج بشكل متوازٍ، وسترى المستخدمون استجابات تعود في نفس الوقت. لا يقوم الخادم بالانتظار عن قصد لملء دفعة؛ تبدأ المعالجة بمجرد توفر الطلبات.
الترتيب والحدود
-
الترتيب: إذا تجاوز عدد الطلبات المتزامنة حد التوازي المُعد (على سبيل المثال، أكثر من
OLLAMA_NUM_PARALLEL
طلبات لنفس النموذج)، فإن الطلبات الإضافية تُرتّب. يعمل الترتيب وفقًا لنظام أول من يأتي أول من يُعالج (FIFO). -
حدود الترتيب: يُحدد عدد الطلبات المرتّبة القصوى عبر
OLLAMA_MAX_QUEUE
(القيمة الافتراضية: 512). إذا تجاوزت قائمة الانتظار السعة، فإن الطلبات الجديدة ستتلقى خطأً 503 يشير إلى أن الخادم محمّل بشكل مفرط. -
تحميل النماذج: يُحدد عدد النماذج المختلفة التي يمكن تحميلها في نفس الوقت عبر
OLLAMA_MAX_LOADED_MODELS
. إذا طلبت طلب تحميل نموذج جديد ولا توجد ذاكرة كافية، فإن Ollama سيقوم بتفريغ النماذج النشطة التي لا تُستخدم لفتح مساحة، وستُرتّب الطلبات حتى يتم تحميل النموذج.
مثال على السيناريو
إذا وصل طلبان لنفس النموذج في نفس الوقت، وكانت موازنة الخادم مُعدة لعدد متوازي لا يقل عن 2، فإن كلا الطلبين سيتم معالجتهما معًا في دفعة، وستتلقى كلا المستخدمين استجابات متزامنة. إذا كانت موازنة الخادم مُعدة لعدد متوازي 1، فإن طلبًا واحدًا سيتم معالجته فورًا، والطلب الآخر سيُرتّب حتى يكتمل الأول.
إذا كانت الطلبات لنماذج مختلفة، وكانت هناك ذاكرة كافية، فإن كلا النماذجين يمكن تحميلهما، وستتم معالجة الطلبات بشكل متوازٍ. إذا لم تكن هناك ذاكرة كافية، فقد يكون من الضروري تفريغ نموذج واحد، وستُرتّب الطلبات حتى تصبح الذاكرة متاحة أو يتم تحميل النموذج.
جدول ملخص
السيناريو | النتيجة |
---|---|
طلبان، نفس النموذج، موازنة كافية | كلا الطلبين يتم معالجتهما معًا بشكل متوازٍ (مُوحَّد) |
طلبان، نفس النموذج، موازنة=1 | طلب واحد يتم معالجته فورًا، والطلب الآخر يُرتّب حتى يكتمل الأول |
طلبان، نماذج مختلفة، ذاكرة كافية | كلا النماذجين يتم تحميلهما، وتم معالجة الطلبات بشكل متوازٍ |
طلبان، نماذج مختلفة، ذاكرة غير كافية | طلب واحد يُرتّب حتى تصبح الذاكرة متاحة أو يتم تحميل النموذج |
باختصار، تم تصميم Ollama لمعالجة طلبات متزامنة متعددة بكفاءة، بشرط أن يكون الخادم مُعدًا للموازنة وتمتلك موارد كافية. وإلا، سيتم ترتيب الطلبات ومعالجتها بالترتيب.
إدارة نقص الذاكرة
عندما يواجه Ollama نقصًا في الذاكرة لمعالجة الطلبات الواردة، فإنه يستخدم مجموعة من آليات الانتظار وآليات إدارة الموارد للحفاظ على الاستقرار:
الانتظار على الطلبات
- تُضاف الطلبات الجديدة في قائمة FIFO (أول من يأتي أول من يُعالج) عندما لا يمكن تخصيص الذاكرة فورًا.
- تُحدد حجم قائمة الانتظار عبر OLLAMA_MAX_QUEUE (القيمة الافتراضية: 512 طلب).
- إذا وصلت قائمة الانتظار إلى سعتها، فإن الطلبات الجديدة ستتلقى أخطاء 503 “الخادم محمّل بشكل مفرط”.
إدارة النماذج
- يمكن تفريغ النماذج النشطة من الذاكرة عندما تصبح غير نشطة لفتح مساحة للمهام المرتّبة.
- يُحدد عدد النماذج المُحمّلة في وقت واحد عبر OLLAMA_MAX_LOADED_MODELS (القيمة الافتراضية: 3×عدد وحدات معالجة الرسومات أو 3 لوحدة المعالجة المركزية).
تحسين الذاكرة
- محاولة توحيد معالجة الطلبات لنفس النموذج لتحسين كفاءة استخدام الذاكرة.
- بالنسبة للتنبؤ بالمعالجة المُستندة إلى وحدة معالجة الرسومات، يتطلب تخصيص VRAM الكامل لكل نموذج - لا تدعم التحميلات الجزئية.
حالات الفشل
الاستنزاف الحرج للذاكرة: عندما تتجاوز الطلبات المرتّبة الموارد المتاحة، قد يقوم Ollama بـ:
- تحميل البيانات إلى القرص (ما يؤدي إلى تدهور أداء كبير)
- إرجاع أخطاء “نفاد الذاكرة”
- إنهاء نسخة النموذج في الحالات الشديدة
إعداد التحكم في التكوين | الهدف | القيمة الافتراضية |
---|---|---|
OLLAMA_MAX_QUEUE | عدد الطلبات المرتّبة القصوى | 512 |
OLLAMA_NUM_PARALLEL | عدد الطلبات المتوازنة لكل نموذج مُحمّل | 4 (أو 1 إذا كانت محدودة) |
OLLAMA_MAX_LOADED_MODELS | عدد النماذج المُحمّلة في وقت واحد القصوى | 3×عدد وحدات معالجة الرسومات أو 3 |
يجب على المشرفين مراقبة استخدام الذاكرة وتعديل هذه المعلمات بناءً على قدرات الأجهزة الخاصة بهم. تصبح إدارة نقص الذاكرة حاسمة عند تشغيل نماذج أكبر (7B+ معلمات) أو معالجة طلبات متزامنة متعددة.
استراتيجيات تحسين Ollama
تفعيل التسارع بالوحدة المُستندة إلى وحدة معالجة الرسومات عبر export OLLAMA_CUDA=1
وتحديد عدد خيوط المعالجة المركزية عبر export OLLAMA_NUM_THREADS=84
.
تحسينات في الأجهزة
- الذاكرة: 32 جيجابايت أو أكثر لنموذج 13B، 64 جيجابايت أو أكثر لنموذج 70B
- التخزين: أقراص SSD NVMe لتحميل وتبديل النماذج بشكل أسرع
- وحدة معالجة الرسومات: وحدة معالجة الرسومات NVIDIA RTX 3080/4090 مع 16 جيجابايت أو أكثر من VRAM للنماذج الأكبر
الاستراتيجيات التشغيلية
- توحيد الطلبات: معالجة عدة استفسارات في وقت واحد لتخفيف أعباء الذاكرة
- إلغاء تحميل النماذج تلقائيًا: يسمح لـ Ollama بإزالة النماذج غير النشطة من الذاكرة
- تخزين النماذج المستخدمة بشكل متكرر: الحفاظ على النماذج الشائعة في الذاكرة
مراقبة وحل المشكلات
- استخدم
nvidia-smi
(لوحدة معالجة الرسومات) وhtop
(لوحدة المعالجة المركزية/الذاكرة) لتحديد العوائق - عند حدوث أخطاء الذاكرة:
- انتقل إلى نماذج مُكمّرة
- قلل عدد الطلبات المتزامنة
- زاد مساحة التبادل
مثال على تدفق العمل لتحسين الأداء:
# استخدم نموذجًا مُكمّرًا مع تسريع وحدة معالجة الرسومات
export OLLAMA_CUDA=1
ollama run llama2:7b-q4_0 --context-size 2048
# قيد عدد النماذج المُحمّلة وعدد الطلبات المتوازنة
export OLLAMA_MAX_LOADED_MODELS=2
export OLLAMA_NUM_PARALLEL=4
يمكن لهذه التعديلات أن تقلل من استخدام الذاكرة بنسبة 30-60% مع الحفاظ على جودة الاستجابة، خاصة عند تشغيل نماذج متعددة أو معالجة أعداد كبيرة من الطلبات.
Ollama: توحيد الطلبات مقابل التنفيذ المتوازي
توحيد الطلبات في Ollama يشير إلى ممارسة تجميع عدة طلبات واردة معًا ومعالجتها كوحدة واحدة. هذا يسمح باستخدام موارد الحساب بشكل أكثر كفاءة، خاصة عند تشغيلها على أجهزة تُستفيد من العمليات المتوازية (مثل وحدات معالجة الرسومات).
عندما تصل عدة طلبات لنفس النموذج في وقت واحد، يمكن لـ Ollama معالجتها معًا في دفعة إذا كانت الذاكرة متاحة. هذا يزيد من الإنتاجية ويمكن أن يقلل من التأخير لكل طلب، حيث يمكن للنموذج الاستفادة من العمليات المصفوفية المُحسّنة على الدفعة.
يكون توحيد الطلبات فعّالًا بشكل خاص عندما تكون الطلبات متشابهة في الحجم والتعقيد، حيث يسمح ذلك باستخدام أفضل لموارد الأجهزة.
التنفيذ المتوازي في Ollama يعني معالجة عدة طلبات في نفس الوقت، إما لنفس النموذج أو لنماذج مختلفة، حسب توفر الذاكرة والتكوين.
يدعم Ollama مستويين من التوازي:
- تحميل نماذج متعددة: إذا كانت هناك ذاكرة كافية، يمكن تحميل عدة نماذج وتقديم الطلبات في وقت واحد.
- طلبات متوازية لكل نموذج: يمكن لكل نموذج مُحمّل معالجة عدة طلبات متوازية، ويتم التحكم في ذلك عبر إعداد
OLLAMA_NUM_PARALLEL
(القيمة الافتراضية هي 1 أو 4 حسب توفر الذاكرة).
عندما تتجاوز الطلبات حد التوازي، يتم ترتيبها (FIFO) حتى تصل إلى OLLAMA_MAX_QUEUE
.
الخلاصة
يستخدم Ollama كلاً من التوحيد والتنفيذ المتوازي لمعالجة الطلبات المتعددة بكفاءة. يجمع التوحيد الطلبات لمعالجتها في وقت واحد، بينما يسمح التنفيذ المتوازي بتشغيل عدة طلبات (أو نماذج) في وقت واحد. تعتمد الطرق على ذاكرة النظام ويمكن تكوينها لتحقيق الأداء الأمثل.
روابط مفيدة
- قائمة مصطلحات Ollama
- نقل نماذج Ollama إلى محرك أو مجلد مختلف
- كيفية استخدام Ollama لتحسين أداء وحدات المعالجة المركزية من إنتل
- مساحة Ollama
- تثبيت وتكوين Perplexica مع Ollama
- اختبار Deepseek-r1 على Ollama
- كيفية معالجة طلبات متوازية في Ollama
- اختبار Deepseek-r1 على Ollama
- قائمة مصطلحات Python
- مساحة Python
- إعادة ترتيب المستندات النصية باستخدام Ollama ونموذج Qwen3 Embedding - في Go