الدرس 16 من 22

الأداء والتحسين

متطلبات العتاد

3 دقيقة للقراءة

فهم متطلبات العتاد يساعدك على اختيار الإعداد المناسب لتشغيل نماذج اللغة المحلية بكفاءة. النماذج المختلفة لها احتياجات مختلفة جداً.

مكونات العتاد الرئيسية

┌─────────────────────────────────────────────────────────────────┐
│                   تأثير العتاد على أداء النماذج                  │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  المكون         │ التأثير          │ ما تبحث عنه                │
│  ───────────────│──────────────────│───────────────────────     │
│  ذاكرة GPU      │ حد حجم النموذج   │ 8GB+ لـ 7B، 24GB+ لـ 70B   │
│  ذاكرة النظام   │ ذاكرة احتياطية   │ 16GB حد أدنى، 32GB+ مثالي  │
│  المعالج        │ معالجة الطلبات   │ متعدد النوى حديث           │
│  التخزين        │ تحميل النموذج    │ SSD موصى به بشدة           │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

متطلبات VRAM حسب حجم النموذج

┌─────────────────────────────────────────────────────────────────┐
│                   متطلبات VRAM (مضغوط Q4)                       │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  حجم النموذج    │ Q4 VRAM  │ Q8 VRAM  │ نماذج أمثلة             │
│  ───────────────│──────────│──────────│────────────────────     │
│  1B بارامتر     │ ~1 GB    │ ~2 GB    │ llama3.2:1b, phi3:mini  │
│  3B بارامتر     │ ~2 GB    │ ~4 GB    │ llama3.2:3b             │
│  7-8B بارامتر   │ ~4-5 GB  │ ~8 GB    │ llama3.2:8b, mistral    │
│  13B بارامتر    │ ~8 GB    │ ~14 GB   │ codellama:13b           │
│  34B بارامتر    │ ~20 GB   │ ~36 GB   │ codellama:34b           │
│  70B بارامتر    │ ~40 GB   │ ~70 GB   │ llama3.2:70b            │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

إرشادات حسب المنصة

Apple Silicon (M1/M2/M3/M4)

Apple Silicon ممتاز لنماذج اللغة المحلية بسبب بنية الذاكرة الموحدة.

# تحقق من ذاكرة Mac الموحدة
system_profiler SPHardwareDataType | grep "Memory"

# Ollama يستخدم Metal (GPU) تلقائياً على Apple Silicon
ollama run llama3.2  # يستخدم GPU افتراضياً

توصيات Apple Silicon:

  • M1/M2 (8GB): حتى نماذج 7B (ضغط Q4)
  • M1/M2 Pro (16GB): حتى نماذج 13B بارتياح
  • M1/M2 Max (32GB): حتى نماذج 34B
  • M1/M2 Ultra (64GB+): نماذج 70B ممكنة

بطاقات NVIDIA

# تحقق من GPU NVIDIA و VRAM
nvidia-smi

# المخرج يظهر VRAM المتاحة
# |   0  NVIDIA GeForce RTX 4090   |   00000000:01:00.0  On |   24576MiB |

توصيات NVIDIA:

  • RTX 3060 (12GB): نماذج 7B-13B
  • RTX 3090/4090 (24GB): حتى نماذج 34B (Q4)
  • A100 (40GB/80GB): نماذج 70B كاملة

وضع CPU فقط

التشغيل على CPU ممكن لكن أبطأ بكثير.

# فرض وضع CPU فقط (مفيد للاختبار)
CUDA_VISIBLE_DEVICES="" ollama run llama3.2:1b

# على Mac، عطّل Metal
OLLAMA_NO_METAL=1 ollama run llama3.2:1b

إدارة الذاكرة

import subprocess
import json

def check_ollama_memory():
    """تحقق من استخدام ذاكرة Ollama الحالي."""
    result = subprocess.run(
        ["ollama", "ps"],
        capture_output=True,
        text=True
    )
    print(result.stdout)

def estimate_model_memory(params_billions: float, quantization: str = "Q4") -> dict:
    """قدّر متطلبات الذاكرة لنموذج."""
    # بايت تقريبي لكل بارامتر حسب الضغط
    bytes_per_param = {
        "Q4": 0.5,   # 4-bit: ~0.5 بايت/بارامتر
        "Q5": 0.625, # 5-bit: ~0.625 بايت/بارامتر
        "Q8": 1.0,   # 8-bit: ~1 بايت/بارامتر
        "F16": 2.0,  # 16-bit: ~2 بايت/بارامتر
    }

    bpp = bytes_per_param.get(quantization, 0.5)
    model_size_gb = (params_billions * 1e9 * bpp) / (1024**3)

    # أضف ~20% للـ KV cache ووقت التشغيل
    total_needed = model_size_gb * 1.2

    return {
        "model_size_gb": round(model_size_gb, 1),
        "recommended_vram_gb": round(total_needed, 1),
        "quantization": quantization
    }

# حسابات مثال
for size in [1, 3, 7, 13, 34, 70]:
    req = estimate_model_memory(size)
    print(f"نموذج {size}B (Q4): ~{req['recommended_vram_gb']} GB VRAM مطلوب")

فحص نظامك

import platform
import subprocess
import os

def get_system_info():
    """احصل على معلومات النظام ذات الصلة لاستدلال LLM."""
    info = {
        "platform": platform.system(),
        "processor": platform.processor(),
        "python_version": platform.python_version(),
    }

    # تحقق من Apple Silicon
    if platform.system() == "Darwin":
        try:
            result = subprocess.run(
                ["sysctl", "-n", "hw.memsize"],
                capture_output=True, text=True
            )
            ram_bytes = int(result.stdout.strip())
            info["ram_gb"] = round(ram_bytes / (1024**3), 1)
            info["apple_silicon"] = platform.processor() == "arm"
        except:
            pass

    # تحقق من NVIDIA GPU
    try:
        result = subprocess.run(
            ["nvidia-smi", "--query-gpu=name,memory.total",
             "--format=csv,noheader"],
            capture_output=True, text=True
        )
        if result.returncode == 0:
            info["nvidia_gpu"] = result.stdout.strip()
    except FileNotFoundError:
        info["nvidia_gpu"] = None

    return info

# تحقق من نظامك
system = get_system_info()
for key, value in system.items():
    print(f"{key}: {value}")

ملخص التوصيات

الميزانية العتاد أفضل النماذج
مبتدئ ($0) لابتوب حالي (8GB RAM) llama3.2:1b, phi3:mini
ميزانية ($500-1000) Mac Mini M2 (16GB) llama3.2:8b, mistral
متوسط ($1500-2500) Mac Studio M2 Max (32GB) codellama:34b, mixtral
عالي ($3000+) RTX 4090 أو Mac Studio Ultra llama3.2:70b

العتاد يحدد سقف نموذجك. في الدرس التالي، سنستكشف كيف يتيح لك الضغط تشغيل نماذج أكبر في ذاكرة أقل. :::

اختبار

الوحدة 5: الأداء والتحسين

خذ الاختبار