Настройка 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.png
    Разработка сайта компании B2B ADVANCE
    1218
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    853
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1047
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    561
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    825

Настройка 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 подхода без оркестрации.