هذا المقال يتطلب مستوى: محترف. الكلام ده موجّه لمن نشروا نماذج LLM على GPU في الإنتاج، يعرفون vLLM أو TGI، ومتعاملين مع مفاهيم KV cache، attention layers، والـ autoregressive generation. لو لسه بتجرّب أول API call على Claude أو OpenAI، ابدأ بمقالات Tool Use أو Prompt Caching الأول.
لو throughput الـ Llama 3.1 70B بتاعك واقف عند 38 token/ثانية على H100 SXM، المشكلة مش في الـ GPU ومش في الـ batch size. الـ autoregressive decoding بطبيعته بيولّد token واحد في كل forward pass، والـ GPU بيقعد فاضي 70% من الوقت بسبب memory-bound operations. Speculative Decoding بيرفع الرقم لـ 91 token/ثانية على نفس الـ workload بدون لمس النموذج ولا تخفيض جودة المخرجات حرف واحد.
Speculative Decoding: تسريع الاستدلال بدون تغيير النموذج الأصلي
المشكلة باختصار
كل token بيخرج من LLM محتاج forward pass كامل على الـ 70 مليار parameter. على H100، الـ FLOPs مش هي المشكلة، الذاكرة هي اللي بتقعد المعالج فاضي. وقت ما الـ GPU بيقرأ الـ weights من HBM علشان يحسب الـ next token، الـ compute units بتقعد idle بنسبة تتجاوز 65% في batch size = 1. ركز على النقطة دي: انت بتدفع تمن GPU كامل علشان يقعد فاضي ثلثي الوقت.
الحل الكلاسيكي بيقول: زوّد الـ batch size. بس ده شغّال بس لو عندك concurrent users كثير. لو السيناريو single-user low-latency زي chat application أو code completion، الـ batching مش هيساعد. هنا بيدخل Speculative Decoding كحل من فئة مختلفة تمامًا.
الفكرة بمثال بسيط — للوضوح فقط قبل ما ندخل علمي
تخيل محرر صحفي كبير عنده 30 سنة خبرة، بيكتب مقال بدقة كاملة بس بسرعة سطر واحد في الدقيقة. جنبه مساعد متدرّب بيكتب 5 سطور في الدقيقة، لكن دقته 70% فقط. الطريقة الذكية: المساعد يكتب 5 سطور كـ "اقتراح"، المحرر يقرأهم كلهم في ثانية واحدة (مش بيكتبهم، بس بيراجع)، يقبل اللي صح ويتدخّل بس من أول سطر فيه خطأ.
النتيجة: لو المحرر بيقبل في المتوسط 4 من أصل 5 سطور، خلصنا نفس المقال في خُمس الوقت تقريبًا، بنفس الجودة بالظبط. ولاحظ: المحرر لسه هو اللي بيقرر، فالمنتج النهائي مفيش فيه أي تنازل. ده Speculative Decoding بالظبط: draft model صغير بيقترح، target model الكبير بيتحقق بالتوازي.
التعريف العلمي الدقيق
Speculative Decoding، اللي اقترحها Leviathan وفريقه في ورقة Fast Inference from Transformers via Speculative Decoding (ICML 2023)، بتستغل خاصيتين أساسيتين في معمارية Transformer:
- الـ forward pass على عدد قليل من الـ tokens (مثلًا 6) بياخد تقريبًا نفس وقت forward pass على token واحد، لأن الـ bottleneck في قراءة الـ weights من الذاكرة مش في الحساب نفسه. ده اسمه memory-bound regime.
- توزيع الـ probability الذي يولّده نموذج صغير بيتشابه إحصائيًا مع توزيع نموذج كبير لـ tokens "السهلة": مسافات، علامات ترقيم، أسماء شائعة، أنماط syntax متكررة.
الخوارزمية بالتفاصيل: draft model بيولّد K tokens مقترحة بشكل autoregressive (γ = 5 افتراضيًا في vLLM). target model بيعمل forward pass واحد على الـ K tokens بالتوازي ويحسب probability كل token تحت distribution بتاعه. لو الـ ratio بين probability الـ target وprobability الـ draft يحقق شرط القبول (modified rejection sampling من Chen et al. 2023)، الـ token بيتقبل. أول token بيترفض، بيرجع الاستدلال عادي لـ target model من النقطة دي.