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

التدريب القائم على عامل الميناء

يوفر تدريب Docker بيئة قابلة للتكرار ومعزولة لضبط نماذج Granite. يعد هذا مثاليًا للفرق التي ترغب في إصدار بيئة التدريب الخاصة بها، أو تشغيل التدريب في CI/CD، أو تجنب تلويث نظامها المضيف بتبعيات CUDA/Python.

لماذا نستخدم Docker للتدريب؟

فائدةتفاصيل
** إمكانية تكرار نتائج **نفس الحاوية = نفس النتائج، بغض النظر عن نظام التشغيل المضيف
عزللا تتداخل أقسام التدريب مع إنتاج بايثون
تكامل CI/CDتشغيل التدريب كمرحلة خط الأنابيب
وحدة معالجة الرسومات المتعددةيمكن لـ Docker Compose تنظيم تدريب متعدد الحاويات
** بيئة الإصدار **قم بتثبيت إصدارات CUDA وPyTorch وUnsloth بدقة

المتطلبات الأساسية

  • عامل الميناء ≥ 24.0
  • عامل الميناء يؤلف ≥ 2.20
  • مجموعة أدوات حاوية NVIDIA (لعبور GPU)
  • وحدة معالجة الرسومات NVIDIA مع ذاكرة فيديو بسعة ≥ 8 جيجابايت

تحقق من وصول GPU في Docker:

docker run --rm --gpus all nvidia/cuda:12.1.0-base-ubuntu22.04 nvidia-smi

بداية سريعة

# Train generic SOC model
make train-docker

# Train specific agent
make train-docker-agent AGENT=security_analyst

# Prepare data (in Docker)
make train-docker-data

تكوين عامل الميناء

يتم تعريف البنية التحتية للتدريب في docker-compose.training.yml:

services:
# ── Data Preparation ──────────────────────────────────────
prepare-data:
build:
context: .
dockerfile: Dockerfile.training
command: python training/scripts/prepare_datasets.py
volumes:
- ./training/data:/app/training/data
# No GPU needed for data prep

# ── Generic Model Training ────────────────────────────────
training:
build:
context: .
dockerfile: Dockerfile.training
command: >
python training/scripts/finetune_granite.py
--config training/configs/granite_soc_finetune.yaml
volumes:
- ./training:/app/training
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
environment:
- NVIDIA_VISIBLE_DEVICES=all

# ── Per-Agent Training ────────────────────────────────────
training-agent:
build:
context: .
dockerfile: Dockerfile.training
command: >
python training/scripts/finetune_granite.py
--config training/configs/granite_soc_finetune.yaml
--agent ${AGENT:-security_analyst}
volumes:
- ./training:/app/training
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]

# ── Evaluation ────────────────────────────────────────────
eval:
build:
context: .
dockerfile: Dockerfile.training
command: >
python training/scripts/evaluate_model.py
--model training/checkpoints/granite_soc_lora
volumes:
- ./training:/app/training
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]

# ── vLLM Serving ──────────────────────────────────────────
vllm:
build:
context: .
dockerfile: Dockerfile.training
command: >
python training/scripts/serve_model.py vllm
--model training/checkpoints/granite_soc_merged_16bit
ports:
- "8000:8000"
volumes:
- ./training:/app/training
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]

# ── Ollama Import ─────────────────────────────────────────
ollama-import:
build:
context: .
dockerfile: Dockerfile.training
command: >
python training/scripts/serve_model.py ollama
--gguf training/checkpoints/granite_soc_gguf/unsloth.Q8_0.gguf
--name granite-soc:latest
volumes:
- ./training:/app/training
- /usr/share/ollama:/usr/share/ollama
network_mode: host

فهم الخدمات

خدمةغايةمطلوب وحدة معالجة الرسوماتمتى تستخدم
prepare-dataالتنزيلات + تحويل مجموعات بيانات SOCلامرة واحدة، قبل التدريب الأول
trainingتدريب نموذج SOC العام (جميع المجالات)نعمتشغيل التدريب الرئيسي
training-agentتدريب نموذج متخصص لكل وكيلنعمالضبط الدقيق لكل وكيل
evalيدير معايير التقييمنعمبعد التدريب، قبل النشر
vllmيخدم نموذج FP16 المدمج عبر vLLMنعمخدمة الإنتاج (الإنتاجية العالية)
ollama-importيستورد GGUF إلى مضيف Ollamaلاالنشر المحلي

ملف إرساء التدريب

Dockerfile.training يبني بيئة التدريب:

FROM nvidia/cuda:12.1.0-devel-ubuntu22.04

# System deps
RUN apt-get update && apt-get install -y \
python3.11 python3-pip git curl && \
rm -rf /var/lib/apt/lists/*

WORKDIR /app
COPY pyproject.toml .
COPY training/ training/
COPY aurorasoc/ aurorasoc/

# Install training dependencies
RUN pip install -e ".[training]"

# Compile Mamba kernels (cached in Docker layer)
RUN pip install --no-build-isolation mamba_ssm==2.2.5 causal_conv1d==1.5.2

** قرارات التصميم الرئيسية: **

  • يستخدم صورة CUDA 12.1 devel (وليس وقت التشغيل) لأن نواة Mamba تحتاج إلى nvcc لتجميعها
  • تجميع Mamba عبارة عن طبقة منفصلة لذا يتم تخزينها مؤقتًا عبر عمليات إعادة البناء
  • يتم تثبيت بيانات التدريب كمجلد، ولا يتم نسخها في الصورة

التدريب على الجري

الخطوة 1: تحضير البيانات

docker compose -f docker-compose.training.yml run --rm prepare-data

يؤدي هذا إلى تنزيل كافة مجموعات بيانات SOC وإعدادها. يتم الاحتفاظ بالبيانات إلى ./training/data/ عبر وحدة التخزين.

الخطوة 2: القطار

# Generic model
docker compose -f docker-compose.training.yml run --rm training

# Specific agent
AGENT=threat_hunter docker compose -f docker-compose.training.yml run --rm training-agent

يتم حفظ مخرجات التدريب (محولات LoRA وملفات GGUF) في ./training/checkpoints/ عبر وحدة التخزين.

الخطوة 3: التقييم

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

الخطوة 4: النشر

لاستيراد GGUF إلى مثيل Ollama المضيف الخاص بك:

docker compose -f docker-compose.training.yml run --rm ollama-import

يستخدم هذا network_mode: host للوصول إلى خدمة Ollama الخاصة بالمضيف مباشرةً.

التكوين المخصص

تجاوز معلمات التدريب

تتم قراءة المعلمات الفائقة للتدريب من training/configs/granite_soc_finetune.yaml. لتجاوز الإعدادات الافتراضية، قم بتحميل ملف التكوين المعدل في الحاوية:

docker compose -f docker-compose.training.yml run \
-v ./my-custom-config.yaml:/app/training/configs/granite_soc_finetune.yaml \
--rm training

باستخدام ملف التكوين المخصص

قم بتثبيت التكوين المخصص الخاص بك:

docker compose -f docker-compose.training.yml run \
-v ./my-custom-config.yaml:/app/training/configs/granite_soc_finetune.yaml \
--rm training

التدريب على وحدات معالجة الرسومات المتعددة

بالنسبة للأجهزة التي تحتوي على وحدات معالجة رسومات متعددة، حدد وحدة معالجة الرسومات التي تريد استخدامها:

# Use GPU 1 only
NVIDIA_VISIBLE_DEVICES=1 docker compose -f docker-compose.training.yml run --rm training

# Use GPUs 0 and 1
NVIDIA_VISIBLE_DEVICES=0,1 docker compose -f docker-compose.training.yml run --rm training

يراقب

عرض السجلات

# Follow training logs in real-time
docker compose -f docker-compose.training.yml logs -f training

# View last 100 lines
docker compose -f docker-compose.training.yml logs --tail 100 training

استخدام GPU

# Monitor GPU from host while container trains
watch -n 1 nvidia-smi

الكميات والثبات

مسار المضيفمسار الحاويةغاية
./training/data//app/training/data/مجموعات بيانات التدريب (إزالة الحاويات على قيد الحياة)
./training/checkpoints//app/training/checkpoints/نقاط التفتيش النموذجية (إزالة الحاويات على قيد الحياة)
./training/configs//app/training/configs/ملفات التكوين

تظل جميع عناصر التدريب موجودة على المضيف — فتدمير الحاوية لا يفقد عملك.

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

مشكلةسببحل
docker: Error response from daemon: could not select device driver "nvidia"مجموعة أدوات حاوية NVIDIA غير مثبتةقم بتثبيت nvidia-container-toolkit وأعد تشغيل Docker
تخرج الحاوية على الفورتحقق من السجلات باستخدام docker compose logs trainingعادةً ما تكون مشكلة التبعية أو التكوين مفقودة
Permission denied على وحدات التخزينمستخدم عامل الميناء ≠ المستخدم المضيفقم بتشغيل chmod -R a+rw training/ على المضيف
البناء الأولي بطيءتجميع نواة مامباعادي في المرة الأولى، تم تخزينه مؤقتًا بعد ذلك

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