التدريب القائم على عامل الميناء
يوفر تدريب 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/ على المضيف |
| البناء الأولي بطيء | تجميع نواة مامبا | عادي في المرة الأولى، تم تخزينه مؤقتًا بعد ذلك |
الخطوات التالية
- تدريب Google Colab — إذا لم يكن لديك وحدة معالجة رسومات محلية
- المتخصصون لكل وكيل — تدريب النماذج الخاصة بالمجال
- التقييم والتصدير — اختبر نماذجك