Машинное обучение Azure требования к маршрутизатору вывода и подключению
Машинное обучение Azure маршрутизатор вывода является важным компонентом для вывода в режиме реального времени с кластером Kubernetes. В этой статье раскрываются следующие темы:
- Что такое маршрутизатор вывода Машинного обучения Azure
- принцип работы автомасштабирования;
- настройка и обеспечение нужной производительности запросов вывода (количество запросов в секунду и задержка);
- требования к подключению для кластера вывода AKS.
Что такое маршрутизатор вывода Машинного обучения Azure
Машинное обучение Azure маршрутизатор вывода — это интерфейсный компонент (azureml-fe
), который развертывается в кластере AKS или Arc Kubernetes в Машинное обучение Azure времени развертывания расширения. Этот компонент выполняет следующие функции:
- направляет входящие запросы вывода из подсистемы балансировки нагрузки кластера или контроллера объекта ingress в соответствующие модули pod модели;
- выполняет балансировку нагрузки всех входящих запросов вывода с помощью интеллектуальной координируемой маршрутизации;
- Управляет автомасштабированием модулей pod модели.
- обеспечивает возможности отказоустойчивости и отработки отказа, гарантирующие, что для критически важных бизнес-приложений всегда будут обслуживаться запросы на вывод.
Ниже описана обработка запросов внешним интерфейсом:
- Клиент отправляет запрос в подсистему балансировки нагрузки.
- Подсистема балансировки нагрузки отправляет его в один из внешних интерфейсов.
- Внешний интерфейс находит маршрутизатор служб (интерфейсный экземпляр, действующий в качестве координатора) для службы.
- Маршрутизатор служб выбирает серверную часть и возвращает сведения о ней во внешний интерфейс.
- Внешний интерфейс перенаправляет запрос в серверную часть.
- После обработки запроса серверная часть отправляет ответ в интерфейсный компонент.
- Внешний интерфейс возвращает ответ клиенту.
- Внешний интерфейс информирует маршрутизатор службы о том, что серверная часть завершила обработку и доступна для других запросов.
Этот поток показан на следующей диаграмме.
Как видно из приведенной выше схемы, по умолчанию 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 или 1azureml-fe
экземпляра на кластер.- Это число экземпляров
inferenceRouterHA
зависит от конфигурации Машинное обучение Azure entension. - Увеличение количества экземпляров невозможно сохранить, так как оно будет перезаписано с настроенным значением после обновления расширения.
- Это число экземпляров
- Обратитесь к специалистам Майкрософт за помощью.
Общие сведения о требованиях к подключению для кластера вывода AKS
Кластер AKS развертывается на основе одной из двух следующих моделей сети:
- Сеть kubenet — ресурсы обычно создаются и настраиваются при развертывании кластера AKS.
- Сеть Azure CNI — кластер AKS подключен к имеющимся ресурсу и конфигурациям виртуальной сети.
При использовании сетей Kubenet система правильно создает и настраивает сеть для Службы машинного обучения Azure. При использовании сетей CNI необходимо понимать требования к подключениям, а также обеспечить разрешение DNS и исходящее подключение для функции создания выводов AKS. Например, при использовании брандмауэра для блокировки сетевого трафика может потребоваться выполнить дополнительные действия.
На приведенной ниже схеме показаны все требования к подключениям функции создания выводов AKS. Черные стрелки представляют фактический обмен данными, а синие — доменные имена. Возможно, потребуется добавить записи для этих узлов в брандмауэр или на пользовательский DNS-сервер.
Общие требования к подключениям 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 и исходящий трафик для этих служб.