أساسيات Kubernetes لتعلم الآلة
Namespaces وحصص الموارد لفرق ML
3 دقيقة للقراءة
تعدد المستأجرين أمر حاسم عندما تتشارك فرق ML متعددة مجموعات GPU. توفر Namespaces العزل، بينما تمنع حصص الموارد أي فريق من احتكار الموارد الغالية.
استراتيجية Namespace لـ ML
Namespaces قائمة على الفرق
# Namespace لفريق بحث ML
apiVersion: v1
kind: Namespace
metadata:
name: ml-research
labels:
team: research
cost-center: rd-001
gpu-tier: high-priority
---
# Namespace لإنتاج ML
apiVersion: v1
kind: Namespace
metadata:
name: ml-production
labels:
team: platform
cost-center: prod-001
gpu-tier: critical
---
# Namespace لتجارب ML
apiVersion: v1
kind: Namespace
metadata:
name: ml-experiments
labels:
team: data-science
cost-center: ds-001
gpu-tier: best-effort
نموذج عزل Namespace
┌─────────────────────────────────────────────────────────────────┐
│ مجموعة Kubernetes GPU │
├─────────────────────────────────────────────────────────────────┤
│ ml-production (حرج) │
│ ├── inference-deployments (دائماً يعمل) │
│ ├── model-servers (توسع تلقائي) │
│ └── الحصة: 16 GPU مضمونة │
├─────────────────────────────────────────────────────────────────┤
│ ml-research (أولوية عالية) │
│ ├── training-jobs (دفعات) │
│ ├── notebooks (تفاعلي) │
│ └── الحصة: 32 GPU حد، 8 مضمونة │
├─────────────────────────────────────────────────────────────────┤
│ ml-experiments (أفضل جهد) │
│ ├── experiment-jobs (قابلة للإيقاف) │
│ ├── hyperparameter-tuning │
│ └── الحصة: 8 GPU حد، 0 مضمونة │
└─────────────────────────────────────────────────────────────────┘
حصص الموارد
تكوين حصة GPU
# حصة الموارد لـ namespace ml-research
apiVersion: v1
kind: ResourceQuota
metadata:
name: ml-research-quota
namespace: ml-research
spec:
hard:
# حدود GPU
requests.nvidia.com/gpu: "8"
limits.nvidia.com/gpu: "32"
# حدود الحوسبة
requests.cpu: "64"
limits.cpu: "128"
requests.memory: "256Gi"
limits.memory: "512Gi"
# حدود التخزين
requests.storage: "2Ti"
persistentvolumeclaims: "20"
# عدد الكائنات
pods: "50"
services: "10"
secrets: "50"
configmaps: "50"
حصة namespace الإنتاج
apiVersion: v1
kind: ResourceQuota
metadata:
name: ml-production-quota
namespace: ml-production
spec:
hard:
# تخصيص GPU مضمون
requests.nvidia.com/gpu: "16"
limits.nvidia.com/gpu: "16"
# حوسبة أعلى للاستدلال
requests.cpu: "128"
limits.cpu: "256"
requests.memory: "512Gi"
limits.memory: "1Ti"
# pods غير محدودة للتوسع
pods: "200"
services: "50"
scopeSelector:
matchExpressions:
- operator: In
scopeName: PriorityClass
values:
- critical
- high
LimitRanges للموارد الافتراضية
طلبات GPU الافتراضية
apiVersion: v1
kind: LimitRange
metadata:
name: ml-limit-range
namespace: ml-research
spec:
limits:
# حدود الحاوية الافتراضية
- type: Container
default:
cpu: "2"
memory: "8Gi"
defaultRequest:
cpu: "1"
memory: "4Gi"
max:
cpu: "32"
memory: "128Gi"
nvidia.com/gpu: "8"
min:
cpu: "100m"
memory: "128Mi"
# حدود حجم PVC
- type: PersistentVolumeClaim
max:
storage: "500Gi"
min:
storage: "1Gi"
فئات الأولوية لأعباء عمل ML
تسلسل فئات الأولوية
# حرج: استدلال الإنتاج (لا يُقاطع أبداً)
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
name: ml-critical
value: 1000000
globalDefault: false
preemptionPolicy: PreemptLowerPriority
description: "استدلال ML الإنتاجي - لا يُقاطع أبداً"
---
# عالي: تدريب البحث (يمكن مقاطعة التجارب)
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
name: ml-high
value: 100000
globalDefault: false
preemptionPolicy: PreemptLowerPriority
description: "مهام تدريب البحث"
---
# منخفض: التجارب (قابلة للمقاطعة)
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
name: ml-low
value: 1000
globalDefault: false
preemptionPolicy: Never
description: "أعباء العمل التجريبية - يمكن مقاطعتها"
استخدام الأولوية في مهام التدريب
apiVersion: batch/v1
kind: Job
metadata:
name: research-training
namespace: ml-research
spec:
template:
spec:
priorityClassName: ml-high # يمكن مقاطعة التجارب
containers:
- name: trainer
image: pytorch/pytorch:latest
resources:
limits:
nvidia.com/gpu: 4
التحقق من استخدام الحصة
# عرض استخدام الحصة
kubectl describe resourcequota ml-research-quota -n ml-research
# الإخراج:
# Name: ml-research-quota
# Namespace: ml-research
# Resource Used Hard
# -------- ---- ----
# limits.nvidia.com/gpu 12 32
# requests.nvidia.com/gpu 8 8
# pods 15 50
# requests.memory 128Gi 256Gi
# عرض جميع الحصص في المجموعة
kubectl get resourcequota --all-namespaces
# التحقق مما إذا كان pod سيناسب الحصة
kubectl run test --image=nginx --dry-run=client \
--requests='nvidia.com/gpu=4' -n ml-research
التالي، سنغطي أساسيات kubectl وتقنيات تصحيح الأخطاء لأعباء عمل ML. :::