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

تدريب جوجل كولاب

يوفر Google Colab وحدة معالجة رسوميات T4 مجانية (ذاكرة VRAM سعة 16 جيجابايت) — وهي كافية لضبط نماذج Granite 4 Hybrid لـ AuroraSOC. هذا هو الأسلوب الموصى به إذا لم يكن لديك وحدة معالجة رسومات محلية.

لماذا كولاب؟

فائدةتفاصيل
** GPU مجاني **T4 (16 جيجابايت) على الطبقة المجانية، A100 (40/80 جيجابايت) على الطبقة الاحترافية
** لا حاجة للأجهزة **يعمل من أي متصفح
** CUDA التي تم تكوينها مسبقًا **لا يوجد تثبيت للسائق
** التكامل مع جوجل درايف **احفظ النماذج في Drive، وقم بتنزيلها لاحقًا
قابل للمشاركةأرسل رابط دفتر الملاحظات إلى زملائك في الفريق

دفتر الملاحظات

دفتر التدريب موجود في:

training/notebooks/AuroraSOC_Granite4_Finetune.ipynb

الافتتاح في كولاب

  1. تحميل على جوجل درايف:

    • قم بتحميل AuroraSOC_Granite4_Finetune.ipynb على Google Drive
    • انقر نقرًا مزدوجًا لفتحه في Colab
  2. أو افتح مباشرة:

  3. ** تمكين وقت تشغيل GPU: **

    • انقر وقت التشغيلتغيير نوع وقت التشغيل
    • حدد T4 GPU (مجاني) أو A100 (Pro)
    • انقر حفظ

تجول دفتر الملاحظات

يحتوي دفتر الملاحظات على 10 أقسام تعكس مسار التدريب المحلي:

القسم 0: تثبيت التبعيات

%%capture
!pip install unsloth torch transformers trl datasets pyyaml
!pip install --no-build-isolation mamba_ssm==2.2.5 causal_conv1d==1.5.2

السبب: تثبيت Unsloth (تدريب أسرع مرتين) ونواة Mamba (لبنية Granite 4 Hybrid). يستغرق تجميع Mamba kernel حوالي 10 دقائق عند التشغيل لأول مرة — وهذا أمر طبيعي.

القسم 1: التكوين

# Which agent to train? "all" = generic SOC model
AGENT_PROFILE = "all"

# Model variant
MODEL_NAME = "unsloth/granite-4.0-h-tiny"

# LoRA parameters
LORA_R = 64
LORA_ALPHA = 64

# Training parameters
BATCH_SIZE = 2
GRAD_ACCUM = 4
NUM_EPOCHS = 3
LEARNING_RATE = 2e-4

# Export format
GGUF_QUANT = "q8_0"

خيارات التكوين الرئيسية:

المعلمةT4 مجانيكولاب برو (A100)لماذا
MODEL_NAMEgranite-4.0-h-tinygranite-4.0-h-smallالطراز الأكبر = جودة أفضل، وذاكرة فيديو (VRAM) أكبر
BATCH_SIZE24-8يحتوي A100 على المزيد من VRAM
LORA_R6464-128رتبة أعلى = المزيد من القدرات
GGUF_QUANTq8_0q8_0أعلى جودة تناسبها

كيفية تدريب المتخصصين لكل وكيل: قم بتغيير AGENT_PROFILE من "all" إلى اسم وكيل محدد:

  • "security_analyst" — تحليل التنبيهات، واستخراج IOC، ورسم خرائط MITRE
  • "threat_hunter" — فرضيات الصيد، اكتشاف LOLBin
  • "incident_responder" - كتيبات قواعد NIST وخطط الاحتواء
  • "malware_analyst" — قواعد YARA، تحليل بيئة العزل (Sandbox)
  • "network_security" — تحليل التدفق، ونفق DNS
  • "cps_security" — ICS/OT، Modbus، IEC 62443
  • "threat_intel" - تتبع APT، STIX/TAXII
  • "forensic_analyst" — الطب الشرعي للذاكرة/القرص، سلسلة الحراسة
  • "orchestrator" — التوجيه والتنسيق متعدد الوكلاء

القسم 2: نموذج التحميل + LoRA

from unsloth import FastLanguageModel

model, tokenizer = FastLanguageModel.from_pretrained(
model_name=MODEL_NAME,
max_seq_length=4096,
load_in_4bit=True, # Quantized loading (saves VRAM)
)

model = FastLanguageModel.get_peft_model(
model,
r=LORA_R,
target_modules=[
"q_proj", "k_proj", "v_proj", "o_proj",
"gate_proj", "up_proj", "down_proj",
"shared_mlp.input_linear", "shared_mlp.output_linear", # Granite 4 Hybrid
],
lora_alpha=LORA_ALPHA,
lora_dropout=0,
bias="none",
use_gradient_checkpointing="unsloth",
)

لماذا هذه الأهداف؟ تتضمن قائمة target_modules كلا من طبقات Transformer القياسية (q_proj، k_proj، وما إلى ذلك) وطبقات Mamba الخاصة بـ Granite 4 Hybrid (shared_mlp.input_linear، shared_mlp.output_linear). يضمن التدريب أن النموذج يتعلم عبر بنيته بالكامل.

** لماذا load_in_4bit=True؟ ** يعمل التكميم 4 بت (QLoRA) على تقليل أثر ذاكرة النموذج الأساسي بمقدار ~4×، مما يسمح لذاكرة VRAM سعة 16 جيجابايت الخاصة بـ T4 بالتعامل مع النموذج + أوزان LoRA + حالات المحسن + عمليات التنشيط. بدون التكميم، حتى النموذج الصغير لن يكون مناسبًا.

القسم 3: تحميل وإعداد مجموعة البيانات

يتوقع دفتر الملاحظات بيانات التدريب الخاصة بك كملف JSONL تم تحميله إلى Colab:

from google.colab import files

# Option A: Upload from local machine
uploaded = files.upload() # Select your soc_train.jsonl

# Option B: Mount Google Drive
from google.colab import drive
drive.mount('/content/drive')
# Then reference: /content/drive/MyDrive/path/to/soc_train.jsonl

من أين تأتي البيانات؟ قم بتشغيل make train-data محليًا أولاً (لا حاجة إلى وحدة معالجة الرسومات)، ثم قم بتحميل training/data/soc_train.jsonl الناتج إلى Colab.

القسم 4: تكوين SFTTrainer

from trl import SFTConfig, SFTTrainer
from unsloth.chat_templates import train_on_responses_only

trainer = SFTTrainer(
model=model,
tokenizer=tokenizer,
train_dataset=dataset,
args=SFTConfig(
per_device_train_batch_size=BATCH_SIZE,
gradient_accumulation_steps=GRAD_ACCUM,
num_train_epochs=NUM_EPOCHS,
learning_rate=LEARNING_RATE,
bf16=True,
optim="adamw_8bit",
output_dir=OUTPUT_DIR,
),
)

# Only train on assistant responses
trainer = train_on_responses_only(
trainer,
instruction_part="<|start_of_role|>user<|end_of_role|>",
response_part="<|start_of_role|>assistant<|end_of_role|>",
)

لماذا train_on_responses_only؟ هذا أمر بالغ الأهمية - فهو يطلب من المدرب حساب الخسارة فقط على الرموز المميزة بعد <|start_of_role|>assistant<|end_of_role|>. لا يتعلم النموذج كيفية إنشاء مطالبات النظام أو استعلامات المستخدم - بل يتعلم فقط كيفية إنشاء استجابات المحللين. وهذا يمنع النموذج من حفظ مطالبات التدريب وينتج تعميمًا أفضل بكثير.

القسم 5: القطار

trainer.train()

على T4 مجاني مع التكوين الافتراضي:

  • ~1000 عينة: ~15 دقيقة
  • ~5000 عينة: ~1 ساعة
  • ~10000 عينة: ~2 ساعة

القسم 6: اختبار الاستدلال

يتضمن دفتر الملاحظات اختبارًا سريعًا للاستدلال قبل التصدير:

FastLanguageModel.for_inference(model)

messages = [
{"role": "system", "content": "You are the AuroraSOC Security Analyst..."},
{"role": "user", "content": "Analyze: ET TROJAN Cobalt Strike Beacon..."},
]

inputs = tokenizer.apply_chat_template(messages, return_tensors="pt", add_generation_prompt=True)
outputs = model.generate(input_ids=inputs.to("cuda"), max_new_tokens=512, temperature=0.1)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))

متى يتم الاختبار: قم دائمًا بتشغيل الاستدلال قبل التصدير. إذا كان الإخراج يبدو غير واضح أو يتجاهل موجه النظام، فقد يكون التدريب قد حدث بشكل خاطئ (تحقق من قيم الخسارة - يجب أن تكون < 0.5).

القسم 7: التصدير إلى GGUF

model.save_pretrained_gguf(
OUTPUT_DIR,
tokenizer,
quantization_method=GGUF_QUANT, # "q8_0" or "q4_k_m"
)

يؤدي هذا إلى إنشاء ملف GGUF في دليل الإخراج. GGUF هو التنسيق الذي يستخدمه Ollama.

خيارات التكميم:

طريقةجودةحجم الملفحالة الاستخدام
q8_0عالية (الأفضل)~2-4 جيجابايتالافتراضي الموصى به
q4_k_mجيد~1-2 جيجابايتعندما تكون مساحة القرص محدودة

القسم 8: الحفظ في Google Drive

from google.colab import drive
drive.mount('/content/drive')

import shutil
shutil.copytree(OUTPUT_DIR, f"/content/drive/MyDrive/AuroraSOC/{OUTPUT_DIR}")

لماذا Google Drive؟ جلسات Colab مؤقتة — عندما تنتهي الجلسة، يتم حذف جميع الملفات. يؤدي الحفظ إلى Drive إلى الحفاظ على النموذج الخاص بك بشكل دائم. من Drive، يمكنك تنزيل ملف GGUF على جهازك المحلي.

القسم 9: تنزيل GGUF

from google.colab import files
files.download(f"{OUTPUT_DIR}/unsloth.Q8_0.gguf")

يؤدي هذا إلى تشغيل تنزيل المتصفح لملف GGUF.

بعد التدريب: قم بالاستيراد إلى Olma المحلي

بمجرد حصولك على ملف GGUF على جهازك المحلي:

# Method 1: Using serve_model.py
python training/scripts/serve_model.py ollama \
--gguf /path/to/unsloth.Q8_0.gguf \
--name granite-soc:latest

# Method 2: Using setup_local.sh
./scripts/setup_local.sh --import /path/to/unsloth.Q8_0.gguf

# Method 3: Manual Modelfile
cat > Modelfile << 'EOF'
FROM /path/to/unsloth.Q8_0.gguf

TEMPLATE """{{- if .System }}<|start_of_role|>system<|end_of_role|>
{{ .System }}<|end_of_text|>
{{- end }}
<|start_of_role|>user<|end_of_role|>
{{ .Prompt }}<|end_of_text|>
<|start_of_role|>assistant<|end_of_role|>
{{ .Response }}<|end_of_text|>"""

PARAMETER temperature 0.1
PARAMETER top_p 0.95
PARAMETER stop "<|end_of_text|>"
PARAMETER stop "<|start_of_role|>"
EOF

ollama create granite-soc:latest -f Modelfile

ثم قم بتمكينه في AuroraSOC:

make enable-finetuned
# This sets GRANITE_USE_FINETUNED=true in .env

نصائح لتدريب كولاب

إدارة الجلسة

  • الحفظ بشكل متكرر — يمكن قطع جلسات Colab بعد 90 دقيقة من عدم النشاط (مجانًا) أو 24 ساعة (للإصدار الاحترافي)
  • قم بالقيادة مبكرًا — احفظ نقاط التفتيش في القيادة أثناء التدريب، وليس فقط في النهاية
  • ** استخدم ملحق المتصفح ** لمنع قطع الاتصال الخامل (ابحث عن "Colab keep life")

تعظيم الطبقة المجانية

  • التدريب خارج ساعات الذروة — تتمتع ليالي أيام الأسبوع/عطلات نهاية الأسبوع بتوفر أفضل لوحدة معالجة الرسومات
  • استخدم granite-4.0-h-tiny — يتناسب بشكل مريح مع ذاكرة VRAM سعة 16 جيجابايت الخاصة بـ T4
  • احتفظ بـ BATCH_SIZE=2 — الدُفعات الأكبر تخاطر بـ OOM على T4
  • اضبط MAX_STEPS=200 للاختبارات السريعة قبل الالتزام بالتدريب الكامل

متى يتم الترقية إلى Pro

  • أنت بحاجة إلى granite-4.0-h-small (يتطلب A100 VRAM سعة 40+ جيجابايت)
  • أنت تقوم بتدريب العديد من المتخصصين لكل وكيل (تحتاج إلى جلسات طويلة)
  • تستمر الطبقة المجانية في قطع الاتصال أثناء التدريب

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