المستوى: متوسط — تحتاج خلفية أساسية بـ Python وفهم بسيط لتشغيل الموديلات اللغوية.
Quantization: شغّل Llama 3 70B على لابتوب بـ 16GB RAM
لو حاولت تشغّل Llama 3 70B على لابتوبك ووجدت إن الموديل بيحتاج 140GB من VRAM، يعني محتاج سيرفر صناعي بـ$30,000. الـ Quantization بيخلّي نفس الموديل يشتغل على لابتوب 16-32GB RAM، مع فقدان دقة 3-5% بس.
المشكلة باختصار
الموديلات الكبيرة بتُخزَّن بصيغة FP16 (16-bit floating point). كل وزن في الموديل بيشغل بايتين. Llama 3 70B عنده 70 بليون وزن × 2 بايت = 140 جيجا. ده مش هيشتغل غير على H100 أو A100 بسعر فلكي.
الحل اسمه Quantization: ضغط أوزان الموديل من FP16 لـ INT4 (4-bit integer). يعني كل وزن يبقى نص بايت بدل بايتين. النتيجة: 140GB → 35GB → 18GB بعد التحسينات. الموديل يبقى يشتغل على M2 Pro بـ 32GB، أو حتى 16GB مع quantization أقوى شوية.
مثال للمبتدئ: ضغط الصور في واتساب
تخيّل عندك صورة 4K بحجم 12 ميجا. لما تفتحها على واتساب وتبعتها لصاحبك، واتساب بيضغطها لـ 800 كيلو. الصورة بتفقد دقة بسيطة، بس لسه تشوف الوش والملامح بوضوح.
الـ Quantization بنفس الفكرة بالظبط. الموديل الأصلي زي صورة الـ 4K، الـ quantized version زي نسخة واتساب. بتخسر تفاصيل قليلة جدًا في الإجابات، بس الموديل لسه قادر يفهم ويرد بكفاءة عالية، بفرق ميلاحظوش غير في المهام المعقدة جدًا.
التعريف العلمي الدقيق
Quantization في الـ deep learning هي عملية تحويل أوزان الموديل من تمثيل بدقة عالية (مثل FP16 أو FP32) لتمثيل بدقة أقل (مثل INT8 أو INT4). العملية بتعتمد على معادلتين أساسيتين: scale و zero-point.
# المعادلة الأساسية للـ quantization
quantized_value = round((float_value / scale) + zero_point)
# والعكس (dequantization عند الـ inference):
float_value = (quantized_value - zero_point) * scale
# مثال عملي: ضغط وزن FP16 = 0.7234 لـ INT4
# scale = 0.05, zero_point = 8
# quantized = round(0.7234 / 0.05) + 8 = 14 + 8 = ... وهكذا
الـ scale هو معامل التحجيم اللي بيقلّل المدى من ±65,504 لـ ±8 (في حالة INT4). والـ zero_point هو القيمة اللي تمثّل الصفر في النطاق الجديد. بتُحسب لكل block من الأوزان (عادة 64 أو 128 وزن) عشان نقلل خسارة الدقة الموزّعة.
الأنواع الأساسية للـ Quantization
- Post-Training Quantization (PTQ): بنضغط الموديل بعد ما يخلص training. أسرع وأبسط، بس الدقة بتقل شوية أكتر.
- Quantization-Aware Training (QAT): الموديل بيتدرب وهو عارف إنه هيتضغط. أعلى دقة، بس يحتاج وقت training طويل.
- صيغة ضغط متخصصة لـ CPU inference، شائعة جدًا في llama.cpp وتشتغل على Mac و Windows و Linux.