المراقبة والملاحظة

مراقبة البنية التحتية لـ ML

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

مراقبة البنية التحتية لـ ML تتجاوز DevOps القياسي. يتوقع المحاورون أن تراقب استخدام GPU والذاكرة ومقاييس ML المحددة.

مقاييس البنية التحتية لـ ML

الفئةالمقاييسعتبة التنبيه
GPUالاستخدام، الذاكرة، الحرارةتحذير <30% استخدام
الاستدلالزمن الاستجابة p50/p99، الإنتاجية، الأخطاءp99 > SLA
خط الأنابيبمعدل النجاح، المدة، حداثة البياناتنجاح <95%
النموذجتوزيع التوقعات، الثقةتحول التوزيع

إعداد Prometheus + Grafana

سؤال المقابلة: "كيف ستعد المراقبة لمجموعة تقديم النماذج؟"

# prometheus.yml - تكوين الجمع
global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'model-serving'
    kubernetes_sd_configs:
      - role: pod
    relabel_configs:
      - source_labels: [__meta_kubernetes_pod_label_app]
        regex: model-serving
        action: keep
      - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]
        target_label: __metrics_path__
        regex: (.+)

  - job_name: 'nvidia-gpu'
    static_configs:
      - targets: ['dcgm-exporter:9400']

مقاييس ML المخصصة:

from prometheus_client import Counter, Histogram, Gauge, start_http_server

# مقاييس الاستدلال
INFERENCE_LATENCY = Histogram(
    'model_inference_latency_seconds',
    'زمن استجابة استدلال النموذج',
    ['model_name', 'model_version'],
    buckets=[.01, .025, .05, .1, .25, .5, 1.0, 2.5]
)

INFERENCE_REQUESTS = Counter(
    'model_inference_requests_total',
    'إجمالي طلبات الاستدلال',
    ['model_name', 'model_version', 'status']
)

PREDICTION_CONFIDENCE = Histogram(
    'model_prediction_confidence',
    'درجات ثقة توقع النموذج',
    ['model_name'],
    buckets=[0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.95, 0.99]
)

# كشف نقطة نهاية المقاييس
def instrument_inference(func):
    def wrapper(model_name, model_version, features):
        with INFERENCE_LATENCY.labels(model_name, model_version).time():
            try:
                result = func(model_name, model_version, features)
                INFERENCE_REQUESTS.labels(model_name, model_version, 'success').inc()
                PREDICTION_CONFIDENCE.labels(model_name).observe(result['confidence'])
                return result
            except Exception as e:
                INFERENCE_REQUESTS.labels(model_name, model_version, 'error').inc()
                raise
    return wrapper

مراقبة GPU مع DCGM

# نشر DCGM Exporter
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: dcgm-exporter
spec:
  selector:
    matchLabels:
      app: dcgm-exporter
  template:
    spec:
      containers:
      - name: dcgm-exporter
        image: nvidia/dcgm-exporter:3.1.7-3.1.4-ubuntu20.04
        ports:
        - containerPort: 9400
          name: metrics
        securityContext:
          privileged: true
        volumeMounts:
        - name: device-plugin
          mountPath: /var/lib/kubelet/device-plugins
      volumes:
      - name: device-plugin
        hostPath:
          path: /var/lib/kubelet/device-plugins

مقاييس GPU الرئيسية:

# مقاييس DCGM للمراقبة
critical_gpu_metrics:
  DCGM_FI_DEV_GPU_UTIL: "نسبة استخدام GPU"
  DCGM_FI_DEV_MEM_COPY_UTIL: "استخدام نسخ الذاكرة"
  DCGM_FI_DEV_FB_FREE: "ذاكرة framebuffer الحرة"
  DCGM_FI_DEV_FB_USED: "ذاكرة framebuffer المستخدمة"
  DCGM_FI_DEV_GPU_TEMP: "حرارة GPU"
  DCGM_FI_DEV_POWER_USAGE: "استخدام الطاقة"

قواعد التنبيه

# prometheus-rules.yml
groups:
  - name: ml-infrastructure
    rules:
      - alert: HighInferenceLatency
        expr: |
          histogram_quantile(0.99,
            rate(model_inference_latency_seconds_bucket[5m])
          ) > 0.5
        for: 5m
        labels:
          severity: critical
        annotations:
          summary: "زمن استجابة p99 عالي لـ {{ $labels.model_name }}"
          description: "زمن الاستجابة p99 هو {{ $value }}s، SLA هو 500ms"

      - alert: LowGPUUtilization
        expr: DCGM_FI_DEV_GPU_UTIL < 30
        for: 15m
        labels:
          severity: warning
        annotations:
          summary: "استخدام GPU منخفض على {{ $labels.gpu }}"
          description: "استخدام GPU هو {{ $value }}%. ضع في اعتبارك التوحيد."

      - alert: HighPredictionErrorRate
        expr: |
          rate(model_inference_requests_total{status="error"}[5m])
          / rate(model_inference_requests_total[5m]) > 0.01
        for: 5m
        labels:
          severity: critical
        annotations:
          summary: "معدل خطأ عالي لـ {{ $labels.model_name }}"

متابعة المقابلة: تصميم لوحة المعلومات

السؤال: "ماذا ستعرض لوحة معلومات مراقبة ML المثالية؟"

ml_dashboard_panels:
  row_1_overview:
    - "إجمالي الطلبات/ثانية (جميع النماذج)"
    - "معدل الخطأ الإجمالي"
    - "إصدارات النماذج النشطة"
    - "استخدام مجموعة GPU"

  row_2_latency:
    - "زمن الاستجابة p50/p95/p99 حسب النموذج"
    - "خريطة حرارية لزمن الاستجابة بمرور الوقت"
    - "نسبة امتثال SLA"

  row_3_model_health:
    - "توزيع ثقة التوقع"
    - "توزيع فئة التوقع"
    - "مؤشرات انحراف الميزات"

  row_4_infrastructure:
    - "ذاكرة GPU حسب العقدة"
    - "عدد إعادة تشغيل Pod"
    - "عمق قائمة الانتظار (إذا كان هناك تجميع)"

رؤية خبير: "نربط استخدام GPU المنخفض مع زمن الاستجابة العالي لاكتشاف أخطاء تكوين التجميع - إذا كانت GPUs خاملة لكن زمن الاستجابة عالٍ، فحجم الدفعة صغير جداً."

في الدرس التالي، سنغطي التسجيل وتصحيح أنظمة ML الإنتاجية. :::

مراجعة سريعة: كيف تجد هذا الدرس؟

اختبار

الوحدة 4: المراقبة والملاحظة

خذ الاختبار
نشرة أسبوعية مجانية

ابقَ على مسار النيرد

بريد واحد أسبوعياً — دورات، مقالات معمّقة، أدوات، وتجارب ذكاء اصطناعي.

بدون إزعاج. إلغاء الاشتراك في أي وقت.