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 وتضيف محركات متخصصة حسب الحاجة.
التالي، سنستكشف التخزين المؤقت للبادئة وتقنيات التحسين المتقدمة. :::