CI/CD لأنظمة ML

GitOps والبنية التحتية ككود

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

GitOps يجلب سير عمل Git للبنية التحتية ونشر ML. يختبر المحاورون معرفتك بـ ArgoCD وTerraform والبنية التحتية التصريحية لـ ML.

مبادئ GitOps لـ ML

المبدأ التطبيق على ML
التصريحي نشر النماذج محدد في YAML
مُصدّر كل التكوين في Git، قابل للتدقيق
الآلي ArgoCD يزامن الحالة المطلوبة
القابل للملاحظة حالة النشر مرئية في Git

ArgoCD لنشر ML

# argocd/applications/model-serving.yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: fraud-detection-model
  namespace: argocd
spec:
  project: ml-production
  source:
    repoURL: https://github.com/company/ml-deployments.git
    targetRevision: main
    path: models/fraud-detection
    helm:
      valueFiles:
        - values-production.yaml
      parameters:
        - name: model.version
          value: "v2.3.1"
        - name: model.replicas
          value: "5"
  destination:
    server: https://kubernetes.default.svc
    namespace: ml-production
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
      - CreateNamespace=true

سؤال المقابلة: GitOps لـ ML

السؤال: "كيف ستنفذ GitOps لمنصة تقديم النماذج؟"

هيكل الإجابة:

# هيكل المستودع لـ GitOps ML
ml-deployments/
├── base/                          # الموارد المشتركة
│   ├── kustomization.yaml
│   ├── model-serving-deployment.yaml
│   ├── model-serving-service.yaml
│   └── model-serving-hpa.yaml
├── models/
│   ├── fraud-detection/
│   │   ├── kustomization.yaml
│   │   ├── values-staging.yaml
│   │   └── values-production.yaml
│   │
│   └── recommendation/
│       ├── kustomization.yaml
│       ├── values-staging.yaml
│       └── values-production.yaml
├── infrastructure/
│   ├── terraform/
│   │   ├── gke-cluster.tf
│   │   ├── mlflow-server.tf
│   │   └── feature-store.tf
│   │
│   └── crossplane/
│       ├── database.yaml
│       └── redis.yaml
└── argocd/
    ├── app-of-apps.yaml
    └── applications/
        ├── fraud-detection.yaml
        └── recommendation.yaml

Terraform للبنية التحتية لـ ML

# terraform/ml-platform.tf

# مجموعة GKE مع مجموعة عقد GPU
resource "google_container_cluster" "ml_cluster" {
  name     = "ml-production"
  location = var.region

  # تمكين الميزات المطلوبة لـ ML
  addons_config {
    gce_persistent_disk_csi_driver_config {
      enabled = true  # لتخزين النماذج
    }
  }

  # التوسع التلقائي للمجموعة
  cluster_autoscaling {
    enabled = true
    resource_limits {
      resource_type = "cpu"
      maximum       = 1000
    }
    resource_limits {
      resource_type = "memory"
      maximum       = 4000  # GB
    }
    resource_limits {
      resource_type = "nvidia-tesla-t4"
      maximum       = 50
    }
  }
}

# مجموعة عقد GPU للاستدلال
resource "google_container_node_pool" "gpu_pool" {
  name       = "gpu-inference"
  cluster    = google_container_cluster.ml_cluster.name
  location   = var.region

  autoscaling {
    min_node_count = 1
    max_node_count = 20
  }

  node_config {
    machine_type = "n1-standard-8"
    guest_accelerator {
      type  = "nvidia-tesla-t4"
      count = 1
    }

    # مطلوب لعقد GPU
    metadata = {
      disable-legacy-endpoints = "true"
    }

    oauth_scopes = [
      "https://www.googleapis.com/auth/cloud-platform"
    ]
  }
}

# خادم تتبع MLflow
resource "google_sql_database_instance" "mlflow_db" {
  name             = "mlflow-tracking"
  database_version = "POSTGRES_15"
  region           = var.region

  settings {
    tier = "db-custom-2-7680"

    backup_configuration {
      enabled = true
    }
  }
}

# تخزين الأصول للنماذج
resource "google_storage_bucket" "model_artifacts" {
  name     = "ml-model-artifacts-${var.project_id}"
  location = var.region

  versioning {
    enabled = true  # تاريخ إصدار النموذج
  }

  lifecycle_rule {
    action {
      type = "Delete"
    }
    condition {
      num_newer_versions = 10  # الاحتفاظ بآخر 10 إصدارات
    }
  }
}

سير عمل GitOps لتحديثات النموذج

# كيف يتدفق تحديث النموذج عبر GitOps
model_update_workflow:
  1_data_scientist:
    action: "يدرب نموذج جديد، يسجل في MLflow"
    output: "إصدار النموذج v2.3.2 في السجل"

  2_ml_engineer:
    action: "يحدث values.yaml بإصدار النموذج الجديد"
    file: "models/fraud-detection/values-production.yaml"
    change: "model.version: v2.3.1 → v2.3.2"

  3_pull_request:
    action: "يفتح PR مع زيادة إصدار النموذج"
    ci_checks:
      - "النموذج موجود في السجل"
      - "النموذج اجتاز الاختبارات غير المتصلة"
      - "نشر staging ناجح"

  4_approval:
    action: "القائد التقني يوافق على PR"
    requirements:
      - "فحوصات CI اجتازت"
      - "مقاييس النموذج تم التحقق منها"

  5_argocd_sync:
    action: "ArgoCD يكتشف التغيير، يزامن المجموعة"
    rollout: "الكناري → الطرح الكامل"

  6_observability:
    action: "مراقبة لوحات المعلومات للمشاكل"
    rollback: "التراجع عن commit Git إذا لزم الأمر"

الفوائد للذكر في المقابلات

gitops_benefits = {
    "auditability": "كل تغيير متتبع في تاريخ Git",
    "reproducibility": "يمكن إعادة إنشاء أي بيئة من Git",
    "rollback": "git revert للتراجع الفوري",
    "collaboration": "عملية مراجعة الكود للبنية التحتية",
    "consistency": "نفس العملية لجميع البيئات",
    "security": "بيانات اعتماد المجموعة تبقى في ArgoCD، ليس في CI"
}

نصيحة احترافية: "نستخدم ApplicationSet من ArgoCD لإدارة نماذج متعددة. قالب واحد، نشر تلقائي لكل زيادة إصدار نموذج."

الوحدة التالية تغطي أسئلة مقابلات السلوكية والتفاوض. :::

اختبار

الوحدة 5: CI/CD لأنظمة ML

خذ الاختبار