المستوى: محترف — المقال ده موجّه لمن يشغّل نماذج لغة كبيرة في الإنتاج ويعرف مصطلحات مثل التوكن، الـ latency، والـ throughput.
لو سيرفر الـ LLM بتاعك بيولّد التوكن ورا التوكن ببطء وزمن الاستجابة عالي، تقدر تنزّله 2 إلى 3 أضعاف بتقنية اسمها فك التشفير التخميني (Speculative Decoding)، بدون ما تغيّر النموذج ولا تخسر جودة المخرجات. المقال ده بيشرحلك إزاي بالظبط، بمثال بسيط الأول وبعدين علميًا، مع كود شغّال وأرقام حقيقية.
فك التشفير التخميني: تسريع استدلال نماذج اللغة بدون خسارة جودة
المشكلة باختصار
توليد النص في الـ LLM عملية تسلسلية (autoregressive). النموذج بيطلّع توكن واحد في كل تمريرة أمامية (forward pass)، وبعدين بيحطّه في المدخل ويكرّر. يعني علشان تطلّع 200 توكن، لازم 200 تمريرة كاملة على مليارات الباراميترات.
المشكلة اللي بتحصل فعلاً إن التمريرة الواحدة دي مقيّدة بعرض نطاق الذاكرة (memory bandwidth bound)، مش بقوة الحساب. يعني كرت الشاشة بيقضّي معظم وقته بيقرا أوزان النموذج من الذاكرة، والوحدات الحسابية نصها فاضي. ده معناه إن عندك طاقة حساب مهدورة تقدر تستغلّها.
الفكرة بمثال بسيط قبل العلمي
تخيّل محرّر بيكتب كتاب. بدل ما يكتب كلمة ويستنى المدقّق الكبير يراجعها، ثم يكتب اللي بعدها، فيه مساعد سريع بيكتب جملة كاملة متوقّعة قدّام. بعد كده المدقّق الكبير بيقرا الجملة كلها مرة واحدة: الكلمات الصح بيقبلها فورًا، وأول كلمة غلط بيوقف عندها ويصلّحها.
النتيجة: المدقّق الكبير راجع 5 كلمات في زمن قراءة واحدة بدل 5 مرات منفصلة. لو المساعد بيخمّن صح غالبًا، السرعة بتزيد كتير. ده بالظبط اللي بيعمله فك التشفير التخميني.
علميًا: بتستخدم نموذجين. نموذج صغير سريع (draft model) بيقترح k توكن قدّام بسرعة. النموذج الكبير (target model) بياخد الاقتراحات دي ويتحقق منها في تمريرة أمامية واحدة متوازية. لأن التمريرة أصلاً مقيّدة بالذاكرة، التحقق من 5 توكن بيكلّف تقريبًا نفس تكلفة توليد توكن واحد.
إزاي بيضمن نفس المخرجات بالظبط
ده الجزء المهم اللي بيخلّي التقنية آمنة: التحقق مش بياخد اقتراح النموذج الصغير كما هو. فيه خطوة قبول/رفض احتمالية (rejection sampling) بتضمن إن التوزيع النهائي للتوكنز مطابق تمامًا لتوزيع النموذج الكبير لوحده.
- النموذج الصغير يقترح k توكن (مثلًا 4 أو 5).
- النموذج الكبير يحسب احتمالاته للتوكنز دي كلها في تمريرة واحدة.
- كل توكن يُقبل باحتمال نسبة احتمال الكبير إلى الصغير؛ أول رفض بيوقف السلسلة.
- عند الرفض، يُعاد أخذ عيّنة من توزيع مصحّح، فالمخرج يفضل صحيحًا إحصائيًا.
خلاصة الافتراض هنا: انت بتقايض حساب زيادة (تشغيل نموذجين) مقابل تقليل عدد الخطوات التسلسلية. ولأن الحساب الزيادة بيتم في طاقة كانت مهدورة أصلًا، بتكسب سرعة صافية.
الكود: جرّبه بنفسك
في مكتبة Transformers من Hugging Face، التقنية اسمها "assisted generation" وبتفعّلها بسطر واحد: تمرّر نموذج مساعد.