GPU Operator#

GPU Operator - инструмент, предназначенный для автоматического развертывания и управления стеком программного обеспечения, необходимого для запуска GPU-ускоренных рабочих нагрузок в кластере.

GPU Operator использует фреймворк операторов в кластере для автоматизации управления всеми компонентами программного обеспечения NVIDIA, необходимыми для выделения GPU. Эти компоненты включают драйверы NVIDIA (для включения CUDA), плагин устройств DropApp для GPU и другие.

GPU Operator состоит из нескольких компонентов, управляемых через CRD ClusterPolicy:

  • Container Toolkit - интегрирует GPU с контейнерной средой выполнения (раздел runtime).

  • K8s-device-plugin - обнаруживает и выделяет GPU pod.

  • GPU Feature Discovery - помечает узлы метками на основе возможностей GPU.

  • DCGM Exporter - экспортирует метрики GPU в формате Prometheus.

  • MIG Partiton Editor - управляет конфигурацией MIG.

Основные функции:

  • Автоматическое развертывание GPU-стека - осуществляется с помощью одного манифеста (ClusterPolicy), который автоматически устанавливает весь стек на совместимые узлы.

  • Управление драйверами NVIDIA - выполняется автоматически через установку драйверов с помощью init-контейнеров или с использованием предустановленных драйверов в зависимости от конфигурации.

  • Интеграция с контейнерным runtime - настраивает containerd или CRI-O для использования nvidia-container-runtime.

  • Регистрация GPU в DropApp - осуществляется через K8s-device-plugin, который обеспечивает появление ресурса nvidia.com/gpu.

  • Мониторинг с помощью развертывания DCGM Exporter - экспортирует метрики GPU в Prometheus.

  • Обнаружение возможностей GPU - осуществляется через GPU Feature Discovery, который добавляет метки узлов, отражающие архитектуру GPU, поддержку MIG и NVLink, что позволяет использовать affinity узла.

  • Time-Sharing Scheduler - интеграция с MIG на A100/H100 и поддержка time-slicing.

Установка GPU Operator#

Предварительные условия#

  1. Все рабочие узлы или группы узлов, на которых запускаются рабочие нагрузки GPU в кластере, должны использовать одну и ту же версию операционной системы для работы с контейнером драйвера NVIDIA GPU.

    Рабочие узлы или группы узлов, которые только обрабатывают CPU-нагрузки, могут использовать любую операционную систему, так как GPU Operator не выполняет конфигураций или управления узлами для нагрузки только на CPU.

  2. Узлы должны быть настроены с использованием контейнерного средства, такого как CRI-O или containerd.

  3. Если кластер использует Pod Security Admission (PSA) для ограничения поведения pod, пометьте пространство имен для оператора, чтобы установить политику принудительного применения в режим привилегированного доступа:

    kubectl create ns gpu-operator
    kubectl label --overwrite ns gpu-operator pod-security.kubernetes.io/enforce=privileged
    
  4. Node Feature Discovery (NFD) является зависимостью для GPU Operator на каждом узле. По умолчанию NFD-master и NFD-worker узлы автоматически развертываются оператором. Если NFD уже работает в кластере, необходимо отключить развертывание NFD при установке оператора.

    Для определения, работает ли NFD в кластере, проверьте наличие метки NFD на узлах:

    kubectl get nodes -o json | jq '.items[].metadata.labels | keys | any(startswith("feature.node.kubernetes.io"))'
    

    Если вывод команды - true, значит, NFD уже работает в кластере.

Установка#

Установка GPU Operator с параметрами по умолчанию#

Установите GPU Operator с параметрами по умолчанию:

helm install --wait --generate-name \
    -n gpu-operator --create-namespace \
    nvidia/gpu-operator \
    --version=<version>

Установка GPU Operator с указанием параметров#

Установите GPU Operator с указанием параметров:

helm install --wait --generate-name \
    -n gpu-operator --create-namespace \
    nvidia/gpu-operator \
    --version=<version>
    --set <option-name>=<option-value>