Развертывание модели в кластере Службы Azure Kubernetes с помощью версии 1

Внимание

В этой статье объясняется, как использовать интерфейс командной строки Машинное обучение Azure (версии 1) и пакет SDK Машинное обучение Azure для Python (версии 1) для развертывания модели. Рекомендуемый подход для версии 2 см. в статье Развертывание и оценка модели машинного обучения с помощью сетевой конечной точки.

Узнайте, как использовать Машинное обучение Azure для развертывания модели в качестве веб-службы в Службе Azure Kubernetes (AKS). AKS подходит для крупномасштабных рабочих развертываний. Используйте AKS, если вам нужна одна или несколько следующих возможностей:

  • быстрое время отклика;
  • автомасштабирование развернутой службы;
  • Ведение журнала
  • Сбор данных модели
  • Аутентификация
  • завершение сеанса TLS;
  • такие параметры аппаратного ускорения, как GPU и программируемые пользователем вентильные матрицы (ППВМ).

При развертывании в AKS развертывается в кластере AKS, подключенном к рабочей области. Сведения о подключении кластера AKS к рабочей области см. в разделе Создание и подключение кластера Службы Azure Kubernetes.

Внимание

Рекомендуется выполнить отладку локально перед развертыванием в веб-службе. Дополнительные сведения см. в разделе "Устранение неполадок с развертыванием локальной модели".

Вы также можете обратиться к локальной записной книжке на сайте GitHub.

Примечание.

Машинное обучение Azure Конечные точки (версия 2) обеспечивают улучшенный и простой интерфейс развертывания. Они поддерживают сценарии развертывания как в режиме реального времени, так и при использовании пакетного вывода. Конечные точки служат единым интерфейсом для вызова развертывания моделей и управления ими в вычислительных ресурсах разных типов. См. раздел "Что такое конечные точки Машинное обучение Azure?".

Необходимые компоненты

Общие сведения о процессах развертывания

Развертывание слов используется как в Kubernetes, так и в Машинное обучение Azure. Развертывание имеет разные значения в этих двух контекстах. В Kubernetes развертывание представляет собой конкретную сущность, указанную с декларативным файлом YAML. Развертывание Kubernetes имеет определенный жизненный цикл и конкретные связи с другими сущностями Kubernetes, такими как Pods и ReplicaSets. Вы можете узнать о Kubernetes из документации и видеороликов по ссылке Что такое Kubernetes?.

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

  1. упаковка файлов в папку проекта с игнорированием тех, которые указаны в файле с расширением .amlignore или .gitignore;
  2. Масштабирование вычислительного кластера (относится к Kubernetes)
  3. Создание или скачивание dockerfile на вычислительный узел (относится к Kubernetes)
    1. Система вычисляет хэш:
    2. Система использует этот хэш в качестве ключа при поиске в Реестре контейнеров Azure (ACR) рабочей области.
    3. Если он не найден, он ищет совпадение в глобальном ACR
    4. Если он не найден, система создает новый образ, кэшированный и отправленный в рабочую область ACR
  4. Загрузка упакованного файла проекта во временное хранилище в вычислительном узле.
  5. Распаковка файла проекта.
  6. Выполнение python <entry script> <arguments> вычислительным узлом.
  7. Сохранение журналов, файлов модели и других файлов, записанных в ./outputs в учетную запись хранения, связанную с рабочей областью
  8. Масштабирование вычислительных ресурсов, включая удаление временного хранилища (относится к Kubernetes)

маршрутизатор Машинное обучение Azure

Интерфейсный компонент (azureml-fe), который направляет входящие запросы вывода в развернутые службы, автоматически масштабируется по мере необходимости. Масштабирование azureml-fe зависит от назначения и размера кластера AKS (числа узлов). Назначение и узлы кластера настраиваются при создании или подключении кластера AKS. Существует одна служба azureml-fe для каждого кластера, которая может работать на нескольких модулях pod.

Внимание

При использовании кластера, настроенного как dev-test, самомасштабирование отключено. Даже для кластеров FastProd/DenseProd, автоматическое масштабирование включается, только когда телеметрии показывает, что оно требуется.

Примечание.

Максимальная полезные данные запроса составляет 100 МБ.

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

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

При масштабировании или уменьшении масштаба модули pod azureml-fe перезагружаются, чтобы применить изменения ЦП или памяти. Перезапуски не влияют на запросы вывода.

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

При Машинное обучение Azure создает или присоединяет кластер AKS, кластер AKS развертывается с помощью одной из следующих двух сетевых моделей:

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

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

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

Diagram that shows connectivity requirements for AKS inferencing.

Общие требования к подключению AKS см. в разделе "Ограничение сетевого трафика с помощью Брандмауэр Azure в 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>.table.core.windows.net Учетная запись службы хранилища Azure (хранилище таблиц)
<account>.blob.core.windows.net Учетная запись службы хранилища Azure (хранилище больших двоичных объектов)
api.azureml.ms Проверка подлинности Microsoft Entra
ingest-vienna<region>.kusto.windows.net Конечная точка Kusto для отправки данных телеметрии
<leaf-domain-label + auto-generated suffix>.<region>.cloudapp.azure.com Доменное имя конечной точки, если вы автоматически создались с помощью Машинное обучение Azure. Если вы использовали имя личного домена, эта запись не требуется.

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

В процессе создания или подключения AKS в кластер AKS развертывается маршрутизатор Машинное обучение Azure (azureml-fe). Чтобы развернуть маршрутизатор Машинное обучение Azure, узел AKS должен иметь возможность:

  • разрешить DNS для сервера API AKS;
  • Разрешение DNS для MCR для скачивания образов Docker для маршрутизатора Машинное обучение Azure
  • загрузить образы из MCR, где требуется исходящее подключение.

Сразу после развертывания 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 и исходящее взаимодействие для этих служб.

Развертывание в AKS

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

Примечание.

Число развертываемых моделей должно быть не более 1000 на развертывание (для каждого контейнера).

ОБЛАСТЬ ПРИМЕНЕНИЯ:Пакет SDK для Python для ML Azure версии 1

from azureml.core.webservice import AksWebservice, Webservice
from azureml.core.model import Model
from azureml.core.compute import AksCompute

aks_target = AksCompute(ws,"myaks")
# If deploying to a cluster configured for dev/test, ensure that it was created with enough
# cores and memory to handle this deployment configuration. Note that memory is also used by
# things such as dependencies and AML components.
deployment_config = AksWebservice.deploy_configuration(cpu_cores = 1, memory_gb = 1)
service = Model.deploy(ws, "myservice", [model], inference_config, deployment_config, aks_target)
service.wait_for_deployment(show_output = True)
print(service.state)
print(service.get_logs())

Дополнительные сведения о классах, методах и параметрах, используемых в этом примере, см. в следующих справочных документах.

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

ОБЛАСТЬ ПРИМЕНЕНИЯ:Пакет SDK для Python для ML Azure версии 1

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

Внимание

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

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

Чтобы управлять автомасштабированием, можно настроить autoscale_target_utilization, autoscale_min_replicas и autoscale_max_replicas для веб-службы AKS. В следующем примере показано, как включить автомасштабирование.

aks_config = AksWebservice.deploy_configuration(autoscale_enabled=True, 
                                                autoscale_target_utilization=30,
                                                autoscale_min_replicas=1,
                                                autoscale_max_replicas=4)

Решения по масштабированию в зависимости от использования текущих реплика контейнера. Количество занятых (обрабатывающих запросы) реплик, деленное на общее число текущих реплик, и является показателем текущего использования. Если это число превышает autoscale_target_utilization, то создаются дополнительные реплики. Если оно меньше, то реплики сокращаются. По умолчанию целевой показатель использования составляет 70 %.

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

Вы можете рассчитать необходимые реплики, используя следующий код:

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)

Дополнительные сведения о настройке autoscale_target_utilization, autoscale_max_replicas и autoscale_min_replicas см. в справочнике модуля AksWebservice.

Проверка подлинности веб-службы

При развертывании в службе Azure Kubernetes проверка подлинности на основе ключей включена по умолчанию. Вы также можете включить проверку подлинности на основе маркеров. Для проверки подлинности на основе маркеров клиенты должны использовать учетную запись Microsoft Entra для запроса маркера проверки подлинности, который используется для выполнения запросов к развернутой службе.

Чтобы отключить проверку подлинности, задайте параметр auth_enabled=False при создании конфигурации развертывания. В следующем примере пакет SDK используется для отключения проверки подлинности:

deployment_config = AksWebservice.deploy_configuration(cpu_cores=1, memory_gb=1, auth_enabled=False)

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

Проверка подлинности на основе ключей

Если включена проверка подлинности на основе ключей, можно использовать метод get_keys для извлечения первичного и вторичного ключей проверки подлинности:

primary, secondary = service.get_keys()
print(primary)

Внимание

Если вам нужно повторно создать ключ, используйте service.regen_key.

Проверка подлинности на основе маркеров

Чтобы включить проверку подлинности с помощью маркеров, используйте параметр token_auth_enabled=True при создании или обновлении развертывания. В следующем примере пакет SDK используется для включения проверки подлинности на основе маркеров:

deployment_config = AksWebservice.deploy_configuration(cpu_cores=1, memory_gb=1, token_auth_enabled=True)

Если включена проверка подлинности на основе маркеров, можно использовать метод get_token для получения JWT-маркера и его срока действия:

token, refresh_by = service.get_token()
print(token)

Внимание

После времени маркера необходимо запросить новый маркер refresh_by .

Корпорация Майкрософт настоятельно рекомендует создать рабочую область Машинное обучение Azure в том же регионе, что и кластер AKS. Для проверки подлинности с помощью маркера веб-служба вызывает регион, в котором создается Машинное обучение Azure рабочая область. Если регион рабочей области недоступен, вы не можете получить маркер для веб-службы, даже если кластер находится в другом регионе, отличном от рабочей области. Это фактически приводит к недоступности проверки подлинности на основе маркеров до тех пор, пока регион вашей рабочей области не будет доступен снова. Кроме того, чем больше расстояние между регионом кластера и регионом рабочей области, тем больше времени требуется для получения маркера.

Чтобы получить маркер, необходимо использовать пакет SDK для Машинного обучения Azure или команду az ml service get-access-token.

Сканер уязвимостей

Защитник Майкрософт для облака предоставляет единое управление безопасностью и расширенную защиту от угроз в гибридных облачных рабочих нагрузках. Вы должны разрешить решению Microsoft Defender для облака проверять ваши ресурсы и следовать его рекомендациям. Дополнительные сведения см. в разделе "Безопасность контейнеров" в Microsoft Defender для контейнеров.