LoRAX: خادم استدلال Multi-LoRA الذي يتسع لآلاف من LLMs المضبوطة بدقة
LoRAX (LoRA eXchange) هو إطار عمل يسمح للمستخدمين بخدمة الآلاف من النماذج المضبوطة بدقة على وحدة معالجة رسومات واحدة، مما يقلل بشكل كبير من تكلفة الخدمة دون المساس بالإنتاجية أو زمن الوصول.
جدول المحتويات
سمات
نماذج
؟ابدء
متطلبات
قم بتشغيل خادم LoRAX
موجه عبر REST API
موجه عبر عميل بايثون
الدردشة عبر OpenAI API
الخطوات التالية
شكر وتقدير
خريطة الطريق
تحميل المحول الديناميكي: قم بتضمين أي محول LoRA مضبوط بدقة من HuggingFace أو Predibase أو أي نظام ملفات في طلبك، وسيتم تحميله في الوقت المناسب دون حظر الطلبات المتزامنة. دمج المحولات لكل طلب لإنشاء مجموعات قوية على الفور.
التجميع المستمر غير المتجانس: يجمع طلبات المحولات المختلفة معًا في نفس الدفعة، مما يحافظ على ثبات زمن الوصول والإنتاجية تقريبًا مع عدد المحولات المتزامنة.
جدولة تبادل المحولات: تقوم بشكل غير متزامن بجلب المحولات وتفريغها بين ذاكرة وحدة المعالجة المركزية (GPU) وذاكرة وحدة المعالجة المركزية (CPU)، وتتطلب الجداول الزمنية تجميعًا لتحسين الإنتاجية الإجمالية للنظام.
الاستدلال الأمثل: تحسينات الإنتاجية العالية وزمن الوصول المنخفض، بما في ذلك توازي الموتر، ونواة CUDA المجمعة مسبقًا (انتباه الفلاش، والانتباه المقسم إلى صفحات، وSGMV)، والتكميم، وتدفق الرمز المميز.
صور Docker جاهزة للإنتاج ، ومخططات Helm لـ Kubernetes، ومقاييس Prometheus، والتتبع الموزع باستخدام Open Telemetry. واجهة برمجة تطبيقات متوافقة مع OpenAI تدعم محادثات الدردشة متعددة الأدوار. محولات خاصة من خلال عزل المستأجر لكل طلب. الإخراج المنظم (وضع JSON).
؟ مجاني للاستخدام التجاري: ترخيص Apache 2.0. قال كفى؟.
يتكون تقديم نموذج مضبوط بدقة باستخدام LoRAX من مكونين:
النموذج الأساسي: نموذج كبير تم تدريبه مسبقًا ومشترك عبر جميع المحولات.
المحول: يتم تحميل أوزان المحول الخاصة بالمهمة ديناميكيًا لكل طلب.
يدعم LoRAX عددًا من نماذج اللغات الكبيرة كنموذج أساسي بما في ذلك Llama (بما في ذلك CodeLlama)، وMistral (بما في ذلك Zephyr)، وQwen. راجع البنيات المدعومة للحصول على قائمة كاملة بالنماذج الأساسية المدعومة.
يمكن تحميل النماذج الأساسية في fp16 أو تكميمها باستخدام bitsandbytes
أو GPT-Q أو AWQ.
تتضمن المحولات المدعومة محولات LoRA التي تم تدريبها باستخدام مكتبات PEFT وLudwig. يمكن تكييف أي من الطبقات الخطية في النموذج عبر LoRA وتحميلها في LoRAX.
نوصي بالبدء باستخدام صورة Docker المعدة مسبقًا لتجنب تجميع نواة CUDA المخصصة والتبعيات الأخرى.
يتضمن الحد الأدنى من متطلبات النظام اللازمة لتشغيل LoRAX ما يلي:
Nvidia GPU (جيل أمبير أو أعلى)
برامج تشغيل الأجهزة المتوافقة مع CUDA 11.8 وما فوق
نظام التشغيل لينكس
عامل ميناء (لهذا الدليل)
قم بتثبيت nvidia-container-toolkit بعد ذلك
sudo systemctl daemon-reload
sudo systemctl restart docker
model=mistralai/Mistral-7B-Instruct-v0.1 الحجم=$PWD/البيانات تشغيل عامل الميناء --gpus الكل --shm-size 1g -p 8080:80 -v $volume:/data ghcr.io/predibase/lorax:main --model-id $model
للحصول على برنامج تعليمي كامل يتضمن تدفق الرموز المميزة وعميل Python، راجع البدء - Docker.
قاعدة سريعة LLM:
حليقة 127.0.0.1:8080/إنشاء -X مشاركة -d '{ "inputs": "[INST] باعت نتاليا مقاطع لـ 48 من أصدقائها في أبريل، ثم باعت نصف هذا العدد في مايو. كم عدد المقاطع التي باعت نتاليا إجمالاً في أبريل ومايو؟ [/INST] "، "المعلمات": { "max_new_tokens": 64 } }' -H "نوع المحتوى: تطبيق/json"
مطالبة محول LoRA:
حليقة 127.0.0.1:8080/إنشاء -X مشاركة -d '{ "inputs": "[INST] باعت نتاليا مقاطع لـ 48 من أصدقائها في أبريل، ثم باعت نصف هذا العدد في مايو. كم عدد المقاطع التي باعت نتاليا إجمالاً في أبريل ومايو؟ [/INST] "، "المعلمات": { "max_new_tokens": 64، "adapter_id": "vineetsharma/qlora-adapter-Mistral-7B-Instruct-v0.1-gsm8k" } }' -H "نوع المحتوى: تطبيق/json"
راجع المرجع - REST API للحصول على التفاصيل الكاملة.
ثَبَّتَ:
نقطة تثبيت لوراكس العميل
يجري:
from lorax import Clientclient = Client("http://127.0.0.1:8080")# مطالبة القاعدة LLMprompt = "[INST] باعت ناتاليا مقاطع لـ 48 من أصدقائها في أبريل، وبعد ذلك باعت نصف هذا العدد من المقاطع في مايو كم عدد المقاطع التي بيعتها ناتاليا إجمالاً في شهري أبريل ومايو [/INST]"print(client.generate(prompt, . max_new_tokens=64).generated_text)# المطالبة بمحول LoRAadapter_id = "vineetsharma/qlora-adapter-Mistral-7B-Instruct-v0.1-gsm8k"print(client.generate(prompt, max_new_tokens=64, converter_id=adapter_id).generated_text )
راجع المرجع - عميل Python للحصول على التفاصيل الكاملة.
للتعرف على طرق أخرى لتشغيل LoRAX، راجع البدء - Kubernetes، والبدء - SkyPilot، والبدء - محلي.
يدعم LoRAX محادثات الدردشة متعددة الأدوار جنبًا إلى جنب مع تحميل المحول الديناميكي من خلال واجهة برمجة التطبيقات المتوافقة مع OpenAI. ما عليك سوى تحديد أي محول كمعلمة model
.
من openai import OpenAIclient = OpenAI(api_key="EMPTY"،base_url="http://127.0.0.1:8080/v1"، )resp =client.chat.completions.create(model="alignment-handbook/zephyr-7b-dpo-lora"،messages=[ {"role": "system"، "content": "أنت روبوت محادثة ودود يستجيب دائمًا بأسلوب القرصان"، }, {"role": "user"، "content": "كم عدد المروحيات التي يمكن للإنسان أن يأكلها في جلسة واحدة؟"}, ]،max_tokens=100، )طباعة("الاستجابة:"، resp.choices[0].message.content)
راجع واجهة برمجة التطبيقات المتوافقة مع OpenAI للحصول على التفاصيل.
فيما يلي بعض نماذج Mistral-7B الأخرى المثيرة للاهتمام التي يمكنك تجربتها:
Align-handbook/zephyr-7b-dpo-lora: تم ضبط Mistral-7b بدقة على مجموعة بيانات Zephyr-7B باستخدام DPO.
IlyaGusev/saiga_mistral_7b_lora: روبوت محادثة روسي يعتمد على Open-Orca/Mistral-7B-OpenOrca
.
Undi95/Mistral-7B-roleplay_alpaca-lora: تم ضبطه بدقة باستخدام مطالبات لعب الأدوار.
يمكنك العثور على المزيد من محولات LoRA هنا، أو حاول ضبط محولاتك الخاصة باستخدام PEFT أو Ludwig.
تم إنشاء LoRAX استنادًا إلى استنتاج إنشاء النص الخاص بـ HuggingFace، والذي تم تشعبه من الإصدار 0.9.4 (Apache 2.0).
نود أيضًا أن نشكر Punica على عملها على نواة SGMV، والتي تُستخدم لتسريع الاستدلال متعدد المحولات تحت الحمل الثقيل.
يتم تتبع خريطة الطريق الخاصة بنا هنا.