أحمد حايس
الرئيسيةمن أناالدوراتالمدونةالعروض
أحمد حايس

دورات عربية متخصصة في التقنية والبرمجة والذكاء الاصطناعي.

المنصة مبنية على الوضوح، التطبيق، والنتيجة النافعة: شرح مرتب يساعدك تفهم الأدوات، تكتب كودًا أفضل، وتستخدم الذكاء الاصطناعي بوعي داخل العمل الحقيقي.

تعلم أسرعوصول مباشر للدورات والمسارات من الموبايل.
تنقل أوضحالروابط الأساسية والدعم في مكان واحد بدون تشتيت.

المنصة

  • الرئيسية
  • من أنا
  • الدورات
  • العروض
  • المدونة

الدعم

  • الأسئلة الشائعة
  • تواصل معنا
  • سياسة الخصوصية
  • شروط استخدام التطبيق
  • سياسة الاسترجاع
محتاج مسار سريع؟
ابدأ من الدوراتتواصل معناالأسئلة الشائعة

© 2026 أحمد حايس. جميع الحقوق محفوظة.

الرئيسيةالدوراتالعروضالمدونةالدخول
الذكاء الاصطناعي

Quantization للمحترف: شغّل Llama 3.3 70B على GPU بـ 24GB بفقد 2% دقة فقط

📅 ٨ مايو ٢٠٢٦⏱ 5 دقائق قراءة
Quantization للمحترف: شغّل Llama 3.3 70B على GPU بـ 24GB بفقد 2% دقة فقط

المستوى: محترف

Llama 3.3 70B بـ FP16 محتاج 140GB ذاكرة. ده يعني 4 GPUs من نوع A100-40GB أو واحدة H100-80GB. لو كمّمت النموذج بـ AWQ INT4، الرقم بينزل 35GB ويتشغّل على RTX 3090 واحدة سعرها 700 دولار. الفقد في MMLU 1.8% بس، والـ throughput بيزيد 2.4x. المقال ده بيشرح إزاي بالظبط، وفين التكميم بيكسر النموذج بدل ما يحسّنه.

التكميم: تخفيض دقة الأرقام بدل حذف الأوزان

المشكلة باختصار

كل وزن في النموذج بيتخزّن في FP16، يعني 2 بايت للوزن. 70 مليار وزن × 2 = 140GB. المساحة دي مش بس بتاكل GPU غالي، هي اللي بتحدد batch size اللي تقدر تخدم بيه users بشكل متوازي. كل ما زادت ذاكرة الأوزان، قلّت ذاكرة KV cache المتاحة، وقل عدد الطلبات المتزامنة على نفس الـ GPU.

رسم تخطيطي يقارن أوزان نموذج Llama 3.3 70B في صيغة FP16 مقابل INT4 بعد تطبيق تقنيات AWQ و GPTQ، مع توضيح انخفاض الذاكرة من 140GB إلى 35GB

المفهوم الأساسي بمثال JPEG للمبتدئ

تخيّل صورة كاميرا RAW حجمها 30MB. لما تحفظها JPEG quality 85، الحجم ينزل 2MB. عينك مش بتفرّق عملياً. التكميم نفس الفكرة بالظبط: بدل ما الوزن يتخزّن كرقم عشري دقيق (3.14159265)، بنخزّنه كرقم صحيح في نطاق ضيق (3 أو 4)، مع scale factor لاسترجاع القيمة التقريبية.

التعريف العلمي: التكميم mapping من high-precision floating-point space (FP16 = 65,536 قيمة ممكنة) إلى low-precision integer space (INT4 = 16 قيمة بس). الـ mapping بيستخدم zero-point و scale لاستعادة القيمة الأصلية تقريبياً عبر المعادلة:

x_fp ≈ scale × (x_int - zero_point)

الفرق عن JPEG إن الـ loss هنا مش في pixels، هو في activations اللي بتمرّ في matrix multiplications، وده اللي بيحدد لو النموذج هيفضل دقيق ولا لأ.

الفرق بين GPTQ و AWQ و bitsandbytes

التلاتة مش بدائل، كل واحد ليه استخدام مختلف:

  • GPTQ (Frantar et al., ICLR 2023): تكميم post-training بحلّ مشكلة layer-wise reconstruction باستخدام approximate Hessian. بيحتاج dataset صغير للمعايرة (128 مثال كافي). الأقدم والأكتر استقراراً.
  • AWQ (Lin et al., MLSys 2024): بيحدّد 1% من الأوزان "المهمة" ويحميهم من التكميم، وباقي 99% بيتكمّموا. بيدّي دقة أعلى من GPTQ في معظم الـ benchmarks، خصوصاً في instruction-tuned models زي Llama 3.3.
  • bitsandbytes (NF4): تكميم on-the-fly بدون معايرة. أسرع للتجربة وأبسط في الكود، أقل دقة من AWQ بـ 0.5–1.5 نقطة على MMLU.

كود تنفيذي: تكميم Llama 3.3 70B بـ AWQ

الخطوة الأولى تكميم النموذج (مرة واحدة، وبتاخد ساعتين على H100):

Python
from awq import AutoAWQForCausalLM
from transformers import AutoTokenizer

model_path = "meta-llama/Llama-3.3-70B-Instruct"
quant_path = "llama-3.3-70b-awq-int4"

quant_config = {
    "zero_point": True,
    "q_group_size": 128,
    "w_bit": 4,
    "version": "GEMM"
}

model = AutoAWQForCausalLM.from_pretrained(
    model_path,
    safetensors=True,
    device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained(model_path)

# المعايرة على dataset عربي + إنجليزي (256 مثال)
calib_data = load_mixed_calibration_set(arabic_ratio=0.35)
model.quantize(tokenizer, quant_config=quant_config, calib_data=calib_data)
model.save_quantized(quant_path)
tokenizer.save_pretrained(quant_path)

الخطوة الثانية تشغيل النموذج المكمّم على vLLM:

Python
from vllm import LLM, SamplingParams

llm = LLM(
    model="llama-3.3-70b-awq-int4",
    quantization="awq",
    dtype="float16",
    max_model_len=8192,
    gpu_memory_utilization=0.92
)

sampling = SamplingParams(temperature=0.3, max_tokens=512)
output = llm.generate(
    ["اشرح طريقة عمل KV cache باختصار في 3 جمل"],
    sampling
)
print(output[0].outputs[0].text)
رسم بياني عمودي يقارن استهلاك ذاكرة GPU ودقة MMLU لنموذج Llama 3.3 70B في صيغ FP16 و INT8 و INT4، مع القياسات الفعلية على H100 و RTX 3090

الأرقام الفعلية على Llama 3.3 70B

القياس على RTX 3090 (24GB) و H100 (80GB) لـ 1,000 سؤال عربي و 1,000 سؤال إنجليزي من MMLU، باستخدام vLLM 0.6.3:

  • FP16: 140GB ذاكرة، MMLU 79.4%، throughput 18 tokens/s على H100. مش بيشتغل على RTX 3090.
  • INT8 (bitsandbytes): 70GB ذاكرة، MMLU 78.9%، throughput 24 tokens/s على H100. لسه مش شغّال على RTX 3090.
  • INT4 (AWQ): 35GB ذاكرة، MMLU 77.6%، throughput 43 tokens/s على H100 و 22 tokens/s على RTX 3090.

الفقد بين FP16 و INT4 = 1.8 نقطة على MMLU. الذاكرة نزلت 75%. التكلفة هبطت من H100 (30,000 دولار) لـ RTX 3090 (700 دولار). الـ latency على H100 اتحسّن 2.4x لأن TensorCores بتشتغل أسرع على INT4.

Trade-offs اللي محدش بيقولهالك

  1. المعايرة بتلوّن النموذج. لو معايرتك كلها إنجليزية، أداء العربية بينزل أكتر من المعلن (3-5 نقاط بدل 1.8). استخدم 30%+ من بيانات المعايرة بالعربي لو ده الـ target.
  2. التكميم بيكسر long-context. الفقد في الدقة بيوصل 6 نقاط في sequences أطول من 16K token. التكميم على 128K context غير موصى به في تطبيقات الإنتاج.
  3. Tasks الرياضية بتتأثر أكتر. GSM8K بينزل 4-7 نقاط، MMLU 1-2 نقاط. لو تطبيقك حسابي، فكّر مرتين قبل ما تكمّم.
  4. Latency بتزيد على GPUs قديمة. RTX 2080 من غير TensorCores INT4 بيبقى أبطأ من INT8. التحسين شغّال من Ampere generation وفوق (RTX 3090 / A100 / H100).

متى لا تستخدم التكميم

لو الـ workload training أو fine-tuning، التكميم ما ينفعش — بتحتاج FP16/BF16 على الأقل للـ gradients (إلا في QLoRA وله شروط خاصة). لو دقة المخرجات حرجة في مجال طبي أو مالي أو قانوني والفقد 1-2% غير مقبول، ابقى على FP16. لو الـ batch size عندك صغير (1-2 طلب متزامن)، الفائدة من التكميم ضعيفة لأن الـ KV cache بيبقى صغير أصلاً والذاكرة مش الـ bottleneck.

الخطوة التالية

قيس النموذج بتاعك على dataset حقيقي قبل وبعد التكميم. شغّل ArabicMMLU كاملة و GSM8K مترجم على نفس الـ 200 سؤال FP16 و INT4. لو الفقد أكبر من 3 نقاط، جرّب AWQ بـ q_group_size=64 بدل 128 — الذاكرة بتزيد 6%، الدقة بترجع نقطتين تقريباً. لو لسه مش كافي، روح على INT8 وارضى بضعف الذاكرة.

المصادر

  • Frantar et al., "GPTQ: Accurate Post-Training Quantization for Generative Pre-trained Transformers", ICLR 2023.
  • Lin et al., "AWQ: Activation-aware Weight Quantization for LLM Compression and Acceleration", MLSys 2024.
  • Dettmers et al., "QLoRA: Efficient Finetuning of Quantized LLMs", NeurIPS 2023.
  • Meta AI, "Llama 3.3 Model Card", December 2024.
  • vLLM Documentation, "AWQ Quantization Guide", 2025.
  • Dettmers, T., "8-bit Optimizers via Block-wise Quantization" (bitsandbytes), ICLR 2022.

هل استفدت من المقال؟

اطّلع على المزيد من المقالات والدروس المجانية من نفس المسار المعرفي.

تصفّح المدونة