لماذا تستضيف نماذج LLM ذاتيًا على VPS
استضافة خادم نماذج ذاتيًا تعني إبقاء مُوجِّهاتك وبياناتك الحساسة بعيدًا عن الواجهات البرمجية التجارية، وإلغاء الفوترة حسب الرمز (token)، وتحديدك أنت للنموذج وإصداره وتكميمه (quantization). على VPS، تكشف واجهة برمجية خاصة لتطبيقاتك الداخلية (روبوتات محادثة، RAG، مساعدو برمجة) من دون أي تسرُّب إلى الخارج. يتميّز Ollama ببساطته الجذرية: أمر واحد لتنزيل نموذج وتشغيله، وواجهة برمجية نظيفة، وإدارة تلقائية للذاكرة. أما LocalAI فيضع نفسه بديلًا 'drop-in' لواجهة OpenAI: يكشف نقاط النهاية نفسها (المحادثة، والتضمينات، والصور، والصوت) ويقبل خلفيات وصيغ نماذج متعددة. يكمن الخيار بين تجربة بسيطة إلى أقصى حد وأوسع توافق ممكن.
فوائد نموذج LLM مستضاف ذاتيًا
- مُوجِّهات وبيانات سرّية لا تغادر VPS الخاص بك أبدًا
- لا فوترة حسب الرمز (token)، تكلفة متوقّعة مرتبطة بالخادم وحده
- واجهة برمجية خاصة موصولة مباشرةً بتطبيقاتك الداخلية
- حرية اختيار النموذج وحجمه ومستوى تكميمه (quantization)
- توافق مع حزم SDK الحالية عبر واجهة برمجية بأسلوب OpenAI
- مثالي لـ RAG: اقرن نموذج LLM بقاعدة بياناتك وبمحرك بحث مستضاف ذاتيًا
المتطلبات: نماذج مُكمَّمة وذاكرة واقعية
من دون GPU، التزم بنماذج مُكمَّمة خفيفة. نموذج 3B بصيغة GGUF Q4 يعمل على VPS بـ 4 vCPU و8 غيغابايت من الذاكرة بزمن استجابة مقبول للاختبار؛ ونموذج 7B/8B بترميز Q4 يتطلّب 8 إلى 16 غيغابايت من الذاكرة ومعالجًا جيدًا ليبقى قابلًا للاستخدام. وما بعد ذلك، على المعالج وحده، يصبح زمن الاستجابة مانعًا: للعمل في الوقت الفعلي على النماذج الكبيرة، لا غنى عن VPS مزوَّد بـ GPU. والأهم، جهِّز قرصًا سخيًا: أوزان عدة نماذج تبلغ بسرعة عشرات الغيغابايت. تحتاج إلى Docker وCompose، ووحدة تخزين دائمة للنماذج، ونطاقًا فرعيًا إذا كشفت الواجهة البرمجية، وبروكسي عكسي مع مصادقة.
مرّر الجدول أفقيًا
| المعيار | Ollama | LocalAI |
|---|---|---|
| الفلسفة | البساطة، أمر واحد لكل نموذج | بديل drop-in لواجهة OpenAI |
| التثبيت | سريع جدًا، صورة Docker رسمية جاهزة | يحتاج مزيدًا من الإعداد، خلفيات عديدة |
| التوافق مع OpenAI API | نقطة نهاية متوافقة `/v1/chat/completions` | أصلية وكاملة جدًا، جميع نقاط النهاية |
| النماذج المدعومة | مكتبة رسمية على ollama.com/library | GGUF وGPTQ وONNX وexllama2 وغيرها |
| دعم GPU | NVIDIA وAMD وApple Metal — اكتشاف تلقائي | NVIDIA وAMD وCPU — دعم واسع للأجهزة |
| تعدد النماذج المتزامنة | نعم، تحميل/تفريغ تلقائي | نعم، خلفيات معزولة لكل نموذج |
| واجهة ويب مدمجة | لا (Open WebUI منفصل) | لا (يُوصى بواجهة طرف ثالث) |
| حالة الاستخدام المثالية | البدء بسرعة، النمذجة الأولية | ترحيل تطبيق OpenAI إلى الاستضافة الذاتية |
نشر Ollama (أو LocalAI) على VPS
تجهيز التخزين ووحدة تخزين النماذج
أنشئ وحدة تخزين مخصصة (
/srv/ollama/models) على قرص كبير بما يكفي. بما أن الأوزان ضخمة وقابلة لإعادة الاستخدام، يجب أن تبقى خارج الحاوية لتجنّب إعادة التنزيل عند كل إعادة تشغيل.تشغيل الحاوية
شغِّل
ollama/ollama(أوlocalai/localai) مع تركيب وحدة تخزين النماذج وربط المنفذ11434/8080محليًا. على VPS من دون GPU، يكون وضع المعالج تلقائيًا؛ ومع GPU، فعِّل وقت التشغيل (runtime) المناسب.تنزيل نموذج
مع Ollama، نفِّذ
docker compose exec ollama ollama pull llama3.2:3b. ومع LocalAI، عرِّف النموذج في المعرض أو ضع ملف GGUF في مجلد النماذج، ثم تحقّق من تحميله في السجلات (logs).اختبار الواجهة البرمجية
أجرِ استدعاءً محليًا:
curl http://127.0.0.1:11434/api/generateلـ Ollama، أو نقطة النهاية المتوافقة مع OpenAIPOST /v1/chat/completionsلـ LocalAI. تأكّد من أن التوليد يعمل قبل أي كشف.الكشف خلف بروكسي عكسي بمصادقة
وجِّه llm.yourdomain.com إلى المنفذ المحلي باستخدام Caddy أو Nginx لأجل TLS، وأضِف طبقة مصادقة (مفتاح API في الترويسة أو basic auth). واجهة LLM مفتوحة على الإنترنت هي مدخل مكلف لا ينبغي تركه بلا رقابة أبدًا.
توصيل تطبيقاتك
وجِّه حزم SDK الحالية إلى
base_urlالخاص بك. بما أن LocalAI يكشف واجهة OpenAI، تعمل معظم المكتبات بمجرد تغيير الرابط والمفتاح؛ ومن جهة Ollama، استخدم واجهته الأصلية أو نقطة نهايته المتوافقة.
إدارة النماذج: ollama pull وollama list والحذف
مع Ollama، تتم إدارة النماذج بالكامل عبر سطر الأوامر أو REST API. ollama pull llama3.2 ينزِّل النسخة الافتراضية؛ ollama pull llama3.1:8b-instruct-q4_K_M يسحب نسخة مُكمَّمة محددة من المكتبة الرسمية على ollama.com/library. ollama list يعرض النماذج المحلية مع حجمها على القرص وبصمتها (digest). ollama run mistral يفتح جلسة تفاعلية في الطرفية. ollama rm llama3.2 يحذف نموذجًا لتحرير المساحة. مع LocalAI، المنطق مختلف: النماذج تعيش في المجلد /models المركَّب داخل الحاوية. تنزِّل ملف GGUF (صيغة llama.cpp) أو GPTQ وتضعه في ذلك المجلد؛ يحمّله LocalAI عند البدء أو عند الطلب. معرض LocalAI يوفر إعدادات جاهزة للنماذج الشائعة. نقطة عملية: Ollama يفرِّغ تلقائيًا النماذج غير المستخدمة لتحرير الذاكرة، في حين يترك LocalAI هذا لإعداداتك.
الأداء والذاكرة: اختيار التكميم المناسب
التكميم (quantization) يقلّل دقة الأوزان لتقليص حجم النموذج واستهلاكه للذاكرة. الصيغتان Q4_K_M وQ5_K_S هما الأكثر شيوعًا في الممارسة. Q4_K_M (4 بت، طريقة K، حجم M) تقدّم أفضل موازنة بين الحجم والجودة لمعظم الاستخدامات: نموذج Llama 3.1 8B بصيغة Q4_K_M يستهلك نحو 4.7 غيغابايت من الذاكرة، مقابل نحو 16 غيغابايت للنسخة غير المُكمَّمة بـ FP16 (المصدر: ollama.com/library/llama3.1). Q5_K_S ترتفع إلى نحو 5.5 غيغابايت لكنها تحافظ بشكل أفضل على التماسك في التوليدات الطويلة. على VPS بسعة 8 غيغابايت، استهدف نماذج 3B أو 7B بصيغة Q4؛ وعلى 16 غيغابايت، يبقى 7B/8B Q5_K_M سلسًا. على المعالج وحده، توقّع 3 إلى 10 رموز/ثانية حسب النموذج وعدد الأنوية — مقبول للاستخدام غير المتزامن، بطيء جدًا للبث التفاعلي. مع GPU من NVIDIA، يكتشف Ollama تلقائيًا CUDA ويفرِّغ الطبقات على GPU؛ والمنطق ذاته مع AMD (ROCm) وApple Silicon (Metal). يوفر LocalAI تحكمًا أدق في توزيع طبقات GPU عبر معاملات تكوين الخلفية، مفيد حين يتشارك GPU وCPU الأحمال.
على VPS من دون GPU، سرّ السلاسة هو التكميم (quantization): نموذج بترميز Q4_K_M يقدّم أفضل موازنة بين الحجم والجودة ويتّسع في الذاكرة حيث تنهار النسخة غير المُكمَّمة. حُدّ أيضًا context window عند الحد الأدنى الضروري (مثلًا 4096 tokens): سياق مُبالَغ في حجمه يضاعف استهلاك الذاكرة وزمن الاستجابة من دون فائدة حقيقية لمعظم المهام.
التكامل: Open WebUI وOpenAI API وSDK
Open WebUI هو واجهة المستخدم الرسومية المرجعية لـ Ollama: تُنشر كحاوية Docker واحدة وتتصل بـ Ollama عبر متغير البيئة OLLAMA_BASE_URL=http://ollama:11434. تحصل على محادثة كاملة مع سجل وتحديد نموذج وإدارة المحادثات — مشابهة لـ ChatGPT لكن مستضافة على VPS الخاص بك. للتكاملات البرمجية، يكشف Ollama /api/generate (توليد بسيط) و/v1/chat/completions (متوافق مع OpenAI). عميل Python موجود يُعاد تهيئته هكذا: client = openai.OpenAI(base_url='http://localhost:11434/v1', api_key='ollama'). LocalAI يكشف بالضبط الواجهة ذاتها لـ OpenAI — POST /v1/chat/completions وPOST /v1/embeddings وPOST /v1/images/generations — مما يتيح ترحيل تطبيق موجود بتغيير الرابط الأساسي والمفتاح فحسب. أطر العمل كـ LangChain وLlamaIndex وSemantic Kernel لديها جميعًا موصّل Ollama أو OpenAI متوافق مع الحلين. لـ RAG، اقرن أيًّا منهما بـ Weaviate أو Qdrant أو Chroma: يولِّد LLM، ويصفِّي محرك النواقل (vector engine) السياقات ذات الصلة، ويبقى كل شيء على خادمك.
استكشاف الأخطاء: الأخطاء الشائعة
خطأ OOM (نفاد الذاكرة): النموذج أكبر من الذاكرة المتاحة. تحقّق من الحجم الفعلي للنموذج بـ ollama list، وقلِّل التكميم (Q4 بدلًا من Q5 أو Q8)، أو اختر نموذجًا أصغر. إذا استمر الخطأ، قلِّل num_ctx (نافذة السياق) في خيارات التوليد. النموذج غير موجود: مع Ollama، قد يفشل ollama pull إذا كان الاسم غير صحيح — تحقّق من القائمة الدقيقة على ollama.com/library؛ مع LocalAI، تأكّد من أن ملف GGUF موجود في المجلد /models وأن اسمه يطابق المعرِّف المُعلَن في الإعداد. GPU غير مكتشف: على VPS مع GPU من NVIDIA، يحتاج Ollama إلى NVIDIA Container Toolkit مثبتًا على المضيف والمعامل runtime: nvidia في ملف Compose؛ تحقّق بـ ollama ps من أن النموذج مُفرَّغ فعلًا على GPU. مهلة انتهاء عند التوليدات الطويلة: ارفع مهلة البروكسي العكسي (Nginx: proxy_read_timeout 300s) ومهلة العميل. للاستخدام المكثّف، فضِّل البث ("stream": true) الذي يُعيد الرموز فور توليدها ويتجنّب انتهاء المهلة في الردود الطويلة.
Ollama أم LocalAI: أي ملف شخصي لأي أداة؟
اختر Ollama إذا كنت تبدأ مع LLM المستضاف ذاتيًا، أو إذا أردت تجربة مطوِّر قريبة من مدير الحزم، أو إذا كانت حالتك النمذجة السريعة أو روبوت محادثة داخلي أو مساعد برمجة، أو إذا كنت تخطط لتوصيل Open WebUI للحصول على واجهة مستخدم فورية. Ollama يتولى وحده التنزيلات والتكميم والتبديل بين CPU وGPU — لا يتطلّب أي إعداد إضافي فوق ملف Compose. اختر LocalAI إذا كنت ترحِّل تطبيقًا موجودًا يستدعي OpenAI API وتريد تجنّب أي تعديلات في كود العميل، أو إذا كنت بحاجة إلى وسائط غير النص (توليد صور، TTS، STT) في حاوية واحدة، أو إذا كنت تدير صيغ نماذج متنوعة (GPTQ, ONNX, exllama2) لا يغطيها وحده الخلفية llama.cpp. LocalAI يتطلّب إعدادًا أوليًا أكبر لكنه يوفر تحكمًا أوسع في بيئة الإنتاج.