مستوى المقال: محترف (يتطلب خبرة سابقة في LLM inference و vLLM/transformers و GPU memory model)
Speculative Decoding: ازاي تضاعف سرعة Llama 70B بدون ما تغيّر كلمة في الرد
لو بتشغّل Llama 3.1 70B على H100 وبتشتكي من 87 token/s، Speculative Decoding بيوديك لـ 234 token/s على نفس الـ GPU. النموذج بيرد بنفس الـ tokens بالظبط، اللي بيتغيّر هو ازاي بيوصلها. الـ KL divergence بين التوزيعين = 0، ده مش approximation.
المشكلة باختصار
الـ autoregressive generation بيخلق token واحد في كل forward pass. ده معناه إن H100 ($30K للقطعة) بيقعد فاضي 70% من الوقت، لأن الـ memory bandwidth (3 TB/s) مش الـ compute (1979 TFLOPS) هي عنق الزجاجة. كل token جديد بيقرا 140GB weights كاملة من الـ HBM علشان يرجّع رقم واحد. الـ FLOPs الفعلية المستخدمة أقل من 5% من الطاقة المتاحة. هدر صريح.
الافتراض هنا: إنت بتخدم Llama 70B أو نموذج بنفس الحجم على GPU واحدة على الأقل، والـ batch size الفعلي عندك بين 1 و 16. لو الـ batch أكبر من 32 الـ compute بقت bottleneck والـ speculation مش هتنفع — هنرجع لده في القسم الأخير.
الفكرة الأساسية - مثال السكرتير والمدير
تخيّل مدير بيكتب رد ايميل مهم. كل جملة بيفكر فيها 30 ثانية ويكتبها. السكرتير الجديد قاعد جنبه، عارف أسلوب المدير لأنه قراله سنة كاملة من ايميلاته. السكرتير بيتنبأ بأول 5 جمل ويكتبهم في 6 ثواني. المدير بيقرا الـ 5 في ثانيتين، يقول "أول 4 صح، الخامسة مش اللي كنت هكتبها"، يعدّل الخامسة بنفسه، ويكمل السكرتير من هناك بـ 5 جمل جديدة.
الناتج النهائي: نفس الايميل بالظبط اللي المدير كان هيكتبه لو شغل لوحده. الفرق: السكرتير عمل المسوّدة بسرعة، المدير اشتغل بدور المراجع بس. الوقت الكلي اتنزل من 5 دقايق لـ 1.8 دقيقة.
التطبيق على LLM
الـ target model (Llama 70B) هو المدير. الـ draft model (Llama 3.2 1B من نفس الـ family) هو السكرتير. الـ draft بيولّد γ tokens مسبقاً (γ = 5 شائع). الـ target بيعمل forward pass واحد بيقيّم كل الـ γ+1 tokens في وقت واحد — لأن الـ batched verification ممكنة معمارياً في الـ transformer (الـ attention mask المثلثية بتسمح بده مجاناً).
الإثبات الرياضي إن المخرج متطابق
السؤال المشروع: لو الـ draft model أصغر بكتير، ليه التوزيع النهائي هو نفسه توزيع الـ target؟ الإجابة في الـ rejection sampling.
الخوارزمية بالضبط (Leviathan et al., ICML 2023):
- الـ draft بيولّد γ tokens t₁...tγ بحسب التوزيع q(x).
- الـ target بيعمل forward pass واحد على الـ prefix + γ tokens، فيرجّع γ+1 توزيعات p(x).
- لكل token i بالترتيب: نقبلها باحتمال min(1, p_i(t_i)/q_i(t_i)).
- أول ما نرفض token عند موقع j، نوقف. ناخد sample جديد من التوزيع norm(max(0, p_j - q_j)) — التوزيع المتبقي بعد طرح الجزء اللي الـ draft غطّاه.
- التوكنز من الموقع j+1 وراها بترمى وبنبدأ دورة جديدة.
الإثبات: التوزيع المركّب يساوي p(x) بالضبط لكل x. مش approximation. مش "قريب من". مساواة رياضية. الـ paper بيثبتها في 4 سطور رياضية (Section 2.2). DeepMind نشر نفس النتيجة بشكل مستقل في نفس السنة (Chen et al. 2023).