أساسيات 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
محفزات خط الأنابيب
أحداث مختلفة تحفز مسارات مختلفة لخط الأنابيب:
| المحفز | مسار خط الأنابيب |
|---|---|
| دفع الكود | خط الأنابيب الكامل |
| تحديث البيانات | التحقق من البيانات → التدريب → الكامل |
| الجدول | التدريب → الكامل (إعادة التدريب) |
| يدوي | أي مرحلة |
النقاط الرئيسية
- بوابات في كل مرحلة: كل مرحلة يجب أن تمر قبل المتابعة
- تسليم المخرجات: كل مرحلة تنتج مخرجات للمرحلة التالية
- التحكم في الإصدار عبر الكل: إصدارات الكود والبيانات والنموذج متتبعة
- الأتمتة: التدخل اليدوي فقط عند فشل البوابات
التالي، سنستكشف التدريب المستمر (CT) وكيف يمتد ما وراء CI/CD. :::