استضافة ذاتية لنموذج لغوي كبير مفتوح المصدر لـ DiscourseAI

يمتلك ملحق Discourse AI العديد من الميزات التي تتطلب تفعيل نموذج لغوي كبير (LLM)، مثل، على سبيل المثال، التلخيص (Summarization)، ومساعد الذكاء الاصطناعي (AI Helper)، والبحث بالذكاء الاصطناعي (AI Search)، وروبوت الدردشة بالذكاء الاصطناعي (AI Bot). في حين أنه يمكنك استخدام واجهة برمجة تطبيقات تابعة لجهة خارجية، مثل تكوين مفاتيح API لـ OpenAI أو تكوين مفاتيح API لـ Anthropic، فقد بنينا Discourse AI منذ اليوم الأول لكي لا نتقيد بتلك الخيارات.

التشغيل باستخدام HuggingFace TGI

توفر HuggingFace صورة حاوية رائعة يمكن أن تتيح لك التشغيل بسرعة.

على سبيل المثال:

mkdir -p /opt/tgi-cache
docker run --rm --gpus all --shm-size 1g -p 8080:80 \
  -v /opt/tgi-cache:/data \
  ghcr.io/huggingface/text-generation-inference:latest \
  --model-id mistralai/Mistral-7B-Instruct-v0.2

يجب أن يتيح لك هذا البدء بتشغيل نسخة محلية من Mistral 7B Instruct على المضيف المحلي (localhost) عند المنفذ 8080، والتي يمكن اختبارها باستخدام

curl http://localhost:8080/ \
    -X POST \
    -H 'Content-Type: application/json' \
    -d '{"inputs":"<s>[INST] What is your favourite condiment? [/INST] Well, I'm quite partial to a good squeeze of fresh lemon juice. It adds just the right amount of zesty flavour to whatever I'm cooking up in the kitchen!</s > [INST] Do you have mayonnaise recipes? [/INST]","parameters":{"max_new_tokens":500, "temperature":0.5,"top_p": 0.9}}'

التشغيل باستخدام vLLM

خيار آخر للاستضافة الذاتية للنماذج اللغوية الكبيرة التي يدعمها Discourse AI هو vLLM، وهو مشروع شائع جدًا، مرخص بموجب ترخيص أباتشي (Apache License).

إليك كيفية البدء بنموذج:

mkdir -p /opt/vllm-cache
docker run --gpus all \
  -v /opt/vllm-cache:/root/.cache/huggingface \
  -e "MODEL=mistralai/Mistral-7B-Instruct-v0.2" \
  -p 8080:8000 --ipc=host vllm/vllm-openai:latest

والذي يمكنك اختباره باستخدام

curl -X POST http://localhost:8080/v1/completions \
-H "Content-Type: application/json" \
-d '{
"model": "mistralai/Mistral-7B-Instruct-v0.2",
"prompt": "<s> [INST] What was the latest released hero for Dota 2? [/INST] The latest released hero for Dota 2 was", "max_tokens": 200}'

التشغيل باستخدام Ollama

Ollama هو خيار شائع آخر لتشغيل النماذج مفتوحة المصدر محليًا. إنه يبسط إدارة النماذج ويوفر واجهة برمجة تطبيقات متوافقة مع OpenAI.

ollama pull mistral
ollama serve

يبدأ هذا خادمًا محليًا عند http://localhost:11434 يمكن لـ Discourse AI الاتصال به باستخدام موفر Ollama.

جعلها متاحة لتثبيت Discourse الخاص بك

في معظم الحالات، ستقوم بتشغيل هذا على خادم مخصص بسبب متطلبات وحدة معالجة الرسومات (GPU). عند القيام بذلك، أوصي بتشغيل وكيل عكسي (reverse proxy)، وتنفيذ إنهاء TLS (TLS termination)، وتأمين نقطة النهاية بحيث يمكن فقط لتثبيت Discourse الخاص بك الاتصال بها.

تكوين Discourse AI

يتم الآن تكوين اتصالات النموذج اللغوي الكبير (LLM) من خلال واجهة مسؤول (admin UI) بدلاً من إعدادات الموقع (site settings). انتقل إلى /admin/plugins/discourse-ai/ai-llms وأضف نموذج لغوي كبير جديد:

  1. انقر على جديد (New) لإضافة نموذج.
  2. حدد الموفر (Provider) — اختر vLLM أو Hugging Face أو Ollama اعتمادًا على خادم الاستدلال (inference server) الخاص بك.
  3. أدخل عنوان URL (URL) لنقطة نهاية الاستدلال الخاصة بك (على سبيل المثال http://your-server:8080).
  4. أدخل مفتاح API (API key) إذا كانت نقطة النهاية الخاصة بك تتطلب ذلك.
  5. املأ اسم النموذج (model name) و المُرمِّز (tokenizer) و الحد الأقصى لرموز الإدخال (max prompt tokens) وتفاصيل النموذج الأخرى.

بمجرد إضافة النموذج اللغوي الكبير الخاص بك، قم بتعيينه كافتراضي عبر إعداد الموقع ai_default_llm_model، أو قم بتعيينه لميزات محددة من خلال تكوين الوكيل الخاص به في /admin/plugins/discourse-ai/ai-features.

17 إعجابًا

لأي شخص يبحث في هذا الموضوع مع/لأجل:
#Llava-Api-keys

أنا أستخدم vLLM أيضًا. أود أيضًا أن أوصي بنموذج openchat v3.5 0106، وهو نموذج بمعامل 7 مليار أداء جيد جدًا.

أنا في الواقع أقوم بتشغيله بتقنية 4bit quantized لكي يعمل بشكل أسرع.

أنا أقوم بتعيين هذه المهمة لمتدرب. هل هناك توصيات من أي شخص بشأن الخدمة المحددة التي يجب الاشتراك فيها؟ هذا للاختبار. لدى المتدرب حاليًا اختبار تم تكوينه مع OpenAI. إنه يعمل بشكل جيد. إنهم مهتمون بتجربة HuggingFace TGI، ولكن يبدو أنني بحاجة إلى تزويدهم بخادم مخصص مزود بوحدة معالجة رسومات؟ ما هي المواصفات الدنيا للاختبار؟

هل هناك روابط يمكنني تقديمها للمتدرب؟

لم ألقِ نظرة متعمقة على هذا المشروع بعد. أنا فقط أتوقع أن يحتاج المتدرب إلى بعض الموارد وأحاول تقديم بعض التوصيات المعقولة بشأن الخدمات للمتدرب في مجال البحث.

مرحباً، أثناء الكشف باستخدام حاوية vllm بشهادة موقعة ذاتيًا على صندوق GPU في المبنى، لم أجد طريقة جيدة لإضافة شهادة CA الجذرية إلى حاوية discourse حتى تتمكن من الوصول بأمان إلى هذه الخدمة في المبنى عبر https.

على سبيل المثال:

./launcher enter app
curl -L https://vllm.infra.example.com/v1/models
curl: (60) مشكلة شهادة SSL: لا يمكن الحصول على شهادة المصدر المحلي
مزيد من التفاصيل هنا: https://curl.se/docs/sslcerts.html

فشل curl في التحقق من شرعية الخادم وبالتالي لم يتمكن من
إنشاء اتصال آمن به. لمعرفة المزيد حول هذا الموقف و
كيفية إصلاحه، يرجى زيارة صفحة الويب المذكورة أعلاه.

هل هناك طريقة جيدة لإضافة شهادة CA جذرية موقعة ذاتيًا في حاوية discourse والتي ستنجو من تحديثات صور الحاوية؟

على حد علمي، فإن إضافتها في app.yml

run:
  - exec: wget ... && update-ca-certificates

ستعمل بشكل جيد فقط أثناء بناء/إعادة بناء التطبيق.

أي تلميح مرحب به.

تم تقسيم 14 مشاركة إلى موضوع جديد: جعل discourse ai يعمل مع ollama محليًا

هل ستكون هناك طريقة لإضافة رأس HTTP مخصص لطلبات Discourse AI؟ لدينا خادم مزود بوحدة معالجة رسومات (GPU) نستخدمه لأغراض متنوعة، ولديه واجهة برمجة تطبيقات (API) متوافقة مع OpenAI، ولكن لأسباب أمنية، وضعناه خلف بوابة إدارة واجهة برمجة التطبيقات (API Management gateway)، والتي تتطلب رأس HTTP مخصصًا (شيئًا مثل SubscriptionKey) ونحن نوفر مفتاح المصادقة الخاص بنا هنا.

لاحظ أن مفتاح المصادقة هذا مخصص للمرور عبر APIM، وهو يختلف عن مفتاح واجهة برمجة التطبيقات الذي قد يوفره المرء لخدمة مثل واجهة برمجة تطبيقات OpenAI.

سيكون من الرائع إذا كانت هناك طريقة لإضافة رؤوس مخصصة في إعداد كل LLM في صفحة الإعداد admin/plugins/discourse-ai/ai-llms. ربما خيار “مخصص” في القائمة المنسدلة “الموفر” (Provider)، مع خيارات إضافية لحالات الاستخدام مثل هذا؟

إعجاب واحد (1)

الإجابة السريعة هي إضافة مكون إضافي لإضافة هذا الرأس. قد يكون الحل البديل هو خادم وكيل محلي (proxy server) يمكنك الوصول إليه من Discourse، والذي سيضيف الرأس وينقل البيانات مرة أخرى إلى Discourse. يشير مصدر غير موثوق إلى أنه قد تتمكن من جعل NGINX يقوم بذلك نيابة عنك باستخدام شيء مثل

server {
    listen 80;
    
    location / {
        proxy_pass https://api.example.com;
        proxy_set_header SubscriptionKey xyz;
        proxy_set_header Host $host;
    }
}

قد تكون هناك طريقة ذكية لإضافة ذلك إلى إعداد nginx الخاص بـ Discourse في مسار سري معين (يستمع فقط إلى الخادم الخاص بك أيضًا)

إعجاب واحد (1)