المستوى: محترف (Advanced)
لو شات بوتك على Llama 3.1-70B بيطلع 28 token/sec وفاتورة الـ GPU وصلت $1,400 شهرياً، انت بتشتري compute مش بتستخدمه. Speculative Decoding بيرفع الرقم لـ 67 token/sec على نفس الـ GPU، بنفس جودة الإجابة بالظبط، بدون retraining ولا أي تعديل في الموديل الأساسي.
المشكلة باختصار: ليه الـ LLM بطيء حتى لو الـ GPU فاضي
توليد الـ tokens في موديل LLM autoregressive ظاهرة محرجة لو بصّيت في الأرقام. الموديل بيولّد token واحد بس في كل forward pass، وبيستنى الـ token ده يخلص قبل ما يبدأ على اللي بعده. النتيجة المباشرة: لو فيه 132 streaming multiprocessor (SM) على H100، 80% منهم بيقفوا ساكتين أثناء توليد كل token.
قياس فعلي على Llama 3.1-70B على H100 80GB واحد، batch=1: استخدام الـ FLOPS الحقيقي 13% فقط. الـ bottleneck مش compute، الـ bottleneck هو نقل أوزان الموديل من الـ HBM (140GB/s effective bandwidth) لـ on-chip cache. الموديل بـ 140GB في bfloat16، يعني كل forward pass لازم يقرأ 140GB من VRAM علشان يطلع token واحد. ده اللي بيخلّي السرعة محكومة بـ memory bandwidth مش بـ compute.
الفكرة دلوقتي: لو قدرنا نولّد كذا token محتمل في وقت قراءة الـ 140GB مرة واحدة، هنضرب السرعة في عدد الـ tokens. ده بالظبط اللي Speculative Decoding بيعمله.
المفهوم بالتقريب: كاتب صحفي محترف ومسوّدة سريعة
تخيّل كاتب صحفي محترف بيكتب مقال طويل لجريدة. الكاتب بطيء جداً لكن دقيق ومحترف. صاحب الجريدة عيّن كاتب مبتدئ سريع بجواره، شغلته يكتب مسودة أولية مرة وراء التانية. الكاتب المحترف بياخد المسودة بتاعت 5 جمل دفعة واحدة، يقراها كلها في نفس الوقت، يقول "الجمل الـ 3 الأولانية كويسة هكمّل بيهم، الجملة الرابعة غلط هكتبها أنا".
النتيجة: لو 75% من شغل المبتدئ مقبول، الكاتب المحترف وفّر 75% من وقته. والأهم: الجودة النهائية هي جودة المحترف بالظبط، لأن أي حاجة سيئة بيرفضها هو شخصياً ويكتبها من تاني.
Speculative Decoding نفس الفكرة بالحرف. موديل صغير اسمه draft model (زي Llama 3.2-1B، حجمه 2GB) بيولّد K tokens (مثلاً 5) بسرعة عالية جداً. الموديل الكبير target model (Llama 3.1-70B، 140GB) بياخد الـ 5 tokens كلهم في forward pass واحد متوازي، ويحسب احتمالاتهم في نفس الوقت. كل token متفق عليه بيتم accept فوراً، أول token بيختلف فيه الموديلان بيتم reject وresample من distribution الموديل الكبير.
التعريف الرياضي من Leviathan et al. (Google DeepMind, 2023)
الورقة الأصلية أثبتت إثبات صارم إن الخوارزمية بترجّع نفس الـ output distribution بالظبط اللي كان الموديل الكبير هيرجّعه لو اشتغل لوحده. مفيش تقريب ولا فقد جودة، ده مش approximation. المعادلة الأساسية لاحتمال قبول token معيّن x:
α(x) = min(1, p_target(x) / p_draft(x))
p_target هو احتمال الـ token من الموديل الكبير، p_draft من الصغير. لو الموديلان متفقان (نفس الـ token غالباً)، النسبة تقريباً 1 ومعظم الـ tokens بتتقبل. لو الصغير اقترح token الكبير شايفه مستبعد، الـ token بيترفض، ويتم resample من distribution مُصحّحة: