• Русский
  • Scheduling Inference Services based on the CUDA version

    Содержание

    IntroductionSteps

    Introduction

    В кластере Kubernetes несоответствие моделей GPU и версий драйверов CUDA на разных GPU-узлах приводит к следующим проблемам:

    1. Несовпадение версий: версия CUDA runtime, используемая приложениями, может быть несовместима с версией драйвера CUDA на некоторых узлах, что приводит к сбоям или проблемам с производительностью.

    2. Проблемы с планированием: встроенный планировщик Kubernetes не учитывает зависимости от версии CUDA и не может гарантировать, что приложения будут запущены на GPU-узлах с совместимыми версиями.

    3. Высокие затраты на обслуживание: ручное управление зависимостями версий CUDA между узлами и приложениями увеличивает операционную сложность.

    В этом документе представлен пошаговый гид по планированию inference-сервисов на основе версии CUDA runtime и версии драйвера Nvidia. С помощью этих настроек можно решить проблему несовпадения версий CUDA Runtime и CUDA Driver на уровне планирования Kubernetes, чтобы обеспечить запуск приложений на совместимых GPU-узлах.

    Steps

    Добавление версии CUDA в метки узлов

    1. На каждом GPU-узле выполните следующую команду для получения поддерживаемой версии CUDA runtime:

      nvidia-smi | sed -n 's/.*CUDA Version: \([0-9.]\+\).*/\1/p'

      Например, вывод может быть 12.4.

    2. На управляющем узле добавьте метку GPU-узлу с соответствующими основной и дополнительной версиями:

      kubectl label node <node-name> \
      nvidia.com/cuda.runtime.major=12 \
      nvidia.com/cuda.runtime.minor=4
    TIP

    Если в вашем кластере много GPU-узлов, вручную их маркировать сложно. Вы можете установить кластерный плагин Node Feature Discovery. Развернув плагин Node Feature Discovery (NFD) и включив расширение GFD, GPU-узлы будут автоматически маркироваться версией CUDA. Кластерный плагин Node Feature Discovery доступен в Customer Portal. Для получения дополнительной информации обратитесь в Consumer Support.

    Планирование inference-сервисов на основе версии CUDA

    Начиная с Alauda AI 1.5, продукт автоматически планирует pod inference-сервисов по версии CUDA. Для более ранних версий можно выполнить следующие шаги:

    1. Определите, какой ClusterServingRuntime необходимо выбрать при создании inference-сервиса.
    2. Разберите метку ClusterServingRuntime: Если cpaas.io/accelerator-type равен nvidia, дополнительно разберите cpaas.io/cuda-version (пример 11.8).
    3. Добавьте поле nodeAffinity в описание inference-сервиса, пример:
      apiVersion: serving.kserve.io/v1beta1
      kind: InferenceService
      spec:
        predictor:
          affinity:
            nodeAffinity:
              preferredDuringSchedulingIgnoredDuringExecution:
              - weight: 100
                preference:
                  matchExpressions:
                  - key: nvidia.com/cuda.runtime.major
                    operator: In
                    values: ["11"]
                  - key: nvidia.com/cuda.runtime.minor
                    operator: Gt
                    values: ["7"] # Поскольку оператор k8s поддерживает только Gt, что означает больше, но не равно, мы используем версию runtime минус один, чтобы удовлетворить требованиям.