جدولة GPU وإدارة الموارد

NVIDIA KAI Scheduler وDynamic Resource Allocation

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

في يناير 2025، أطلقت NVIDIA KAI (Kubernetes AI) Scheduler كمصدر مفتوح، مما جلب إدارة GPU على مستوى المؤسسات للمجتمع. مع Kubernetes 1.34's GA Dynamic Resource Allocation، هذا يمثل أحدث تقنيات جدولة GPU.

NVIDIA KAI Scheduler

بنية KAI

┌─────────────────────────────────────────────────────────────────┐
│                    NVIDIA KAI Scheduler                          │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  ┌─────────────────────────────────────────────────────────────┐│
│  │                    مجدول واعي بـ GPU                        ││
│  │  ├── وعي بالطوبولوجيا (NVLink، NVSwitch)                   ││
│  │  ├── وضع واعي بالذاكرة                                     ││
│  │  ├── تحسين مهام Multi-GPU                                  ││
│  │  └── سياسات الأولوية والمقاطعة                             ││
│  └─────────────────────────────────────────────────────────────┘│
│                                                                  │
│  ┌─────────────────────────────────────────────────────────────┐│
│  │                    إدارة الطوابير                           ││
│  │  ├── جدولة الحصة العادلة                                   ││
│  │  ├── جدولة المجموعات                                       ││
│  │  ├── إدارة الحصص                                           ││
│  │  └── استعارة/إقراض                                         ││
│  └─────────────────────────────────────────────────────────────┘│
│                                                                  │
│  ┌─────────────────────────────────────────────────────────────┐│
│  │                    طبقة التكامل                             ││
│  │  ├── يعمل مع GPU Operator                                  ││
│  │  ├── متوافق مع Kueue                                       ││
│  │  └── جاهز لـ DRA                                           ││
│  └─────────────────────────────────────────────────────────────┘│
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

سياسات جدولة KAI

# سياسة جدولة KAI
apiVersion: kai.nvidia.com/v1alpha1
kind: SchedulingPolicy
metadata:
  name: gpu-topology-aware
spec:
  # وضع واعي بالطوبولوجيا
  topologyPolicy:
    strategy: BestFit  # BestFit، SpreadEvenly، SingleNode
    preferNVLink: true

  # جدولة واعية بالذاكرة
  memoryPolicy:
    strategy: FirstFit
    memoryThreshold: 80%  # لا تجدول إذا كانت ذاكرة GPU > 80%

  # تحسين Multi-GPU
  multiGPUPolicy:
    preferSameSwitch: true  # GPUs على نفس NVSwitch
    maxGPUsPerNode: 8

  # المقاطعة
  preemption:
    enabled: true
    gracePeriod: 30s

استخدام KAI مع أعباء العمل

apiVersion: batch/v1
kind: Job
metadata:
  name: llm-training
  annotations:
    kai.nvidia.com/scheduling-policy: gpu-topology-aware
spec:
  template:
    spec:
      schedulerName: kai-scheduler
      containers:
      - name: trainer
        image: nvcr.io/nvidia/pytorch:24.01-py3
        resources:
          limits:
            nvidia.com/gpu: 8
        env:
        - name: NCCL_DEBUG
          value: INFO

Dynamic Resource Allocation (DRA)

DRA في Kubernetes 1.34 (GA)

┌─────────────────────────────────────────────────────────────────┐
│              DRA مقابل جدولة GPU التقليدية                       │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  التقليدية (Device Plugin):                                      │
│  ┌─────────────────────────────────────────────────────────────┐│
│  │  Pod: nvidia.com/gpu: 1                                     ││
│  │  - قائم على الأعداد الصحيحة (GPUs كاملة فقط)                ││
│  │  - لا وعي بالذاكرة/الحوسبة                                  ││
│  │  - وصول حصري                                                ││
│  │  - تخصيص ثابت                                               ││
│  └─────────────────────────────────────────────────────────────┘│
│                                                                  │
│  DRA (Kubernetes 1.34 GA):                                      │
│  ┌─────────────────────────────────────────────────────────────┐│
│  │  ResourceClaim: gpu-claim                                   ││
│  │  - اختيار جهاز دقيق                                         ││
│  │  - قيود الذاكرة/الحوسبة                                     ││
│  │  - مشاركة متعددة الـ pods                                   ││
│  │  - تخصيص في الوقت المناسب                                  ││
│  │  - خصائص الجهاز (NVLink، MIG)                               ││
│  └─────────────────────────────────────────────────────────────┘│
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

مكونات DRA

# DeviceClass يحدد أنواع GPU
apiVersion: resource.k8s.io/v1alpha3
kind: DeviceClass
metadata:
  name: nvidia-gpu
spec:
  selectors:
  - cel:
      expression: device.driver == "nvidia.com"
---
# ResourceClaimTemplate للاستخدام المتكرر
apiVersion: resource.k8s.io/v1alpha3
kind: ResourceClaimTemplate
metadata:
  name: gpu-claim-template
  namespace: ml-research
spec:
  spec:
    devices:
      requests:
      - name: gpu
        deviceClassName: nvidia-gpu
        count: 1
        selectors:
        - cel:
            expression: device.attributes["nvidia.com/memory"].quantity >= "40Gi"

استخدام DRA في Pods

apiVersion: v1
kind: Pod
metadata:
  name: dra-training
  namespace: ml-research
spec:
  containers:
  - name: trainer
    image: pytorch/pytorch:2.1-cuda12.1
    resources:
      claims:
      - name: gpu-claim
  resourceClaims:
  - name: gpu-claim
    resourceClaimTemplateName: gpu-claim-template

DRA متقدم: مشاركة GPU متعددة الـ Pods

# ResourceClaim قابل للمشاركة
apiVersion: resource.k8s.io/v1alpha3
kind: ResourceClaim
metadata:
  name: shared-gpu
  namespace: ml-research
spec:
  devices:
    requests:
    - name: inference-gpu
      deviceClassName: nvidia-gpu
      count: 1
  # السماح لعدة pods بمشاركة هذا المطالبة
  allocationMode: WaitForFirstConsumer
---
# عدة pods تتشارك GPU
apiVersion: v1
kind: Pod
metadata:
  name: inference-1
spec:
  containers:
  - name: server
    image: inference:latest
    resources:
      claims:
      - name: shared-gpu
        request: inference-gpu
  resourceClaims:
  - name: shared-gpu
    resourceClaimName: shared-gpu  # مرجع للمطالبة الموجودة
---
apiVersion: v1
kind: Pod
metadata:
  name: inference-2
spec:
  containers:
  - name: server
    image: inference:latest
    resources:
      claims:
      - name: shared-gpu
        request: inference-gpu
  resourceClaims:
  - name: shared-gpu
    resourceClaimName: shared-gpu  # نفس المطالبة

المقارنة: KAI مقابل DRA مقابل Kueue

الميزة KAI Scheduler DRA Kueue
طوبولوجيا GPU أصلي عبر selectors لا
إدارة الطوابير مدمج لا أصلي
تخصيص دقيق نعم نعم لا
مشاركة متعددة الـ pods عبر السياسات أصلي لا
جدولة المجموعات نعم لا نعم
أصلي في Kubernetes امتداد أصلي (1.34) أصلي

المكدس الموصى به لـ 2026

┌─────────────────────────────────────────────────────────────────┐
│              مكدس جدولة GPU الإنتاجي                             │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  الطبقة 1: إدارة الطوابير (Kueue)                               │
│  └── عدالة متعددة المستأجرين، حصص، استعارة                      │
│                                                                  │
│  الطبقة 2: جدولة GPU (KAI أو DRA)                               │
│  └── وضع واعي بالطوبولوجيا والذاكرة                            │
│                                                                  │
│  الطبقة 3: إدارة الموارد (GPU Operator)                         │
│  └── التعريفات، device plugin، المقاييس                        │
│                                                                  │
│  الطبقة 4: البنية التحتية (Kubernetes 1.34+)                    │
│  └── DRA GA، VolumeAttributesClass، OCI artifacts               │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

الوحدة التالية: Kubeflow وخطوط ML لتنسيق سير عمل ML من البداية للنهاية. :::

اختبار

الوحدة 2: جدولة GPU وإدارة الموارد

خذ الاختبار