انتقل إلى المحتوى الرئيسي

تدريب GPU المحلي

يستعرض هذا الدليل الضبط الدقيق لـ IBM Granite 4 على جهاز محلي باستخدام وحدة معالجة الرسومات NVIDIA. هذه هي طريقة التدريب الأكثر شيوعًا للفرق التي لديها أجهزة GPU مخصصة.

لماذا التدريب المحلي؟

  • تحكم كامل — لا تترك بياناتك جهازك أبدًا
  • التكرار السريع — لا توجد دورات تحميل/تنزيل
  • نقاط التفتيش الدائمة — توقف واستأنف في أي وقت
  • النشر المباشر — قم بتصدير GGUF واستيراده إلى Ollama المحلي على الفور
  • ** مطلوب للبيئات ذات فجوات الهواء **

بداية سريعة

# Step 1: Install dependencies
make train-install

# Step 2: Prepare training data
make train-data

# Step 3: Train the model
make train

# Step 4: Import into Ollama
make train-serve-ollama

هذا كل شيء. بعد هذه الأوامر الأربعة، يتم تشغيل النموذج الذي تم ضبطه بدقة في Ollama وسيستخدمه مصنع الوكيل تلقائيًا (بمجرد تمكينه عبر متغيرات البيئة).

دليل خطوة بخطوة

الخطوة 1: تثبيت التبعيات

make train-install

يعمل هذا على تشغيل pip install -e ".[training]" الذي يقوم بتثبيت:

  • unsloth — تدريب LoRA أسرع مرتين
  • الشعلة — PyTorch بدعم CUDA
  • المحولات — تحميل نموذج الوجه المعانق
  • trl — مدرب ضبط دقيق تحت الإشراف
  • مجموعات البيانات — تحميل مجموعة البيانات ومعالجتها
  • mamba_ssm + causal_conv1d — نواة Mamba لنماذج Granite 4 Hybrid
تجميع مامبا لأول مرة

يتم تجميع [نواة نموذج مساحة حالة Mamba] (https://github.com/state-spaces/mamba) من المصدر عند التثبيت الأول. يتطلب هذا مجموعة أدوات CUDA عاملة ويستغرق حوالي 10 دقائق. عمليات التثبيت اللاحقة تكون فورية.

الخطوة 2: إعداد بيانات التدريب

make train-data

يؤدي ذلك إلى تنزيل مجموعات بيانات الأمن السيبراني العامة (MITRE ATT&CK، وقواعد Sigma، وAtomic Red Team، وما إلى ذلك) وتحويلها إلى تنسيق تدريب. راجع دليل إعداد مجموعة البيانات للحصول على التفاصيل.

الإخراج: training/data/soc_train.jsonl - ملف JSONL حيث يكون كل سطر عبارة عن محادثة بتنسيق قالب الدردشة الخاص بـ Granite.

الخطوة 3: تدريب النموذج

# Train generic SOC model (all domains)
make train

# Or with custom config
python training/scripts/finetune_granite.py --config training/configs/granite_soc_finetune.yaml

ماذا يحدث أثناء التدريب

  1. تحميل النموذج — تنزيل unsloth/granite-4.0-h-tiny (أو المتغير الذي تم تكوينه) من Hugging Face وتحميله بتكميم 4 بت
  2. حقن LoRA — يضيف مصفوفات محولات ذات رتبة منخفضة إلى الانتباه + طبقات Mamba (يضيف ~1-2% من المعلمات)
  3. تحميل مجموعة البيانات — يقرأ training/data/soc_train.jsonl ويطبق قالب دردشة Granite
  4. إخفاء الاستجابة — يقوم بتكوين الخسارة للتدريب على الرموز المميزة للمساعد فقط (وليس مطالبات النظام/المستخدم)
  5. حلقة التدريب — تشغيل عدد العصور الذي تم تكوينه باستخدام مُحسِّن AdamW-8bit
  6. حفظ نقطة التفتيش — يحفظ محولات LoRA في كل N خطوة إلى training/checkpoints/
  7. التصدير النهائي — يحفظ محولات LoRA، وملفات FP16 + GGUF المدمجة اختياريًا

مراقبة تقدم التدريب

يقوم البرنامج النصي للتدريب بإخراج سجل التقدم:

2024-12-01 10:00:00 [INFO] ════════════════════════════════════════════════════════
2024-12-01 10:00:00 [INFO] AuroraSOC — Granite 4 Fine-Tuning Pipeline
2024-12-01 10:00:00 [INFO] Model: unsloth/granite-4.0-h-tiny | Agent: all
2024-12-01 10:00:00 [INFO] ════════════════════════════════════════════════════════
2024-12-01 10:00:15 [INFO] GPU: NVIDIA GeForce RTX 4090 | Memory: 3.2/24.0 GB (13.3%)
2024-12-01 10:00:20 [INFO] Dataset formatted: 8547 examples
2024-12-01 10:00:22 [INFO] Masking instruction tokens — training on assistant completions only
2024-12-01 10:00:22 [INFO] Starting training...
{'loss': 1.823, 'learning_rate': 2e-05, 'epoch': 0.04, 'step': 10}
{'loss': 1.512, 'learning_rate': 6.8e-05, 'epoch': 0.07, 'step': 20}
{'loss': 1.104, 'learning_rate': 1.2e-04, 'epoch': 0.11, 'step': 30}
...
{'loss': 0.423, 'learning_rate': 8.1e-06, 'epoch': 2.95, 'step': 800}

ما الذي تبحث عنه:

  • يجب أن تنخفض الخسارة — تبدأ عند ~1.5-2.0 ويجب أن تنخفض إلى ~0.3-0.5
  • ذاكرة وحدة معالجة الرسومات — يجب أن تظل ضمن حدود VRAM لديك
  • معدل التعلم — يتبع جدول جيب التمام (يتصاعد ثم يتراجع)
  • الخطوات/الثانية — الأعلى هو الأفضل. يحقق Unsloth عادةً إنتاجية 2 × مقابل تدريب الفانيليا

ضبط المعلمات الفائقة

تحرير training/configs/granite_soc_finetune.yaml لضبط التدريب:

training:
per_device_train_batch_size: 2 # Increase if VRAM allows (4, 8)
gradient_accumulation_steps: 4 # Effective batch = batch_size × grad_accum
num_train_epochs: 3 # 3 epochs is usually enough
learning_rate: 2.0e-4 # 2e-4 is standard for LoRA
warmup_ratio: 0.05 # 5% warmup steps
weight_decay: 0.01 # Regularization
lr_scheduler_type: cosine # Cosine decay schedule
optim: adamw_8bit # 8-bit AdamW (saves ~30% memory)
bf16: true # BFloat16 mixed precision
logging_steps: 10 # Log every 10 steps
save_steps: 200 # Checkpoint every 200 steps
save_total_limit: 3 # Keep only last 3 checkpoints

** التعديلات المشتركة: **

الموقفما يجب تغييرهلماذا
التدريب بطيء جدًازيادة batch_sizeاستخدام أفضل لوحدة معالجة الرسومات
خارج VRAMقم بتقليل batch_size إلى 1، واستخدم نموذجًا أصغرذاكرة أقل لكل خطوة
هضاب الخسارة في وقت مبكرقم بتقليل learning_rate إلى 1e-4تقارب أكثر استقرارا
التجهيز الزائد (ارتداد الخسارة)قم بتقليل num_train_epochs إلى 1-2تحفيظ أقل
لا يكفي التعلمقم بزيادة num_train_epochs إلى 5المزيد يمر عبر البيانات
مجموعة بيانات صغيرة (<1000 عينة)قم بزيادة gradient_accumulation_steps إلى 8-16دفعة فعالة أكبر تعوض

الخطوة 4: التصدير والنشر

بعد اكتمال التدريب، يتم حفظ محولات LoRA في training/checkpoints/granite_soc_lora/.

تصدير إلى GGUF (لـ Ollama)

# Generate GGUF with Q8_0 quantization
python training/scripts/finetune_granite.py \
--export-only training/checkpoints/granite_soc_lora

# Or enable auto-export in config:
# export:
# save_gguf: true
# gguf_quantization_methods: [q8_0, q4_k_m]

يتم حفظ ملف GGUF في training/checkpoints/granite_soc_gguf/.

استيراد إلى أولاما

# Using serve_model.py
python training/scripts/serve_model.py ollama \
--gguf training/checkpoints/granite_soc_gguf/unsloth.Q8_0.gguf \
--name granite-soc:latest

# Or using Make
make train-serve-ollama

هذا:

  1. يُنشئ Ollama Modelfile باستخدام قالب الدردشة Granite 4
  2. يتم تشغيل ollama create granite-soc:latest -f Modelfile
  3. النموذج متاح الآن باسم granite-soc:latest في Ollama

التحقق من النموذج

# List Ollama models
ollama list

# Test inference
ollama run granite-soc:latest "Analyze this Suricata alert: ET TROJAN Cobalt Strike Beacon..."

الخطوة 5: تمكين النماذج المضبوطة بدقة في AuroraSOC

افتراضيًا، تستخدم AuroraSOC نماذج Granite الأساسية. للتبديل إلى النموذج الذي تم ضبطه بدقة:

# Toggle via Make
make enable-finetuned

# Or set environment variables manually
export GRANITE_USE_FINETUNED=true
export GRANITE_FINETUNED_MODEL_TAG=granite-soc:latest
export GRANITE_SERVING_BACKEND=ollama

راجع دليل تبديل نموذج التوصيل والتشغيل للحصول على التفاصيل الكاملة.

الاستئناف من نقاط التفتيش

في حالة انقطاع التدريب، استأنف من نقطة التفتيش الأخيرة:

python training/scripts/finetune_granite.py \
--resume training/checkpoints/granite_soc_lora/checkpoint-400

يقوم المدرب تلقائيًا بالعثور على أحدث نقطة تفتيش في الدليل ويستمر من تلك الخطوة.

دورات تدريبية متعددة

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

# Train with tiny model
python training/scripts/finetune_granite.py \
--config training/configs/granite_soc_finetune.yaml

# Train with small model (modify config first)
# Edit granite_soc_finetune.yaml: model.name: unsloth/granite-4.0-h-small
python training/scripts/finetune_granite.py \
--config training/configs/granite_soc_finetune.yaml

أو قم بإنشاء ملفات تكوين منفصلة لكل متغير:

cp training/configs/granite_soc_finetune.yaml training/configs/granite_soc_small.yaml
# Edit the copy to use granite-4.0-h-small
python training/scripts/finetune_granite.py --config training/configs/granite_soc_small.yaml

استكشاف الأخطاء وإصلاحها

القضايا المشتركة

خطأسببيصلح
CUDA out of memoryVRAM غير كافية للطراز + الدفعةقم بتقليل batch_size إلى 1 أو استخدم نموذجًا أصغر
ImportError: mamba_ssmلم يتم تجميع حبات مامباpip install --no-build-isolation mamba_ssm==2.2.5 causal_conv1d==1.5.2
Training data not foundلم تقم بتشغيل إعداد البياناتmake train-data
Tokenizer errorإصدار نموذج خاطئتأكد من استخدام نماذج unsloth/granite-4.0-h-*
NaN lossمعدل التعلم مرتفع للغايةقم بتقليل learning_rate إلى 1e-4 أو أقل
اكتمل التدريب ولكن فشل تصدير GGUFUnsloth مشكلة التصدير الثنائيالتصدير يدويًا: model.save_pretrained_gguf(...)

تحسين ذاكرة GPU

إذا نفدت VRAM:

  1. تقليل حجم الدفعة إلى 1:

    training:
    per_device_train_batch_size: 1
    gradient_accumulation_steps: 8 # Increase to maintain effective batch
  2. استخدم نموذجًا أصغر:

    model:
    name: unsloth/granite-4.0-micro # Smallest variant
  3. تقليل رتبة LoRA:

    lora:
    r: 32 # Down from 64
    lora_alpha: 32
  4. تقليل طول التسلسل:

    model:
    max_seq_length: 2048 # Down from 4096

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