تدريب 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
ماذا يحدث أثناء التدريب
- تحميل النموذج — تنزيل
unsloth/granite-4.0-h-tiny(أو المتغير الذي تم تكوينه) من Hugging Face وتحميله بتكميم 4 بت - حقن LoRA — يضيف مصفوفات محولات ذات رتبة منخفضة إلى الانتباه + طبقات Mamba (يضيف ~1-2% من المعلمات)
- تحميل مجموعة البيانات — يقرأ
training/data/soc_train.jsonlويطبق قالب دردشة Granite - إخفاء الاستجابة — يقوم بتكوين الخسارة للتدريب على الرموز المميزة للمساعد فقط (وليس مطالبات النظام/المستخدم)
- حلقة التدريب — تشغيل عدد العصور الذي تم تكوينه باستخدام مُحسِّن AdamW-8bit
- حفظ نقطة التفتيش — يحفظ محولات LoRA في كل N خطوة إلى
training/checkpoints/ - التصدير النهائي — يحفظ محولات 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
هذا:
- يُنشئ Ollama
Modelfileباستخدام قالب الدردشة Granite 4 - يتم تشغيل
ollama create granite-soc:latest -f Modelfile - النموذج متاح الآن باسم
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 memory | VRAM غير كافية للطراز + الدفعة | قم بتقليل 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 أو أقل |
| اكتمل التدريب ولكن فشل تصدير GGUF | Unsloth مشكلة التصدير الثنائي | التصدير يدويًا: model.save_pretrained_gguf(...) |
تحسين ذاكرة GPU
إذا نفدت VRAM:
-
تقليل حجم الدفعة إلى 1:
training:per_device_train_batch_size: 1gradient_accumulation_steps: 8 # Increase to maintain effective batch -
استخدم نموذجًا أصغر:
model:name: unsloth/granite-4.0-micro # Smallest variant -
تقليل رتبة LoRA:
lora:r: 32 # Down from 64lora_alpha: 32 -
تقليل طول التسلسل:
model:max_seq_length: 2048 # Down from 4096
الخطوات التالية
- قم بتقييم النموذج الخاص بك — قم بتشغيل المعايير قبل النشر
- تدريب متخصصين لكل وكيل — إذا كنت تريد نماذج خاصة بالنطاق
- تدريب عامل الميناء — للتدريب القابل للتكرار في حاويات