Машинное обучение Azure требования к маршрутизатору вывода и подключению

Машинное обучение Azure маршрутизатор вывода является важным компонентом для вывода в режиме реального времени с кластером Kubernetes. В этой статье раскрываются следующие темы:

  • Что такое маршрутизатор вывода Машинного обучения Azure
  • принцип работы автомасштабирования;
  • настройка и обеспечение нужной производительности запросов вывода (количество запросов в секунду и задержка);
  • требования к подключению для кластера вывода AKS.

Что такое маршрутизатор вывода Машинного обучения Azure

Машинное обучение Azure маршрутизатор вывода — это интерфейсный компонент (azureml-fe), который развертывается в кластере AKS или Arc Kubernetes в Машинное обучение Azure времени развертывания расширения. Этот компонент выполняет следующие функции:

  • направляет входящие запросы вывода из подсистемы балансировки нагрузки кластера или контроллера объекта ingress в соответствующие модули pod модели;
  • выполняет балансировку нагрузки всех входящих запросов вывода с помощью интеллектуальной координируемой маршрутизации;
  • Управляет автомасштабированием модулей pod модели.
  • обеспечивает возможности отказоустойчивости и отработки отказа, гарантирующие, что для критически важных бизнес-приложений всегда будут обслуживаться запросы на вывод.

Ниже описана обработка запросов внешним интерфейсом:

  1. Клиент отправляет запрос в подсистему балансировки нагрузки.
  2. Подсистема балансировки нагрузки отправляет его в один из внешних интерфейсов.
  3. Внешний интерфейс находит маршрутизатор служб (интерфейсный экземпляр, действующий в качестве координатора) для службы.
  4. Маршрутизатор служб выбирает серверную часть и возвращает сведения о ней во внешний интерфейс.
  5. Внешний интерфейс перенаправляет запрос в серверную часть.
  6. После обработки запроса серверная часть отправляет ответ в интерфейсный компонент.
  7. Внешний интерфейс возвращает ответ клиенту.
  8. Внешний интерфейс информирует маршрутизатор службы о том, что серверная часть завершила обработку и доступна для других запросов.

Этот поток показан на следующей диаграмме.

Diagram illustrating the flow of requests between components.

Как видно из приведенной выше схемы, по умолчанию 3 azureml-fe экземпляра создаются во время развертывания расширения Машинное обучение Azure, один экземпляр выступает в качестве роли координации, а другие экземпляры служат входящим запросам вывода. У координирующего экземпляра есть все сведения о модулях pod модели. Он принимает решение о том, какой модуль pod модели будет обслуживать входящий запрос, а обслуживающие экземпляры azureml-fe отвечают за маршрутизацию запроса в выбранный модуль pod модели и возврат ответа исходному пользователю.

Автомасштабирование

Машинное обучение Azure маршрутизатор вывода обрабатывает автомасштабирование для всех развертываний моделей в кластере Kubernetes. Так как все запросы вывода проходят через него, у него есть все необходимые данные для автоматического масштабирования развернутых моделей.

Внимание

  • Не включайте горизонтальное автомасштабирование pod (HPA) Kubernetes для развертываний моделей. Иначе два компонента автомасштабирования будут конкурировать друг с другом. Azureml-fe предназначен для автоматического масштабирования моделей, развернутых Машинное обучение Azure, где HPA придется угадать или приблизить использование модели из универсальной метрики, например использование ЦП или настраиваемую конфигурацию метрик.

  • Azureml-fe не масштабирует количество узлов в кластере AKS, так как это может привести к непредвиденному росту затрат. Вместо этого он масштабирует количество реплик для модели в границах физического кластера. Если необходимо масштабировать количество узлов в кластере, вы можете масштабировать кластер вручную или настроить автомасштабирование кластера AKS.

Автомасштабированием можно управлять с помощью свойства scale_settings в YAML развертывания. В следующем примере показано, как включить автомасштабирование.

# deployment yaml
# other properties skipped
scale_setting:
  type: target_utilization
  min_instances: 3
  max_instances: 15
  target_utilization_percentage: 70
  polling_interval: 10
# other deployment properties continue

Решение о масштабировании вверх или вниз основано на utilization of the current container replicas.

utilization_percentage = (The number of replicas that are busy processing a request + The number of requests queued in azureml-fe) / The total number of current replicas

Если это число превышает target_utilization_percentage, то создаются дополнительные реплики. Если оно меньше, то реплики сокращаются. По умолчанию целевой показатель использования составляет 70 %.

Решения по добавлению реплик принимаются быстро (около 1 секунды). Решения по удалению реплик более консервативны и принимаются около 1 минуты.

Предположим, что вам нужно развернуть службу модели и определить число экземпляров (pod или реплик), которые следует настроить для целевых запросов в секунду (RPS) и целевого времени отклика. Вы можете рассчитать необходимые реплики, используя следующий код:

from math import ceil
# target requests per second
targetRps = 20
# time to process the request (in seconds)
reqTime = 10
# Maximum requests per container
maxReqPerContainer = 1
# target_utilization. 70% in this example
targetUtilization = .7

concurrentRequests = targetRps * reqTime / targetUtilization

# Number of container replicas
replicas = ceil(concurrentRequests / maxReqPerContainer)

Производительность azureml-fe

Может azureml-fe достигать 5 K запросов в секунду (QPS) с хорошей задержкой, не превышающей 3 мс в среднем и 15 мс на 99 % процентиль.

Примечание.

Если у вас есть требования к RPS выше 10K, рассмотрите следующие варианты:

  • Увеличьте количество запросов и ограничений ресурсов для azureml-fe модулей pod. По умолчанию он имеет 2 виртуальных ЦП и ограничение ресурсов памяти 1.2G.
  • Увеличьте число экземпляров для azureml-fe. По умолчанию Машинное обучение Azure создает 3 или 1 azureml-fe экземпляра на кластер.
  • Обратитесь к специалистам Майкрософт за помощью.

Общие сведения о требованиях к подключению для кластера вывода AKS

Кластер AKS развертывается на основе одной из двух следующих моделей сети:

  • Сеть kubenet — ресурсы обычно создаются и настраиваются при развертывании кластера AKS.
  • Сеть Azure CNI — кластер AKS подключен к имеющимся ресурсу и конфигурациям виртуальной сети.

При использовании сетей Kubenet система правильно создает и настраивает сеть для Службы машинного обучения Azure. При использовании сетей CNI необходимо понимать требования к подключениям, а также обеспечить разрешение DNS и исходящее подключение для функции создания выводов AKS. Например, при использовании брандмауэра для блокировки сетевого трафика может потребоваться выполнить дополнительные действия.

На приведенной ниже схеме показаны все требования к подключениям функции создания выводов AKS. Черные стрелки представляют фактический обмен данными, а синие — доменные имена. Вам может потребоваться добавить записи для этих узлов в брандмауэр или пользовательский DNS-сервер.

Diagram of the connectivity requirements for inferencing with Azure Kubernetes Services.

Общие требования к подключениям AKS см. в статье Управление исходящим трафиком для узлов кластера в службе Azure Kubernetes (AKS).

Сведения о доступе к службам Машинное обучение Azure за брандмауэром см. в разделе "Настройка входящего и исходящего сетевого трафика".

Общие требования к разрешению DNS

Вы можете контролировать разрешение DNS в существующей виртуальной сети. Пример: брандмауэр или пользовательский DNS-сервер. Должны быть доступны указанные ниже узлы.

Имя узла Где используется
<cluster>.hcp.<region>.azmk8s.io Сервер API AKS
mcr.microsoft.com Microsoft Container Registry (MCR)
<ACR name>.azurecr.io Ваш Реестр контейнеров Azure (ACR)
<account>.blob.core.windows.net Учетная запись службы хранилища Azure (хранилище больших двоичных объектов)
api.azureml.ms Проверка подлинности Microsoft Entra
ingest-vienna<region>.kusto.windows.net Конечная точка Kusto для отправки данных телеметрии

Требования к подключению в хронологическом порядке: от создания кластера до развертывания модели

Сразу после развертывания azureml-fe будет предпринята попытка запуска, и для этого потребуется:

  • разрешить DNS для сервера API AKS;
  • запросить сервер API AKS для обнаружения других своих экземпляров (это служба с несколькими pod);
  • подключиться к другим своим экземплярам.

После запуска azureml-fe для его правильной работы требуются следующие подключения:

  • подключения к службе хранилища Azure для скачивания динамической конфигурации;
  • Разрешение DNS для сервера проверки подлинности Microsoft Entra api.azureml.ms и обмен данными с ним, когда развернутая служба использует проверку подлинности Microsoft Entra.
  • запроса сервера API AKS для обнаружения развернутых моделей;
  • взаимодействия с развернутыми pod модели.

Во время развертывания модели для успешного развертывания модели AKS узел должен иметь возможность:

  • разрешить DNS для ACR заказчика;
  • загружать образы из ACR заказчика;
  • разрешать DNS для BLOB-объектов Azure, где хранится модель;
  • загружать модели из BLOB-объект.ов Azure

После развертывания модели и запуска службы azureml-fe автоматически обнаружит ее с помощью API AKS и будет готов к маршрутизации запроса. Он должен иметь возможность взаимодействовать с pod модели.

Примечание.

Если для развернутой модели требуется подключение (например, для запросов внешней базы данных или другой службы REST, загрузки BLOB-объекта и т. п.), то необходимо включить оба разрешения DNS и исходящий трафик для этих служб.

Следующие шаги