vLLM ومحركات الاستدلال مفتوحة المصدر

محركات الاستدلال البديلة: TGI وOpenLLM وSGLang

3 دقيقة للقراءة

بينما يهيمن vLLM، محركات أخرى تتفوق في سيناريوهات محددة. فهم المشهد يساعدك على اختيار الأداة الصحيحة.

Text Generation Inference (TGI)

خادم استدلال الإنتاج من Hugging Face:

# نشر TGI بـ Docker
docker run --gpus all \
    -p 8080:80 \
    -v ~/.cache/huggingface:/data \
    ghcr.io/huggingface/text-generation-inference:latest \
    --model-id meta-llama/Llama-3.3-70B-Instruct \
    --num-shard 4

نقاط القوة:

  • تكامل أصلي مع Hugging Face Hub
  • تكميم مدمج (GPTQ, AWQ, GGUF)
  • ممتاز لمستخدمي نظام Hugging Face البيئي
  • توليد مقيد بالقواعد

حالات الاستخدام:

# استخدام عميل TGI
from huggingface_hub import InferenceClient

client = InferenceClient("http://localhost:8080")

# توليد قياسي
response = client.text_generation(
    "اشرح التعلم الآلي:",
    max_new_tokens=500,
    temperature=0.7,
)

# مقيد بالقواعد (إخراج JSON)
response = client.text_generation(
    "ولد ملف تعريف مستخدم:",
    grammar={
        "type": "json",
        "value": {"name": "string", "age": "number"}
    }
)

SGLang

محرك عالي الأداء مع RadixAttention للتخزين المؤقت للبادئة:

# تثبيت SGLang
pip install sglang[all]

# تشغيل الخادم
python -m sglang.launch_server \
    --model-path meta-llama/Llama-3.3-70B-Instruct \
    --tp 4 \
    --port 30000

الابتكار الرئيسي - RadixAttention:

┌─────────────────────────────────────────────────┐
│          RadixAttention (SGLang)                │
├─────────────────────────────────────────────────┤
│                                                 │
│  شجرة Radix للتخزين المؤقت للبادئة:           │
│                                                 │
│         "النظام: أنت"                          │
│              /          \                       │
│    "مساعد"             "خبير"                  │
│       /    \                 \                  │
│  "ذكي"   "ودود"         "برمجة"               │
│                                                 │
│  مطابقة ومشاركة البادئة تلقائياً              │
│  لا حاجة لإدارة البادئة يدوياً                │
│  تسريع 2-5 أضعاف للبادئات المتكررة            │
│                                                 │
└─────────────────────────────────────────────────┘

واجهة DSL الأمامية:

import sglang as sgl

@sgl.function
def multi_turn_chat(s, user_messages):
    s += sgl.system("أنت مساعد ذكي.")

    for msg in user_messages:
        s += sgl.user(msg)
        s += sgl.assistant(sgl.gen("response", max_tokens=256))

    return s

# إعادة استخدام KV cache تلقائياً عبر الاستدعاءات
result = multi_turn_chat.run(
    user_messages=["مرحبا!", "كيف الطقس؟"]
)

OpenLLM

إطار خدمة LLM من BentoML:

# تثبيت OpenLLM
pip install openllm

# خدمة النموذج
openllm serve meta-llama/Llama-3.3-70B-Instruct \
    --backend vllm \
    --quantize int4

نقاط القوة:

  • API موحد عبر الخلفيات (vLLM, TGI, GGML)
  • إصدار ونشر سهل للنماذج
  • تكامل مع نظام BentoML البيئي
  • خدمة نماذج متعددة
# واجهة Python لـ OpenLLM
import openllm

llm = openllm.LLM("meta-llama/Llama-3.3-70B-Instruct")

# توليد متزامن
response = llm.generate("مرحبا، كيف حالك؟")

# بث غير متزامن
async for chunk in llm.generate_stream("اكتب قصة:"):
    print(chunk, end="")

مقارنة المحركات

الميزة vLLM TGI SGLang OpenLLM
PagedAttention ✅ أصلي ✅ نعم ✅ RadixAttn عبر الخلفية
التجميع المستمر ✅ نعم ✅ نعم ✅ نعم عبر الخلفية
الفك التخميني ✅ نعم ✅ نعم ✅ نعم محدود
OpenAI API ✅ نعم ✅ نعم ✅ نعم ✅ نعم
متعدد الوسائط ✅ جيد ✅ جيد ✅ أساسي ✅ أساسي
التكميم FP8, AWQ, GPTQ GPTQ, AWQ, GGUF FP8, AWQ الكل
تخزين البادئة ✅ يدوي ❌ محدود ✅ تلقائي عبر الخلفية
قيد القواعد ❌ لا ✅ نعم ✅ نعم ✅ نعم
الأفضل لـ إنتاج عام نظام HF كثير البادئات متعدد الخلفيات

إطار القرار

┌─────────────────────────────────────────────────────────────┐
│              أي محرك تختار؟                                 │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  ابدأ هنا                                                   │
│      │                                                      │
│      ▼                                                      │
│  تحتاج أقصى إنتاجية؟                                       │
│      │                                                      │
│      ├── نعم ──► vLLM (الاختيار الافتراضي)                │
│      │                                                      │
│      └── لا ──► تابع...                                    │
│                   │                                         │
│                   ▼                                         │
│           بادئات متكررة كثيرة؟                             │
│                   │                                         │
│                   ├── نعم ──► SGLang (RadixAttention)      │
│                   │                                         │
│                   └── لا ──► تابع...                       │
│                                │                            │
│                                ▼                            │
│                    تحتاج إخراج JSON/قواعد؟                 │
│                                │                            │
│                                ├── نعم ──► TGI             │
│                                │                            │
│                                └── لا ──► تابع...          │
│                                             │               │
│                                             ▼               │
│                                  نظام HuggingFace البيئي؟  │
│                                             │               │
│                                             ├── نعم ──► TGI│
│                                             │               │
│                                             └── لا ──► vLLM│
│                                                             │
└─────────────────────────────────────────────────────────────┘

النشر الهجين

أحياناً تعمل محركات متعددة معاً:

# Kubernetes: التوجيه حسب حالة الاستخدام
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: llm-router
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  rules:
  - http:
      paths:
      # معالجة دفعات عالية الإنتاجية
      - path: /batch(/|$)(.*)
        pathType: Prefix
        backend:
          service:
            name: vllm-service
            port: 8000

      # توليد مخرجات مهيكلة
      - path: /structured(/|$)(.*)
        pathType: Prefix
        backend:
          service:
            name: tgi-service
            port: 8080

      # دردشة مع تخزين بادئة
      - path: /chat(/|$)(.*)
        pathType: Prefix
        backend:
          service:
            name: sglang-service
            port: 30000

معظم المؤسسات تبدأ بـ vLLM وتضيف محركات متخصصة حسب الحاجة.

التالي، سنستكشف التخزين المؤقت للبادئة وتقنيات التحسين المتقدمة. :::

اختبار

الوحدة 2: vLLM ومحركات الاستدلال مفتوحة المصدر

خذ الاختبار