Налаштування Kubernetes для AI/ML Workloads GPU Scheduling NVIDIA Operator

Проектуємо та впроваджуємо системи штучного інтелекту: від прототипу до production-ready рішення. Наша команда поєднує експертизу в машинному навчанні, дата-інжинірингу та MLOps, щоб AI працював не в лабораторії, а в реальному бізнесі.
Показано 1 з 1Усі 1566 послуг
Налаштування Kubernetes для AI/ML Workloads GPU Scheduling NVIDIA Operator
Складний
~3-5 днів
Часті запитання

Напрямки AI-розробки

Етапи розробки AI-рішення

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1284
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1196
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    901
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1119
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    586
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    853

Налаштування Kubernetes для AI/ML Workloads: GPU Scheduling та NVIDIA GPU Operator

Kubernetes для ML – це оркестрація навчальних завдань, інференс-сервісів та ML-пайплайнів з автоматичним керуванням GPU-ресурсами. NVIDIA GPU Operator спрощує управління GPU в K8s кластері: автоматично встановлює драйвери, container toolkit та device plugin.

NVIDIA GPU Operator

GPU Operator управляє всіма GPU-компонентами як Kubernetes Custom Resources:

# Установка через Helm
helm repo add nvidia https://helm.ngc.nvidia.com/nvidia
helm repo update

helm install gpu-operator nvidia/gpu-operator \
  --namespace gpu-operator \
  --create-namespace \
  --set driver.enabled=true \
  --set driver.version="545.23.06" \
  --set toolkit.enabled=true \
  --set devicePlugin.enabled=true \
  --set dcgmExporter.enabled=true \
  --set gfd.enabled=true  # GPU Feature Discovery

# Проверка
kubectl get pods -n gpu-operator
kubectl get nodes -o custom-columns='NAME:.metadata.name,GPU:.status.capacity.nvidia\.com/gpu'

GPU Scheduling

Базове виділення GPU:

apiVersion: batch/v1
kind: Job
metadata:
  name: model-training
spec:
  template:
    spec:
      restartPolicy: Never
      containers:
        - name: trainer
          image: your-registry/ml-trainer:v1.0
          resources:
            limits:
              nvidia.com/gpu: 4  # 4 GPU
              memory: "64Gi"
              cpu: "16"
            requests:
              nvidia.com/gpu: 4

MIG (Multi-Instance GPU) для поділу A100:

# Выделить 1/7 часть A100 (MIG 1g.10gb)
resources:
  limits:
    nvidia.com/mig-1g.10gb: 1

Node Labels та GPU selection

# Разметка узлов по типу GPU
kubectl label node gpu-node-1 nvidia.com/gpu.product=A100-SXM4-80GB
kubectl label node gpu-node-2 nvidia.com/gpu.product=A10G

# Pod affinity к конкретному GPU
nodeSelector:
  nvidia.com/gpu.product: A100-SXM4-80GB

Priority Classes для GPU workload

# High priority для production инференса
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
  name: ml-inference-critical
value: 1000
globalDefault: false

# Low priority для batch обучения (может быть вытеснен)
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
  name: ml-training-batch
value: 100
preemptionPolicy: PreemptLowerPriority

Gang Scheduling з Volcano

Для розподіленого навчання всі поди мають запуститися одночасно:

apiVersion: batch.volcano.sh/v1alpha1
kind: Job
metadata:
  name: distributed-training
spec:
  minAvailable: 4  # Все 4 worker должны стартовать вместе
  schedulerName: volcano
  plugins:
    pytorch: ["--master=1", "--worker=3", "--port=23456"]
  tasks:
    - replicas: 1
      name: master
      policies:
        - event: TaskCompleted
          action: CompleteJob
      template:
        spec:
          containers:
            - name: master
              image: your-registry/pytorch-trainer:v1
              resources:
                limits:
                  nvidia.com/gpu: 8
    - replicas: 3
      name: worker
      template:
        spec:
          containers:
            - name: worker
              image: your-registry/pytorch-trainer:v1
              resources:
                limits:
                  nvidia.com/gpu: 8

Моніторинг GPU через DCGM Exporter

# DCGM Exporter устанавливается вместе с GPU Operator
# Grafana dashboard ID: 12239 (NVIDIA DCGM Exporter Dashboard)

# Ключевые метрики Prometheus:
# DCGM_FI_DEV_GPU_UTIL — утилизация GPU (целевой: >80% при обучении)
# DCGM_FI_DEV_MEM_USED — использование GPU памяти
# DCGM_FI_DEV_POWER_USAGE — потребляемая мощность
# DCGM_FI_DEV_NVLINK_BANDWIDTH_TOTAL — NVLink пропускная способность

Cluster Autoscaler для GPU вузлів

# Автоскейлинг GPU node pool (GKE/EKS/AKS)
# Добавление GPU node pool при нехватке ресурсов
# и удаление при длительном простое (>10 мин)
annotations:
  cluster-autoscaler.kubernetes.io/safe-to-evict: "false"  # Для training jobs

Правильно налаштований K8s GPU кластер досягає 75-85% утилізації GPU при змішаних workloads (навчання + інференс), що значно краще за типовий cloud-native підхід без оркестрації.