خدمة النماذج والاستدلال

KServe: خدمة النماذج الأصلية لـ Kubernetes

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

KServe هو مشروع CNCF في مرحلة الاحتضان يوفر حلاً موحداً وقابلاً للتوسع لخدمة النماذج على Kubernetes. يُخفي تعقيدات البنية التحتية، مما يمكّن علماء البيانات من نشر النماذج دون خبرة عميقة في Kubernetes.

بنية KServe

┌─────────────────────────────────────────────────────────────────────┐
│                    بنية KServe                                       │
├─────────────────────────────────────────────────────────────────────┤
│                                                                      │
│  ┌──────────────────────────────────────────────────────────────┐   │
│  │                   InferenceService CRD                        │   │
│  │  ┌────────────┐  ┌────────────┐  ┌────────────┐              │   │
│  │  │ المتنبئ   │  │ المحول    │  │ المُفسر   │              │   │
│  │  │  (النموذج) │  │ (قبل/بعد) │  │  (SHAP)   │              │   │
│  │  └────────────┘  └────────────┘  └────────────┘              │   │
│  └──────────────────────────────────────────────────────────────┘   │
│                              │                                       │
│                              ↓                                       │
│  ┌──────────────────────────────────────────────────────────────┐   │
│  │              Knative Serving / النشر الخام                    │   │
│  │  - التوسع بدون خادم (التصغير إلى صفر)                        │   │
│  │  - تقسيم حركة المرور (canary/blue-green)                     │   │
│  │  - إدارة المراجعات                                            │   │
│  └──────────────────────────────────────────────────────────────┘   │
│                              │                                       │
│  ┌─────────────┐   ┌─────────────────┐   ┌─────────────────────┐   │
│  │   Istio/    │   │  تخزين النماذج │   │    المراقبة        │   │
│  │   Gateway   │   │  (S3/GCS/PVC)  │   │ (Prometheus/Grafana)│   │
│  └─────────────┘   └─────────────────┘   └─────────────────────┘   │
│                                                                      │
└─────────────────────────────────────────────────────────────────────┘

تثبيت KServe (2025-2026)

# تثبيت KServe (الوضع المستقل - لا يتطلب Istio/Knative)
kubectl apply -f https://github.com/kserve/kserve/releases/download/v0.14/kserve.yaml

# أو مع Knative لميزات serverless
kubectl apply -f https://github.com/kserve/kserve/releases/download/v0.14/kserve-knative.yaml

# التحقق من التثبيت
kubectl get pods -n kserve
kubectl get crd | grep serving

InferenceService أساسي

apiVersion: serving.kserve.io/v1beta1
kind: InferenceService
metadata:
  name: sklearn-iris
  namespace: ml-serving
spec:
  predictor:
    model:
      modelFormat:
        name: sklearn
      storageUri: "gs://kfserving-examples/models/sklearn/1.0/model"
      resources:
        requests:
          cpu: "1"
          memory: "2Gi"
        limits:
          cpu: "2"
          memory: "4Gi"

خدمة النماذج مع GPU

apiVersion: serving.kserve.io/v1beta1
kind: InferenceService
metadata:
  name: llama-inference
  namespace: ml-serving
  annotations:
    serving.kserve.io/autoscalerClass: hpa
    serving.kserve.io/metric: "gpu-utilization"
    serving.kserve.io/targetUtilizationPercentage: "70"
spec:
  predictor:
    minReplicas: 1
    maxReplicas: 10
    model:
      modelFormat:
        name: pytorch
      runtime: kserve-torchserve
      storageUri: "s3://models/llama-7b"
      resources:
        requests:
          nvidia.com/gpu: 1
          memory: "32Gi"
          cpu: "8"
        limits:
          nvidia.com/gpu: 1
          memory: "48Gi"
          cpu: "16"
    nodeSelector:
      nvidia.com/gpu.product: NVIDIA-A100-SXM4-40GB
    tolerations:
    - key: nvidia.com/gpu
      operator: Exists
      effect: NoSchedule

تنسيقات النماذج المدعومة

الإطار التنسيق وقت التشغيل
TensorFlow SavedModel TF Serving
PyTorch TorchScript/MAR TorchServe
ONNX .onnx Triton
XGBoost .bst XGBoost Server
LightGBM .txt LightGBM Server
Scikit-learn .pkl SKLearn Server
HuggingFace Transformers vLLM/TGI
مخصص أي Runtime مخصص

خدمة النماذج المتعددة (ModelMesh)

# خدمة فعالة للعديد من النماذج مع موارد مشتركة
apiVersion: serving.kserve.io/v1alpha1
kind: ServingRuntime
metadata:
  name: triton-runtime
spec:
  supportedModelFormats:
  - name: tensorflow
    version: "2"
  - name: pytorch
    version: "2"
  - name: onnx
    version: "1"
  containers:
  - name: triton
    image: nvcr.io/nvidia/tritonserver:24.01-py3
    resources:
      requests:
        nvidia.com/gpu: 1
      limits:
        nvidia.com/gpu: 1
---
apiVersion: serving.kserve.io/v1beta1
kind: InferenceService
metadata:
  name: multi-model-service
spec:
  predictor:
    model:
      modelFormat:
        name: pytorch
      runtime: triton-runtime
      storageUri: "s3://models/bert-base"

طلب الاستدلال

# الحصول على رابط الخدمة
SERVICE_URL=$(kubectl get inferenceservice sklearn-iris \
  -n ml-serving -o jsonpath='{.status.url}')

# إرسال طلب تنبؤ
curl -v "${SERVICE_URL}/v1/models/sklearn-iris:predict" \
  -H "Content-Type: application/json" \
  -d '{
    "instances": [
      [6.8, 2.8, 4.8, 1.4],
      [6.0, 3.4, 4.5, 1.6]
    ]
  }'

# تنسيق الاستجابة
{
  "predictions": [1, 1]
}

اعتبارات الإنتاج

مقاييس التوسع التلقائي:

  • استخدام CPU/الذاكرة
  • استخدام GPU
  • الطلبات في الثانية
  • مقاييس Prometheus مخصصة

التوفر العالي:

  • ميزانيات تعطيل Pod
  • النشر متعدد المناطق
  • تكوين فحوصات الصحة

الدرس التالي: خادم NVIDIA Triton للاستدلال عالي الأداء متعدد الأُطر. :::

اختبار

الوحدة 4: خدمة النماذج والاستدلال

خذ الاختبار