خدمة النماذج والاستدلال
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 للاستدلال عالي الأداء متعدد الأُطر. :::