CI/CD لأنظمة ML
GitHub Actions لخطوط أنابيب ML
5 دقيقة للقراءة
GitHub Actions هي أداة CI/CD الأكثر شيوعاً في ML. يتوقع المحاورون أن تصمم سير عمل للتدريب والاختبار والنشر.
سؤال المقابلة: تصميم CI/CD لـ ML
السؤال: "صمم سير عمل GitHub Actions لمشروع ML يتضمن التحقق من البيانات وتدريب النموذج والنشر."
سير العمل الكامل:
# .github/workflows/ml-pipeline.yml
name: ML Pipeline
on:
push:
branches: [main]
paths:
- 'src/**'
- 'data/**'
- 'models/**'
pull_request:
branches: [main]
workflow_dispatch:
inputs:
force_retrain:
description: 'فرض إعادة تدريب النموذج'
type: boolean
default: false
env:
PYTHON_VERSION: '3.11'
MLFLOW_TRACKING_URI: ${{ secrets.MLFLOW_TRACKING_URI }}
jobs:
lint-and-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: إعداد Python
uses: actions/setup-python@v5
with:
python-version: ${{ env.PYTHON_VERSION }}
cache: 'pip'
- name: تثبيت التبعيات
run: |
pip install -r requirements.txt
pip install -r requirements-dev.txt
- name: فحص الكود
run: |
ruff check src/
mypy src/
- name: تشغيل اختبارات الوحدة
run: pytest tests/unit/ -v --cov=src/
data-validation:
runs-on: ubuntu-latest
needs: lint-and-test
steps:
- uses: actions/checkout@v4
- name: إعداد Python
uses: actions/setup-python@v5
with:
python-version: ${{ env.PYTHON_VERSION }}
cache: 'pip'
- name: تثبيت التبعيات
run: pip install -r requirements.txt
- name: التحقق من بيانات التدريب
run: python src/validate_data.py --config configs/data_expectations.yaml
- name: التحقق من انحراف البيانات
run: python src/check_drift.py --baseline data/baseline_stats.json
train-model:
runs-on: ubuntu-latest
needs: data-validation
if: |
github.event_name == 'workflow_dispatch' && github.event.inputs.force_retrain == 'true' ||
github.ref == 'refs/heads/main'
steps:
- uses: actions/checkout@v4
- name: إعداد Python
uses: actions/setup-python@v5
with:
python-version: ${{ env.PYTHON_VERSION }}
- name: تكوين بيانات اعتماد AWS
uses: aws-actions/configure-aws-credentials@v4
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: us-east-1
- name: تدريب النموذج
run: |
python src/train.py \
--config configs/training_config.yaml \
--experiment-name "fraud-detection-${{ github.sha }}"
- name: تشغيل اختبارات النموذج
run: pytest tests/model/ -v
- name: تسجيل النموذج في MLflow
if: success()
run: |
python src/register_model.py \
--run-id ${{ env.MLFLOW_RUN_ID }} \
--model-name fraud-detector
deploy-staging:
runs-on: ubuntu-latest
needs: train-model
environment: staging
steps:
- uses: actions/checkout@v4
- name: النشر إلى staging
run: |
kubectl apply -f k8s/staging/ --context staging-cluster
kubectl rollout status deployment/model-serving -n ml-staging
- name: تشغيل اختبارات التكامل
run: pytest tests/integration/ --env staging
- name: تشغيل اختبارات الدخان
run: python tests/smoke_test.py --endpoint ${{ vars.STAGING_ENDPOINT }}
deploy-production:
runs-on: ubuntu-latest
needs: deploy-staging
environment: production
steps:
- uses: actions/checkout@v4
- name: نشر كناري (10%)
run: |
kubectl apply -f k8s/production/canary.yaml
sleep 300 # انتظار 5 دقائق لمقاييس الكناري
- name: فحص مقاييس الكناري
run: python src/check_canary_metrics.py --threshold 0.01
- name: الطرح الكامل
if: success()
run: |
kubectl apply -f k8s/production/
kubectl rollout status deployment/model-serving -n ml-production
أنماط سير العمل الرئيسية
النمط 1: التدريب الشرطي
# التدريب فقط عندما يتغير كود التدريب أو البيانات
on:
push:
paths:
- 'src/train.py'
- 'src/model/**'
- 'data/training/**'
- 'configs/training_config.yaml'
النمط 2: تدريب GPU مع runners مستضافة ذاتياً
train-gpu:
runs-on: [self-hosted, gpu, linux]
steps:
- name: التدريب مع GPU
run: |
nvidia-smi # التحقق من توفر GPU
python src/train.py --device cuda
النمط 3: تخزين تبعيات ML مؤقتاً
- name: تخزين حزم pip مؤقتاً
uses: actions/cache@v4
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('requirements.txt') }}
- name: تخزين أصول النموذج مؤقتاً
uses: actions/cache@v4
with:
path: models/
key: model-${{ hashFiles('data/training/**') }}
نقاط مناقشة المقابلة
| الموضوع | ماذا تقول |
|---|---|
| GPU runners | "نستخدم runners مستضافة ذاتياً مع GPUs للتدريب، مستضافة GitHub للاختبارات" |
| الأسرار | "بيانات اعتماد سجل النماذج في GitHub Secrets، يتم تدويرها كل ربع" |
| الأصول | "النماذج مخزنة في S3، المؤشرات فقط في artifacts" |
| البيئات | "GitHub Environments لـ staging/prod مع مراجعين مطلوبين" |
| التخزين المؤقت | "تخزين حزم pip ونقاط التحقق للنموذج مؤقتاً لتسريع سير العمل" |
نصيحة احترافية: اذكر أنك تفصل التدريب عن النشر - "التدريب مكلف ولا يجب أن يحجب كل PR، لذلك نجعله شرطياً أو مجدولاً."
في الدرس التالي، سنغطي استراتيجيات النشر لنماذج ML. :::