هذا المقال يتطلب مستوى متوسط — يفترض إنك جربت تشغّل LLM محلي مرة أو اتنين، وفاهم الفرق بين GPU و CPU inference، ومش متضايق من أرقام الـ VRAM ولا قراءة tokens/s.
لو حاولت تشغّل Llama 3 70B على GPU بـ 24GB VRAM، الموديل بيرفض من أول سطر ويقولك إنه محتاج 140GB. الفرق 5.8 أضعاف. مفيش طريقة تنزل من 140 لـ 24 إلا بتقنية اسمها Quantization. المقال ده هيوريك بالظبط ازاي تعمل ده، بكام بتخسر من الجودة، وفي إيه الحالات اللي مينفعش فيها أصلاً.
المشكلة باختصار: ليه الموديل بيحجز 140GB؟
كل باراميتر في Llama 3 70B بيتخزّن في صيغة Float16 (FP16) — يعني 2 بايت لكل رقم. لو ضربت 70 مليار باراميتر × 2 بايت = 140 جيجابايت، وده قبل ما تحسب الـ activations والـ KV cache اللي بيضافوا فوقهم وقت الـ inference.
RTX 4090 معاه 24GB. A100 معاه 80GB. حتى H100 80GB مش هيوسّع الموديل بـ FP16 من غير tensor parallelism على كذا GPU. الحل مش تشتري hardware أكبر — الحل تقلل حجم كل باراميتر نفسه. وده اللي بيعمله Quantization.
مثال السوبرماركت (الفكرة بالعربي البسيط)
تخيّل عندك سوبرماركت بيخزّن سعر كل منتج بـ 10 منازل عشرية: 12.7384926175. ده دقيق جداً، بس بياخد مساحة كبيرة جداً في قاعدة البيانات.
في الحقيقة، السعر بيتعرض للزبون كـ 12.74 فقط — 4 منازل بس. الـ 6 منازل اللي بعدهم؟ مش بتفرق فعلياً، ولا الزبون هياخد باله، ولا حتى نتيجة الفاتورة هتختلف.
Quantization نفس الفكرة بالظبط: بدل ما تخزّن كل وزن من أوزان الموديل بـ 16 bit (دقة عالية جداً)، تخزّنه بـ 8 bit أو 4 bit. الجودة بتنزل شوية بسيطة، الذاكرة بتنزل كتير، والسرعة بتزيد كمان (لأن memory bandwidth هي الـ bottleneck الحقيقي في الـ inference، مش الـ compute).
التعريف العلمي الدقيق
Quantization هي عملية تحويل أوزان الموديل من نوع رقمي عالي الدقة (FP32 أو FP16) لنوع أقل دقة (INT8, INT4) مع الحفاظ على أعلى accuracy ممكنة من خلال خطوات حسابية محددة:
- نحدد الـ range بتاع القيم في كل tensor (مثلاً
[-2.5, 3.1]). - نوزّع الـ range ده على عدد محدود من القيم الصحيحة. في INT8 عندنا 256 قيمة (-128 لـ 127). في INT4 عندنا 16 قيمة بس.
- نخزّن scaling factor لكل block صغير (عادةً 32 أو 128 وزن) علشان نقدر نرجع للقيمة الأصلية تقريبياً وقت الـ inference.
الفكرة الأساسية: الـ weights في LLMs مش موزّعة بشكل uniform. أغلبها قريب من الصفر، والـ outliers قليلة. ده بيخلّي الـ quantization ممكن يحافظ على 97% من الجودة بـ 25% من الذاكرة.
أنواع Quantization الشائعة
مش كل أنواع الـ quantization متساوية. ده اللي بتشوفه في الـ production فعلياً: