أساسيات استدلال نماذج اللغة الكبيرة
الفك الترميزي التخميني لتوليد أسرع
يكسر الفك الترميزي التخميني عنق الزجاجة التسلسلي للتوليد الذاتي الانحداري، محققاً تسريعات 2-3 أضعاف بدون فقدان الجودة.
المشكلة التسلسلية
تذكر أن توليد الرموز تسلسلي بطبيعته—كل رمز يعتمد على السابق:
ذاتي انحداري قياسي:
الرمز 1 → الرمز 2 → الرمز 3 → الرمز 4 → الرمز 5
↓ ↓ ↓ ↓ ↓
تمرير تمرير تمرير تمرير تمرير
GPU GPU GPU GPU GPU
↓ ↓ ↓ ↓ ↓
المجموع: 5 تمريرات GPU أمامية متسلسلة
هذا يحد من سرعة التوليد بغض النظر عن قوة حساب GPU.
مفهوم الفك الترميزي التخميني
استخدم نموذج "مسودة" صغير وسريع للتنبؤ برموز متعددة، ثم التحقق مع النموذج الكبير:
الفك الترميزي التخميني:
┌─────────────────────────────────────────────────────────┐
│ الخطوة 1: نموذج المسودة يولد k رمز بسرعة │
│ ┌─────────────────────────────────────────────────┐ │
│ │ المسودة (68M معامل): T1 → T2 → T3 → T4 → T5 │ │
│ │ الوقت: ~5 مللي ثانية (سريع جداً) │ │
│ └─────────────────────────────────────────────────┘ │
│ │
│ الخطوة 2: النموذج الهدف يتحقق من جميع الرموز معاً │
│ ┌─────────────────────────────────────────────────┐ │
│ │ الهدف (70B معامل): [T1, T2, T3, T4, T5] │ │
│ │ الوقت: ~100 مللي ثانية (تمرير أمامي واحد) │ │
│ │ النتيجة: T1✓ T2✓ T3✓ T4✗ T5- │ │
│ └─────────────────────────────────────────────────┘ │
│ │
│ الخطوة 3: قبول الرموز المتحققة، إعادة أخذ عينة من T4 │
│ الإخراج: T1, T2, T3, T4' (مصحح) │
│ توليد 4 رموز في وقت ~1.5 تمرير أمامي │
│ │
└─────────────────────────────────────────────────────────┘
كيف يعمل التحقق
النموذج الهدف يتحقق من رموز المسودة باستخدام أخذ عينات الرفض:
# خوارزمية تحقق مبسطة
def verify_tokens(draft_tokens, draft_probs, target_probs):
accepted = []
for i, token in enumerate(draft_tokens):
# حساب احتمالية القبول
p_target = target_probs[i][token]
p_draft = draft_probs[i][token]
# قبول إذا وافق الهدف أو مع نسبة الاحتمالية
if random.random() < min(1, p_target / p_draft):
accepted.append(token)
else:
# رفض وإعادة أخذ عينة من توزيع معدل
adjusted_prob = max(0, p_target - p_draft)
adjusted_prob /= adjusted_prob.sum()
new_token = sample(adjusted_prob)
accepted.append(new_token)
break # توقف عند أول رفض
return accepted
رؤية رئيسية: هذا يحافظ على نفس توزيع الإخراج تماماً كأخذ العينات القياسي—لا فقدان للجودة.
أنواع الفك الترميزي التخميني
1. التخمين القائم على النموذج
استخدام نموذج أصغر من نفس العائلة:
# vLLM مع نموذج مسودة
from vllm import LLM
llm = LLM(
model="meta-llama/Llama-3.3-70B-Instruct",
speculative_model="meta-llama/Llama-3.3-8B-Instruct",
num_speculative_tokens=5, # مسودة k=5 رموز
)
# التسريع: ~2.5 ضعف على أحمال العمل النموذجية
2. تخمين N-gram
استخدام مطابقة n-gram من المحث (تكلفة حساب صفرية):
# تكوين تخمين N-gram
# يبحث عن أنماط متكررة في الإدخال/الإخراج
llm = LLM(
model="meta-llama/Llama-3.3-70B-Instruct",
speculative_model="[ngram]", # قائم على N-gram
ngram_prompt_lookup_max=4, # النظر للخلف 4 رموز
num_speculative_tokens=5,
)
# الأفضل لـ: توليد الكود، المخرجات المهيكلة
# التسريع: 1.5-2 ضعف مع تكلفة قريبة من الصفر
3. Medusa (تخمين متعدد الرؤوس)
إضافة رؤوس تخمين للنموذج الهدف:
┌─────────────────────────────────────────────┐
│ بنية MEDUSA │
├─────────────────────────────────────────────┤
│ │
│ حالات النموذج الهدف المخفية │
│ │ │
│ ┌─────┴─────┬─────────┬─────────┐ │
│ ▼ ▼ ▼ ▼ │
│ الرأس 0 الرأس 1 الرأس 2 الرأس 3 │
│ (t+1) (t+2) (t+3) (t+4) │
│ │
│ كل رأس يتنبأ برمز مستقبلي مختلف │
│ تحقق بهيكل شجري │
│ لا حاجة لنموذج مسودة منفصل │
│ │
└─────────────────────────────────────────────┘
4. Eagle (أحدث ما توصل إليه 2025)
تخمين متقدم مع متنبئ متعلم:
# Eagle3 يحقق أعلى معدلات قبول
# لكن يتطلب ضبط قيمة k بعناية
# نتيجة البحث (نوفمبر 2025):
# - قيمة k خاطئة يمكن أن تزيد التكاليف بـ 175%
# - k=1 الأمثل يعطي تقليل تكلفة 20-54%
# - مع FP8: أفضل نتائج إجمالية
تكوين الإنتاج
الإعدادات المثلى تعتمد على حمل العمل:
| حمل العمل | الطريقة الموصى بها | قيمة k | التسريع المتوقع |
|---|---|---|---|
| دردشة عامة | قائم على النموذج | 4-5 | 2-2.5 ضعف |
| توليد الكود | N-gram | 3-5 | 1.5-2 ضعف |
| JSON مهيكل | N-gram | 5-7 | 2-3 ضعف |
| نص طويل | قائم على النموذج | 3-4 | 1.8-2.2 ضعف |
# الفك الترميزي التخميني في vLLM (يناير 2026)
from vllm import LLM, SamplingParams
llm = LLM(
model="meta-llama/Llama-3.3-70B-Instruct",
# تكوين نموذج المسودة
speculative_model="meta-llama/Llama-3.3-8B-Instruct",
num_speculative_tokens=4,
# ضبط الأداء
speculative_draft_tensor_parallel_size=1, # TP للمسودة
use_v2_block_manager=True, # مطلوب للتخمين
)
# معاملات أخذ العينات تؤثر على كفاءة التخمين
params = SamplingParams(
temperature=0.7, # درجة حرارة أقل = معدل قبول أعلى
top_p=0.9,
max_tokens=1024,
)
قياس كفاءة التخمين
# المقاييس الرئيسية
acceptance_rate = accepted_tokens / drafted_tokens
# الهدف: >70% لتسريع جيد
# التسريع الفعال
speedup = (tokens_generated) / (target_forward_passes)
# مثال: 100 رمز في 40 تمرير = 2.5 ضعف تسريع
# كفاءة التكلفة (مقياس حاسم)
cost_per_token = (draft_compute + target_compute) / accepted_tokens
# يجب أن يكون أقل من خط الأساس للفائدة الصافية
الفك الترميزي التخميني أصبح الآن معياراً في الإنتاج—ادمجه مع التكميم والتجميع لأقصى أداء.
الوحدة التالية: الغوص العميق في vLLM، محرك الاستدلال مفتوح المصدر الرائد. :::