• Русский
  • Extend Inference Runtimes

    Introduction

    Этот документ пошагово объясняет, как добавить новые среды выполнения инференса для обслуживания как больших языковых моделей (LLM), так и любых других моделей, таких как «классификация изображений», «обнаружение объектов», «классификация текста» и т. д.

    Alauda AI поставляется с встроенным движком инференса «vLLM». С помощью «custom inference runtimes» вы можете добавить дополнительные движки инференса, например, Seldon MLServer, Triton inference server и другие.

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

    В этом разделе мы продемонстрируем расширение текущей AI платформы с помощью пользовательской среды выполнения сервиса инференса XInfernece для развертывания LLM и обслуживания «OpenAI совместимого API».

    Scenarios

    Рассмотрите возможность расширения сред выполнения сервиса инференса вашей AI платформы, если вы столкнулись с одной из следующих ситуаций:

    • Поддержка новых типов моделей: Ваша модель не поддерживается по умолчанию текущей средой выполнения инференса vLLM.
    • Совместимость с другими типами GPU: Вам необходимо выполнять инференс LLM на оборудовании с GPU, например AMD или Huawei Ascend.
    • Оптимизация производительности для конкретных сценариев: В некоторых сценариях инференса новая среда выполнения (например, Xinference) может обеспечить лучшую производительность или более эффективное использование ресурсов по сравнению с существующими средами.
    • Пользовательская логика инференса: Вам нужно внедрить кастомную логику инференса или зависимые библиотеки, которые сложно реализовать в существующих стандартных средах выполнения.

    Prerequisites

    Перед началом убедитесь, что выполнены следующие условия:

    1. Ваш кластер ACP развернут и работает нормально.
    2. Версия вашей AI платформы 1.3 или выше.
    3. У вас подготовлены необходимые образы среды выполнения инференса. Например, для среды Xinference образы могут выглядеть как xprobe/xinference:v1.2.2 (для GPU) или xprobe/xinference:v1.2.2-cpu (для CPU).
    4. У вас есть привилегии администратора кластера (необходимы для создания экземпляров CRD).

    Steps

    Создание ресурсов среды выполнения инференса

    Вам нужно создать соответствующие ресурсы среды выполнения инференса в зависимости от целевой аппаратной среды (GPU/CPU/NPU).

    1. Подготовьте YAML-конфигурацию среды выполнения:

      В зависимости от типа среды выполнения, которую вы хотите добавить (например, Xinference), и вашей целевой аппаратной среды подготовьте соответствующий YAML-файл конфигурации. Ниже приведены примеры для среды Xinference на разных аппаратных платформах:

    • Пример среды для GPU
      # Пример YAML для среды Xinference GPU
      apiVersion: serving.kserve.io/v1alpha1
      kind: ClusterServingRuntime
      metadata:
        name: aml-xinference-cuda-12.1 # Имя ресурса среды выполнения
        labels:
          cpaas.io/runtime-class: xinference # обязательная метка типа среды выполнения
          cpaas.io/accelerator-type: "nvidia"
          cpaas.io/cuda-version: "12.1"
        annotations:
          cpaas.io/display-name: xinference-cuda-12.1 # Отображаемое имя в UI
      spec:
        containers:
        - name: kserve-container
          image: xprobe/xinference:v1.2.2  # Замените на ваш реальный образ среды выполнения для GPU
          env:
          # Обязательный параметр для всех сред – путь к директории модели
          - name: MODEL_PATH
            value: /mnt/models/{{ index .Annotations "aml-model-repo" }}
          # Параметр MODEL_UID необязателен для других сред.
          - name: MODEL_UID 
            value: '{{ index .Annotations "aml-model-repo" }}'
          # Параметр MODEL_ENGINE обязателен для среды Xinference, для других сред может быть опущен.
          - name: MODEL_ENGINE 
            value: "transformers"
          # Обязательный параметр для среды xinference, установите в соответствии с семейством вашей модели, например: "llama", "chatglm" и т.д.
          - name: MODEL_FAMILY 
            value: ""
          command:
          - bash
          - -c
          - |
              set +e
              if [ "${MODEL_PATH}" == "" ]; then
                  echo "Необходимо задать MODEL_PATH!"
                  exit 1
              fi
              if [ "${MODEL_ENGINE}" == "" ]; then
                  echo "Необходимо задать MODEL_ENGINE!"
                  exit 1
              fi
              if [ "${MODEL_UID}" == "" ]; then
                  echo "Необходимо задать MODEL_UID!"
                  exit 1
              fi
              if [ "${MODEL_FAMILY}" == "" ]; then
                  echo "Необходимо задать MODEL_FAMILY!"
                  exit 1
              fi
      
              xinference-local --host 0.0.0.0 --port 8080 &
              PID=$!
              while [ true ];
              do
                  curl http://127.0.0.1:8080/docs
                  if [ $? -eq 0 ]; then
                      break
                  else
                      echo "ожидание готовности сервера xinference-local..."
                      sleep 1
                  fi
              done
      
              set -e
              xinference launch --model_path ${MODEL_PATH} --model-engine ${MODEL_ENGINE} -u ${MODEL_UID} -n ${MODEL_FAMILY} -e http://127.0.0.1:8080 $@
              xinference list -e http://127.0.0.1:8080
              echo "модель успешно загружена, ожидание процесса сервера: ${PID}..."
              wait ${PID}
          # Добавьте эту строку для использования $@ в скрипте:
          # см.: https://unix.stackexchange.com/questions/144514/add-arguments-to-bash-c
          - bash
          resources:
            limits:
              cpu: 2
              memory: 6Gi
            requests:
              cpu: 2
              memory: 6Gi
          startupProbe:
            httpGet:
              path: /docs
              port: 8080
              scheme: HTTP
            failureThreshold: 60 
            periodSeconds: 10
            timeoutSeconds: 10
        supportedModelFormats:
          - name: transformers # Формат модели, поддерживаемый средой выполнения
            version: "1"
      
      • Совет: Обязательно замените значение поля image на путь к вашему реальному подготовленному образу среды выполнения. Также вы можете изменить поле annotations.cpaas.io/display-name для кастомизации отображаемого имени среды выполнения в UI AI платформы.
    1. Примените YAML-файл для создания ресурса:

      В терминале с правами администратора кластера выполните команду для применения вашего YAML-файла и создания ресурса среды выполнения инференса:

      kubectl apply -f your-xinference-runtime.yaml
      TIP
      • Важный совет: Пожалуйста, ориентируйтесь на приведённые выше примеры и создавайте/настраивайте среду выполнения в соответствии с вашей реальной средой и требованиями инференса. Эти примеры приведены только для справки. Вам нужно будет скорректировать параметры, такие как образ, лимиты и запросы ресурсов, чтобы обеспечить совместимость среды выполнения с вашей моделью и аппаратной средой, а также эффективную работу.
      • Примечание: Вы сможете использовать эту пользовательскую среду выполнения на странице публикации сервиса инференса только после создания ресурса среды выполнения!

    Публикация сервиса инференса Xinference и выбор среды выполнения

    После успешного создания ресурса среды выполнения Xinference вы сможете выбрать и настроить её при публикации сервиса инференса LLM на AI платформе.

    1. Настройте фреймворк инференса для модели:

      Убедитесь, что на странице деталей модели в репозитории моделей, которую вы собираетесь публиковать, выбран соответствующий framework через функцию редактирования метаданных File Management. Значение параметра framework, выбранное здесь, должно совпадать со значением из поля supportedModelFormats, указанного при создании среды выполнения инференса. Пожалуйста, убедитесь, что значение параметра framework модели входит в список supportedModelFormats, установленный в среде выполнения инференса.

    2. Перейдите на страницу публикации сервиса инференса:

      Войдите в AI платформу и перейдите в модули «Inference Services» или «Model Deployment», затем нажмите «Publish Inference Service».

    3. Выберите среду выполнения Xinference:

      В мастере создания сервиса инференса найдите опцию «Runtime» или «Inference Framework». В выпадающем списке или меню выберите среду выполнения Xinference, которую вы создали на шаге 1 (например, «Xinference CPU Runtime» или «Xinference GPU Runtime (CUDA)»).

    4. Установите переменные окружения: Среда выполнения Xinference требует определённых переменных окружения для корректной работы. На странице конфигурации сервиса инференса найдите раздел «Environment Variables» или «More Settings» и добавьте следующую переменную окружения:

      • Описание параметра переменной окружения

        Имя параметраОписание
        MODEL_FAMILYОбязательно. Указывает семейство LLM модели, которую вы разворачиваете. Xinference использует этот параметр для идентификации и загрузки правильной логики инференса для модели. Например, если вы разворачиваете модель Llama 3, установите значение llama; если это модель ChatGLM, установите chatglm. Пожалуйста, задайте это в соответствии с реальным семейством вашей модели.
      • Пример:

        • Имя переменной: MODEL_FAMILY
        • Значение переменной: llama (если вы используете модель серии Llama, ознакомьтесь с документацией для подробностей. Или выполните команду xinference registrations -t LLM для списка всех поддерживаемых семейств моделей.)