• Русский
  • Планирование служб инференса на основе версии CUDA

    Содержание

    ВведениеШаги

    Введение

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

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

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

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

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

    Шаги

    Добавление версии 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 для получения дополнительной информации.

    Планирование служб инференса на основе версии CUDA

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

    1. Определите, какой ClusterServingRuntime необходимо выбрать при создании службы инференса.
    2. Разберите метку ClusterServingRuntime: Если cpaas.io/accelerator-type равен nvidia, дополнительно разберите cpaas.io/cuda-version (например, 11.8).
    3. Добавьте поле nodeAffinity в службу инференса, пример:
      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 минус один, чтобы удовлетворить требованиям.