تدريب جوجل كولاب
يوفر Google Colab وحدة معالجة رسوميات T4 مجانية (ذاكرة VRAM سعة 16 جيجابايت) — وهي كافية لضبط نماذج Granite 4 Hybrid لـ AuroraSOC. هذا هو الأسلوب الموصى به إذا لم يكن لديك وحدة معالجة رسومات محلية.
لماذا كولاب؟
| فائدة | تفاصيل |
|---|---|
| ** GPU مجاني ** | T4 (16 جيجابايت) على الطبقة المجانية، A100 (40/80 جيجابايت) على الطبقة الاحترافية |
| ** لا حاجة للأجهزة ** | يعمل من أي متصفح |
| ** CUDA التي تم تكوينها مسبقًا ** | لا يوجد تثبيت للسائق |
| ** التكامل مع جوجل درايف ** | احفظ النماذج في Drive، وقم بتنزيلها لاحقًا |
| قابل للمشاركة | أرسل رابط دفتر الملاحظات إلى زملائك في الفريق |
دفتر الملاحظات
دفتر التدريب موجود في:
training/notebooks/AuroraSOC_Granite4_Finetune.ipynb
الافتتاح في كولاب
-
تحميل على جوجل درايف:
- قم بتحميل
AuroraSOC_Granite4_Finetune.ipynbعلى Google Drive - انقر نقرًا مزدوجًا لفتحه في Colab
- قم بتحميل
-
أو افتح مباشرة:
- انتقل إلى colab.research.google.com
- اختر تحميل ← حدد ملف دفتر الملاحظات
-
** تمكين وقت تشغيل 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_NAME | granite-4.0-h-tiny | granite-4.0-h-small | الطراز الأكبر = جودة أفضل، وذاكرة فيديو (VRAM) أكبر |
BATCH_SIZE | 2 | 4-8 | يحتوي A100 على المزيد من VRAM |
LORA_R | 64 | 64-128 | رتبة أعلى = المزيد من القدرات |
GGUF_QUANT | q8_0 | q8_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+ جيجابايت) - أنت تقوم بتدريب العديد من المتخصصين لكل وكيل (تحتاج إلى جلسات طويلة)
- تستمر الطبقة المجانية في قطع الاتصال أثناء التدريب
الخطوات التالية
- المتخصصون لكل وكيل — تدريب العديد من النماذج المتخصصة
- التقييم والتصدير — قياس نموذجك
- تكامل LLM: تبديل النماذج — تمكين النماذج المضبوطة بدقة في AuroraSOC