تعد مكتبة Hugging Face Transformers هي المعيار للعمل مع أحدث النماذج – بدءًا من تجربة الأبحاث المتطورة وحتى الضبط الدقيق للبيانات المخصصة. إن بساطتها ومرونتها ونموذج حديقة الحيوان الواسع يجعلها أداة قوية للتطور السريع.

ولكن بمجرد أن تصبح جاهزًا للانتقال من أجهزة الكمبيوتر المحمولة إلى الإنتاج، يصبح أداء الاستدلال أمرًا بالغ الأهمية. وهنا يأتي دور SGLang.

تم تصميم SGLang للاستدلال عالي الإنتاجية وزمن الوصول المنخفض، ويوفر الآن تكاملًا سلسًا مع المحولات كواجهة خلفية. وهذا يعني أنه يمكنك إقران مرونة المحولات مع الأداء الأولي لـ SGLang.

دعنا نتعمق في ما يتيحه هذا التكامل وكيف يمكنك استخدامه.

يدعم SGLang الآن محولات Hugging Face كواجهة خلفية، مما يتيح لك تشغيل أي نموذج متوافق مع المحولات مع استنتاج عالي الأداء خارج الصندوق.

import sglang as sgl

llm = sgl.Engine("meta-llama/Llama-3.2-1B-Instruct", impl="transformers")
print(llm.generate(["The capital of France is"], {"max_new_tokens": 20})[0])

ليست هناك حاجة إلى دعم أصلي — يعود SGLang تلقائيًا إلى Transformers عند الحاجة، أو يمكنك ضبطه impl="transformers" صراحة.

دعنا نستعرض مثالًا بسيطًا لإنشاء النص باستخدام meta-llama/Llama-3.2-1B-Instruct لمقارنة كلا النهجين.

محولات

تعد مكتبة المحولات رائعة للتجريب والمهام الصغيرة والتدريب، ولكنها ليست مُحسّنة للسيناريوهات ذات الحجم الكبير أو الكمون المنخفض.

from transformers import pipeline

pipe = pipeline("text-generation", model="meta-llama/Llama-3.2-1B-Instruct")
generate_kwargs = {
    "top_p": 0.95,
    "top_k": 20,
    "temperature": 0.8,
    "max_new_tokens": 256
}
result = pipe("The future of AI is", **generate_kwargs)
print(result[0]["generated_text"])

SGLang

تتخذ SGLang مسارًا مختلفًا، حيث تعطي الأولوية للكفاءة من خلال ميزات مثل RadixAttention (آلية انتباه فعالة للذاكرة). يعد الاستدلال باستخدام SGLang أسرع بشكل ملحوظ وأكثر كفاءة في استخدام الموارد، خاصة في ظل التحميل. إليك نفس المهمة في SGlang باستخدام محرك غير متصل بالإنترنت:

import sglang as sgl

if __name__ == '__main__':
    llm = sgl.Engine(model_path="meta-llama/Llama-3.2-1B-Instruct")
    prompts = ["The future of AI is"]
    sampling_params =  {
        "top_p": 0.95,
        "top_k": 20,
        "temperature": 0.8,
        "max_new_tokens": 256
    }
    outputs = llm.generate(prompts, sampling_params)
    print(outputs[0])

أو يمكنك تدوير الخادم وإرسال الطلبات:

python3 -m sglang.launch_server \
  --model-path meta-llama/Llama-3.2-1B-Instruct \
  --host 0.0.0.0 \
  --port 30000
response = requests.post(
    "http://localhost:30000/generate",
    json={
        "text": "The future of AI is",
        "sampling_params": {
            "top_p": 0.95,
            "top_k": 20,
            "temperature": 0.8,
            "max_new_tokens": 256
        },
    },
)
print(response.json())

لاحظ أن SGLang تقدم أيضًا واجهة برمجة تطبيقات متوافقة مع OpenAI، مما يجعلها بديلاً مباشرًا للخدمات الخارجية.

مع تكامل الواجهة الخلفية للمحولات الجديدة، يمكن لـ SGLang الآن الرجوع تلقائيًا إلى استخدام نماذج المحولات التي لا تدعمها أصلاً. وهذا يعني عمليا:

  • الوصول الفوري إلى النماذج الجديدة المضافة إلى المحولات
  • دعم النماذج المخصصة من Hugging Face Hub
  • تكاليف هندسية أقل

يؤدي هذا إلى فتح الاستدلال الأسرع والنشر الأمثل (على سبيل المثال تمكين RadixAttention) دون التضحية بالبساطة وتعدد استخدامات النظام البيئي للمحولات.

الاستخدام

llm = sgl.Engine(model_path="meta-llama/Llama-3.2-1B-Instruct", impl="transformers")

لاحظ أن تحديد المعلمة impl أمر اختياري. إذا لم يكن النموذج مدعومًا أصلاً بواسطة SGLang، فإنه يتحول إلى تنفيذ المحولات من تلقاء نفسه.

أي نموذج على Hugging Face Hub يعمل معه transformers استخدام trust_remote_code=True وينفذ الاهتمام بشكل صحيح متوافق مع SGLang. يمكنك العثور على المتطلبات الدقيقة في الوثائق الرسمية. إذا كان نموذجك المخصص يلبي هذه المعايير، فكل ما عليك فعله هو تعيين Trust_remote_code=True عند تحميله.

llm = sgl.Engine(model_path="new-custom-transformers-model", impl="transformers", trust_remote_code=True)

مثال

لم يتم دعم هيليوم فريق Kyutai بشكل أصلي بواسطة SGLang. هذا هو المكان الذي تتألق فيه الواجهة الخلفية للمحولات، مما يتيح الاستدلال الأمثل دون انتظار الدعم الأصلي.

python3 -m sglang.launch_server \
  --model-path kyutai/helium-1-preview-2b \
  --impl transformers \
  --host 0.0.0.0 \
  --port 30000
response = requests.post(
    "http://localhost:30000/generate",
    json={
        "text": "The capital of France is",
        "sampling_params": {
            "top_p": 0.95,
            "top_k": 20,
            "temperature": 0.8,
            "max_new_tokens": 256
        },
    },
)
print(response.json())

هناك العديد من المجالات الرئيسية التي نعمل عليها بنشاط لتعزيز هذا التكامل:

  1. تحسينات الأداء: تتخلف نماذج المحولات حاليًا عن التكامل الأصلي من حيث الأداء. هدفنا الأساسي هو تحسين هذه الفجوة وتضييقها.

  2. دعم لورا

  3. تكامل VLM: نعمل أيضًا على إضافة دعم لنماذج الرؤية واللغة (VLM) لتوسيع نطاق الإمكانات وحالات الاستخدام.

شاركها.
اترك تعليقاً