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

التقييم والتصدير

بعد التدريب، تحتاج إلى تقييم جودة النموذج وتصديره إلى تنسيق قابل للنشر. تغطي هذه الصفحة كلا من مجموعة معايير التقييم ومسار التصدير/العرض النموذجي.

نظرة عامة على التقييم

يختبر البرنامج النصي للتقييم (training/scripts/evaluate_model.py) النموذج مقابل 8 معايير أداء منظمة عبر 12 مجال أمان، ويسجل الاستجابات بناءً على مطابقة الكلمات الرئيسية وجودة الاستجابة.

لماذا التقييم؟

  • اكتشف الانحدارات — تأكد من أن النموذج لم يهلوس أو ينسى المعرفة الأساسية لـ SOC
  • مقارنة المتغيرات — المتخصصين العامين مقابل المتخصصين لكل وكيل، ورتب LoRA المختلفة، والنماذج الأساسية المختلفة
  • عمليات نشر البوابة — نشر النماذج التي تتجاوز الحد الأدنى من النقاط فقط

مجالات التقييم

يغطي التقييم 12 مجالًا أمنيًا:

اِختِصاصما يختبره
alert_triageتصنيف خطورة التنبيه، واستخراج IOC
threat_huntingالصيد المبني على الفرضيات واستعلامات KQL
malware_analysisالهندسة العكسية، قواعد YARA، تحليل PE
incident_responseكتيبات NIST وخطط الاحتواء
network_securityتحليل التدفق، قواعد سوريكاتا، نفق DNS
vulnerability_managementتحليل CVE، وتسجيل CVSS، وتحديد أولويات التصحيح
forensicsالطب الشرعي للذاكرة، تحليل القرص، التعامل مع الأدلة
threat_intelligenceإسناد APT، STIX/TAXII، نموذج الماس
complianceمعايير رابطة الدول المستقلة، NIST 800-53، PCI DSS
cloud_securityAWS/Azure IAM، وهروب الحاويات، ومسارات السحابة
endpoint_securityفرز EDR، تحليل العمليات، كشف الثبات
ics_ot_securityتحليل Modbus/DNP3، نموذج بوردو، IEC 62443

معايير التقييم

كل معيار هو اختبار منظم ذو نطاق سريع ومتوقع وتسجيل يعتمد على الكلمات الرئيسية:

تنبيه الفرز المعياري

Prompt: "Analyze this alert: ET TROJAN Cobalt Strike Beacon C2 Activity
detected from 10.0.1.50 to 185.220.101.42:443"
Expected keywords: cobalt strike, beacon, c2, command and control,
severity, critical, high, ioc, indicator

معيار صيد التهديد

Prompt: "Create a threat hunting hypothesis for detecting lateral movement
via PsExec in an enterprise Windows environment"
Expected keywords: psexec, lateral movement, hypothesis, windows,
event log, sysmon, network, smb, admin share

معيار تحليل البرامج الضارة

Prompt: "You received a suspicious PE file with high entropy sections and
imports from ws2_32.dll. Perform initial triage analysis."
Expected keywords: entropy, pe, portable executable, ws2_32, network,
packed, obfuscated, sandbox, import, section

معايير أخرى

  • الاستجابة للحوادث — استجابة متوافقة مع NIST لبرامج الفدية
  • أمان الشبكة — اكتشاف نفق DNS
  • إدارة الثغرات الأمنية — تقييم مكافحة التطرف العنيف
  • الطب الشرعي — اكتساب الذاكرة المتقلبة
  • استخبارات التهديدات — تحليل حملة التهديدات المستمرة المتقدمة

نظام التسجيل

يتم تسجيل كل استجابة باستخدام المطابقة القائمة على الكلمات الرئيسية:

def score_response(response: str, benchmark: dict) -> dict:
response_lower = response.lower()
matched = [kw for kw in benchmark["expected_keywords"]
if kw in response_lower]
keyword_score = len(matched) / len(benchmark["expected_keywords"])

# Response quality heuristics
length_score = min(len(response.split()) / 100, 1.0)
structure_score = any(marker in response
for marker in ["1.", "- ", "## ", "**"])

final_score = (keyword_score * 0.5 +
length_score * 0.3 +
(0.2 if structure_score else 0.0))

return {
"keyword_score": keyword_score,
"keywords_matched": matched,
"keywords_missed": [kw for kw in benchmark["expected_keywords"]
if kw not in response_lower],
"length_score": length_score,
"structure_score": structure_score,
"final_score": final_score,
}
مكون النتيجةوزنما يقيسه
مطابقة الكلمات الرئيسية50%هل ذكر الرد المفاهيم الأمنية المتوقعة؟
طول الرد30%هل الاستجابة جوهرية (> 100 كلمة = الحد الأقصى)؟
بناء20%هل يستخدم التنسيق المنظم (القوائم، الرؤوس)؟

الحد الأدنى من درجات النجاح

النتيجة الإجماليةالحكم
≥ 0.70تمرير — جاهز للنشر
0.50 - 0.69هامشية — قد تحتاج إلى مزيد من البيانات أو الفترات التدريبية
< 0.50فشل — تحقق من فقدان التدريب، أو جودة البيانات، أو التكوين

تشغيل التقييم

تقييم نموذج أولاما

# Evaluate a model served by Ollama
python training/scripts/evaluate_model.py ollama:granite-soc:latest

# With custom Ollama URL
OLLAMA_BASE_URL=http://localhost:11434 \
python training/scripts/evaluate_model.py ollama:granite-soc:latest

تقييم نقطة تفتيش محلية

# Evaluate directly from a training checkpoint (no Ollama needed)
python training/scripts/evaluate_model.py training/output/generic/

# Evaluate a per-agent specialist
python training/scripts/evaluate_model.py training/output/threat_hunter/

التقييم عبر Docker

docker compose -f docker-compose.training.yml run eval

التقييم عبر Makefile

make train-eval

مخرجات التقييم

ينتج البرنامج النصي تقريرًا مفصلاً:

╔══════════════════════════════════════════╗
║ AuroraSOC Model Evaluation Report ║
╠══════════════════════════════════════════╣
║ Model: granite-soc:latest ║
║ Benchmarks: 8 | Domains: 12 ║
╠══════════════════════════════════════════╣
║ Benchmark Score Status ║
║ ────────────────────── ───── ────── ║
║ Alert Triage 0.82 PASS ✓ ║
║ Threat Hunting 0.78 PASS ✓ ║
║ Malware Analysis 0.75 PASS ✓ ║
║ Incident Response 0.80 PASS ✓ ║
║ Network Security 0.71 PASS ✓ ║
║ Vulnerability Mgmt 0.68 MARGINAL ║
║ Forensics 0.74 PASS ✓ ║
║ Threat Intelligence 0.77 PASS ✓ ║
╠══════════════════════════════════════════╣
║ Average Score: 0.756 │ Overall: PASS ║
╚══════════════════════════════════════════╝

نموذج خط أنابيب التصدير

بعد التدريب والتقييم، يقوم مسار التصدير بتحويل النموذج إلى تنسيقات قابلة للنشر:

تنسيقات التصدير

شكلملفالخلفيةحالة الاستخدام
محول لوراadapter_model.safetensorsغير متوفر (يتطلب الدمج)استئناف التدريب، ومشاركة الضبط الدقيق
** تم دمج FP16 **model-*.safetensorsvLLMخدمة الإنتاج عبر vLLM
** GGUF الكمي **unsloth.Q8_0.ggufأولاماالنشر المحلي/الحافة
** معانقة الوجه المحور **بعيدأيالمشاركة والتعاون

التصدير التلقائي (أثناء التدريب)

يتم تصدير البرنامج النصي للتدريب تلقائيًا استنادًا إلى قسم YAML config export:

export:
save_lora: true # Always save — lightweight, resumable
save_merged_16bit: false # Only if you need vLLM deployment
save_gguf: true # For Ollama deployment
gguf_quantization_methods:
- "q8_0" # Standard quality
push_to_hub: false # Set true + HF_TOKEN to upload
hub_model_name: "" # HuggingFace repo name

التصدير اليدوي (من نقطة التفتيش)

إعادة تصدير نموذج دون إعادة التدريب:

# Export from a LoRA checkpoint
python training/scripts/finetune_granite.py \
--config training/configs/granite_soc_finetune.yaml \
--export-only \
--agent threat_hunter

يتخطى --export-only التدريب بالكامل ويقوم فقط بتشغيل خط أنابيب التصدير على نقطة التفتيش الحالية.

طرق التكميم GGUF

طريقةجودةسرعةمقاسمتى تستخدم
q8_0الأعلىخط الأساس~2-4 جيجابايتالافتراضي — أفضل مقايضة للجودة/الحجم
q4_k_mجيد~20% أسرع~1-2 جيجابايتأجهزة الحافة المقيدة
q5_k_mأحسن~10% أسرع~1.5-3 جيجابايتالتوازن بين q4 و q8
f16ممتازالأبطأ~4-8 جيجابايتعندما تكون الجودة هي الأهم

نماذج الخدمة

أولاما (GGUF - محلي/حافة)

تحميل نموذج واحد:

python training/scripts/serve_model.py ollama \
--gguf training/output/generic/unsloth.Q8_0.gguf \
--name granite-soc:latest

تحميل جميع المتخصصين لكل وكيل:

python training/scripts/serve_model.py ollama-all \
--output-dir training/output

ما يفعله serve_model.py ollama:

  1. يُنشئ Modelfile باستخدام قالب دردشة Granite 4:

    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|>"
  2. يتم تشغيل ollama create <name> -f Modelfile

  3. يتم التحقق باستخدام ollama list

سبب أهمية قالب الدردشة: لا يعرف Ollama تنسيق <|start_of_role|> الفريد للعبة Granite 4 افتراضيًا. يخبر TEMPLATE الخاص بـ Modelfile Ollama بكيفية تنسيق المحادثات متعددة الأدوار. وبدون ذلك، يتلقى النموذج مدخلات مشوهة وينتج عنه استجابات ضعيفة.

vLLM (FP16 - الإنتاج)

لخدمة الإنتاج عالي الإنتاجية:

# Start vLLM with the merged FP16 model
python training/scripts/serve_model.py vllm \
--model training/output/generic/merged_fp16

# Or via Docker Compose
docker compose -f docker-compose.training.yml up vllm

يُفضل vLLM للإنتاج للأسباب التالية:

  • التجميع المستمر — يخدم طلبات متعددة في وقت واحد
  • PagedAttention — إدارة فعالة لذاكرة وحدة معالجة الرسومات
  • واجهة برمجة التطبيقات المتوافقة مع OpenAI — استبدال مباشر، نفس نقطة النهاية /v1/chat/completions
  • إنتاجية أعلى — 10-100× طلبات أكثر في الثانية من Ollama

متى تستخدم كل الخلفية

عاملأولاماvLLM
النشرالمحلية، الحافة، التنميةالإنتاج، السحابة
شكل النموذجGGUF (الكمية)FP16 (الدقة الكاملة)
** متطلبات وحدة معالجة الرسومات **اختياري (احتياطي لوحدة المعالجة المركزية)مطلوب
** الإنتاجية **منخفض (طلب واحد)عالية (دفعة)
تعقيد الإعدادبسيط (ollama create)معتدل (تكوين وحدة معالجة الرسومات)
جودةجيد (q8_0) إلى عظيم (f16)مثالي (FP16)

مقارنة النماذج

سير عمل التقييم الموصى به:

# 1. Evaluate the generic model
python training/scripts/evaluate_model.py --model ollama:granite-soc:latest > eval_generic.txt

# 2. Evaluate a per-agent specialist
python training/scripts/evaluate_model.py --model ollama:granite-soc-threat-hunter:latest > eval_specialist.txt

# 3. Compare
diff eval_generic.txt eval_specialist.txt

أو قم بالتقييم مقابل النموذج الأساسي (غير المضبوط):

# Pull base Granite 4
ollama pull granite4:8b

# Evaluate base
python training/scripts/evaluate_model.py --model ollama:granite4:8b > eval_base.txt

# Compare fine-tuned vs. base
diff eval_base.txt eval_generic.txt

التقييم عبر vLLM (متوافق مع OpenAI)

# Start serving first
docker compose -f docker-compose.training.yml up -d vllm

# Required for OpenAI SDK client
export GRANITE_VLLM_BASE_URL=http://localhost:8000/v1
export VLLM_API_KEY=aurora-local

# Evaluate through vLLM backend
python training/scripts/evaluate_model.py \
--model vllm:granite-soc \
--vllm-base-url "$GRANITE_VLLM_BASE_URL" \
--vllm-api-key "$VLLM_API_KEY"

مقارنة الخلفية التقييم

الخلفيةبادئة المواصفات النموذجيةعميل النقلوضع الدفقأفضل حالة استخدام
أولاماollama:<tag>httpxعاجزضمان الجودة المحلي والتحقق من صحة الحافة
vLLMvllm:<model>openai SDKعاجزتقييم الإنتاجية الشبيهة بالإنتاج
نقطة تفتيش محليةمسار نظام الملفاتاكشف عن الاستدلال المحليعاجزالتحقق من سلامة نقطة التفتيش دون اتصال

دليل التفسير المتري

متريمعنىتفسير
pass_rateالمعايير التي تم اجتيازها / الإجماليبوابة الجودة الأولية. تهدف إلى ≥ 0.70 قبل الطرح.
keyword_hit_rateعدد مرات ظهور الكلمات الرئيسية / الكلمات الرئيسية المتوقعةإشارة تغطية المحتوى. تشير القيم المنخفضة إلى انجراف المجال.
avg_response_time_sيعني الكمون الانتهاءإشارة الأداء الخلفية. قارن بين Ollama وvLLM لتخطيط السعة.
response_lengthعدد الأحرف لكل إخراجيكتشف الاقتطاع أو الاستجابات المفرطة في الإسهاب.

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

درجات تقييم منخفضة

أعراضسببيصلح
جميع نتائج الكلمات الرئيسية < 0.3النموذج لا يتعلمتحقق من فقدان التدريب - يجب أن ينخفض. حاول المزيد من العصور.
كلمات رئيسية جيدة، وبنية سيئةيقوم النموذج بإخراج نص غير منسقأضف أمثلة منظمة إلى بيانات التدريب
جيدة في بعض المجالات، وسيئة في مجالات أخرىبيانات التدريب غير المتوازنةتحقق من توزيع المجال في مجموعة البيانات
تختلف النتائج بشكل كبير بين الجولاتدرجة الحرارة مرتفعة جداًقم بتعيين temperature=0.1 للتقييم الحتمي

فشل التصدير

خطأسببيصلح
CUDA out of memory during mergeيحتاج دمج FP16 إلى نموذج كامل في الذاكرةاستخدم جهازًا به المزيد من VRAM، أو قم بتصدير GGUF فقط
GGUF file too largeباستخدام F16 الكميقم بالتبديل إلى q8_0 أو q4_k_m
Ollama create failsمشكلة في مسار ملف النموذجاستخدم المسار المطلق لملف GGUF

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