أساسيات CI/CD للتعلم الآلي

تشريح خط أنابيب CI/CD للتعلم الآلي

3 دقيقة للقراءة

خط أنابيب ML CI/CD له مراحل أكثر من خط أنابيب البرمجيات التقليدي. دعنا نحلل كل مرحلة ونفهم ما يحدث في كل خطوة.

خط أنابيب ML CI/CD الكامل

┌──────────────────────────────────────────────────────────────────┐
│                     خط أنابيب ML CI/CD                           │
├──────────────────────────────────────────────────────────────────┤
│                                                                  │
│  ┌─────────┐   ┌─────────┐   ┌─────────┐   ┌─────────┐         │
│  │ اختبار │──▶│ التحقق  │──▶│ التدريب │──▶│ التحقق  │         │
│  │ الكود  │   │من البيانات│  │         │   │من النموذج│        │
│  └─────────┘   └─────────┘   └─────────┘   └─────────┘         │
│                                                │                 │
│                                                ▼                 │
│  ┌─────────┐   ┌─────────┐   ┌─────────┐   ┌─────────┐         │
│  │ المراقبة│◀──│  النشر  │◀──│ التعبئة │◀──│ التسجيل │         │
│  └─────────┘   └─────────┘   └─────────┘   └─────────┘         │
│                                                                  │
└──────────────────────────────────────────────────────────────────┘

تحليل مرحلة بمرحلة

المرحلة 1: اختبار الكود

اختبارات البرمجيات القياسية بالإضافة لفحوصات خاصة بالتعلم الآلي:

# مثال GitHub Actions
code-test:
  runs-on: ubuntu-latest
  steps:
    - uses: actions/checkout@v4
    - name: Run unit tests
      run: pytest tests/unit/

    - name: Run integration tests
      run: pytest tests/integration/

    - name: Lint ML code
      run: |
        ruff check src/
        mypy src/
نوع الاختبار ما يفحصه
اختبارات الوحدة الدوال الفردية تعمل بشكل صحيح
اختبارات التكامل مكونات خط الأنابيب تعمل معاً
الفحص أسلوب الكود وتلميحات الأنواع

المرحلة 2: التحقق من البيانات

فحص جودة البيانات قبل التدريب:

data-validate:
  needs: code-test
  steps:
    - name: Pull data
      run: dvc pull data/

    - name: Validate schema
      run: python scripts/validate_schema.py

    - name: Check data quality
      run: great_expectations checkpoint run data_quality

    - name: Detect drift
      run: python scripts/detect_drift.py --baseline data/baseline.parquet
التحقق الغرض
فحص المخطط أسماء الأعمدة، الأنواع، القيود
قواعد الجودة لا قيم فارغة في الحقول المطلوبة، نطاقات صالحة
اكتشاف الانحراف التوزيع لم يتغير بشكل كبير

المرحلة 3: التدريب

تشغيل مهمة التدريب:

train:
  needs: data-validate
  runs-on: [self-hosted, gpu]
  steps:
    - name: Set up environment
      run: pip install -r requirements.txt

    - name: Run training
      run: |
        python train.py \
          --data data/train.parquet \
          --config configs/model.yaml \
          --output models/
      env:
        MLFLOW_TRACKING_URI: ${{ secrets.MLFLOW_URI }}

    - name: Upload model artifact
      uses: actions/upload-artifact@v4
      with:
        name: model
        path: models/

المرحلة 4: التحقق من النموذج

ضمان أن النموذج يستوفي معايير الجودة:

model-validate:
  needs: train
  steps:
    - name: Download model
      uses: actions/download-artifact@v4
      with:
        name: model

    - name: Run model tests
      run: pytest tests/model/ --model-path models/

    - name: Check accuracy threshold
      run: |
        python scripts/evaluate.py \
          --model models/model.pkl \
          --test-data data/test.parquet \
          --min-accuracy 0.85

    - name: Check for bias
      run: python scripts/fairness_check.py --model models/model.pkl
التحقق معيار البوابة
الدقة يجب أن تتجاوز خط الأساس (مثل > 0.85)
زمن الاستجابة وقت الاستدلال < 100ms
العدالة لا تحيز ديموغرافي يتجاوز العتبة

المرحلة 5: التسجيل

إصدار وتخزين النموذج:

register:
  needs: model-validate
  steps:
    - name: Register with MLflow
      run: |
        python scripts/register_model.py \
          --model-path models/model.pkl \
          --name "fraud-detector" \
          --stage "staging"

المرحلة 6: التعبئة

إنشاء مخرج قابل للنشر:

package:
  needs: register
  steps:
    - name: Build container
      run: |
        docker build -t model-service:${{ github.sha }} .
        docker push $REGISTRY/model-service:${{ github.sha }}

المرحلة 7: النشر

الإطلاق للإنتاج:

deploy:
  needs: package
  steps:
    - name: Deploy to staging
      run: kubectl apply -f k8s/staging/

    - name: Run smoke tests
      run: pytest tests/smoke/ --endpoint $STAGING_URL

    - name: Deploy canary (10%)
      run: |
        kubectl set image deployment/model-service \
          model=$REGISTRY/model-service:${{ github.sha }}

المرحلة 8: المراقبة

مراقبة الإنتاج المستمرة:

# هذا يعمل بجدول، ليس لكل commit
monitor:
  schedule: "0 * * * *"  # كل ساعة
  steps:
    - name: Check model metrics
      run: python scripts/monitor.py --alert-on-drift

محفزات خط الأنابيب

أحداث مختلفة تحفز مسارات مختلفة لخط الأنابيب:

المحفز مسار خط الأنابيب
دفع الكود خط الأنابيب الكامل
تحديث البيانات التحقق من البيانات → التدريب → الكامل
الجدول التدريب → الكامل (إعادة التدريب)
يدوي أي مرحلة

النقاط الرئيسية

  1. بوابات في كل مرحلة: كل مرحلة يجب أن تمر قبل المتابعة
  2. تسليم المخرجات: كل مرحلة تنتج مخرجات للمرحلة التالية
  3. التحكم في الإصدار عبر الكل: إصدارات الكود والبيانات والنموذج متتبعة
  4. الأتمتة: التدخل اليدوي فقط عند فشل البوابات

التالي، سنستكشف التدريب المستمر (CT) وكيف يمتد ما وراء CI/CD. :::

اختبار

الوحدة 1: أساسيات CI/CD للتعلم الآلي

خذ الاختبار