Развертывание модели в кластере Службы Azure Kubernetes с помощью версии 1
Внимание
В этой статье объясняется, как использовать интерфейс командной строки Машинное обучение Azure (версии 1) и пакет SDK Машинное обучение Azure для Python (версии 1) для развертывания модели. Рекомендуемый подход для версии 2 см. в статье Развертывание и оценка модели машинного обучения с помощью сетевой конечной точки.
Узнайте, как использовать Машинное обучение Azure для развертывания модели в качестве веб-службы в Службе Azure Kubernetes (AKS). AKS подходит для крупномасштабных рабочих развертываний. Используйте AKS, если вам нужна одна или несколько следующих возможностей:
- быстрое время отклика;
- автомасштабирование развернутой службы;
- Ведение журнала
- Сбор данных модели
- Аутентификация
- завершение сеанса TLS;
- такие параметры аппаратного ускорения, как GPU и программируемые пользователем вентильные матрицы (ППВМ).
При развертывании в AKS развертывается в кластере AKS, подключенном к рабочей области. Сведения о подключении кластера AKS к рабочей области см. в разделе Создание и подключение кластера Службы Azure Kubernetes.
Внимание
Рекомендуется выполнить отладку локально перед развертыванием в веб-службе. Дополнительные сведения см. в разделе "Устранение неполадок с развертыванием локальной модели".
Примечание.
Машинное обучение Azure Конечные точки (версия 2) обеспечивают улучшенный и простой интерфейс развертывания. Они поддерживают сценарии развертывания как в режиме реального времени, так и при использовании пакетного вывода. Конечные точки служат единым интерфейсом для вызова развертывания моделей и управления ими в вычислительных ресурсах разных типов. См. раздел "Что такое конечные точки Машинное обучение Azure?".
Необходимые компоненты
Рабочая область Машинного обучения Azure. Дополнительные сведения см. в разделе Создание рабочей области Машинного обучения Azure.
Модель машинного обучения, зарегистрированная в вашей рабочей области. Если у вас нет зарегистрированной модели, см. статью "Развертывание моделей машинного обучения в Azure".
Расширение Azure CLI (v1) для службы машинного обучения Azure, пакет SDK службы машинного обучения Azure для Python или расширение Visual Studio Code для службы машинного обучения Azure.
Внимание
Для использования некоторых команд Azure CLI, приведенных в этой статье, используйте расширение
azure-cli-ml
(версия 1) для Машинного обучения Azure. Поддержка расширения версии 1 будет прекращена 30 сентября 2025 г. Вы можете установить и использовать расширение версии 1 до этой даты.Рекомендуется перейти на расширение
ml
(версия 2) до 30 сентября 2025 г. Дополнительные сведения о расширении версии 2 см. на странице расширения CLI для Azure ML и пакета SDK для Python версии 2.В фрагментах кода Python в этой статье предполагается, что установлены следующие переменные:
ws
— присвоено вашей рабочей области;model
— присвоено вашей зарегистрированной модели;inference_config
— присвоено конфигурации вывода для модели.
Дополнительные сведения об установке этих переменных см. в разделе Как и где развертываются модели.
Фрагменты интерфейса командной строки в этой статье предполагают, что вы уже создали документ inferenceconfig.json . Дополнительные сведения о создании этого документа см. в статье "Развертывание моделей машинного обучения в Azure".
Кластер AKS, подключенный к рабочей области. Дополнительные сведения см. в разделе Создание и подключение кластера Службы Azure Kubernetes.
- Если вы хотите развернуть модели на узлах GPU или узлах FPGA (или любом конкретном продукте), необходимо создать кластер с определенным продуктом. Создание пула вторичных узлов в существующем кластере и развертывание моделей в пуле вторичных узлов не поддерживаются.
Общие сведения о процессах развертывания
Развертывание слов используется как в Kubernetes, так и в Машинное обучение Azure. Развертывание имеет разные значения в этих двух контекстах. В Kubernetes развертывание представляет собой конкретную сущность, указанную с декларативным файлом YAML. Развертывание Kubernetes имеет определенный жизненный цикл и конкретные связи с другими сущностями Kubernetes, такими как Pods
и ReplicaSets
. Вы можете узнать о Kubernetes из документации и видеороликов по ссылке Что такое Kubernetes?.
В Машинное обучение Azure развертывание используется в более общем смысле использования и очистки ресурсов проекта. Следующие этапы Машинное обучение Azure считает частью развертывания.
- упаковка файлов в папку проекта с игнорированием тех, которые указаны в файле с расширением .amlignore или .gitignore;
- Масштабирование вычислительного кластера (относится к Kubernetes)
- Создание или скачивание dockerfile на вычислительный узел (относится к Kubernetes)
- Система вычисляет хэш:
- базового образа;
- пользовательских шагов Docker (см. раздел Развертывание модели с помощью пользовательского базового образа Docker);
- YAML определения Conda (см. Создание и использование программных сред в Машинном обучении Azure).
- Система использует этот хэш в качестве ключа при поиске в Реестре контейнеров Azure (ACR) рабочей области.
- Если он не найден, он ищет совпадение в глобальном ACR
- Если он не найден, система создает новый образ, кэшированный и отправленный в рабочую область ACR
- Система вычисляет хэш:
- Загрузка упакованного файла проекта во временное хранилище в вычислительном узле.
- Распаковка файла проекта.
- Выполнение
python <entry script> <arguments>
вычислительным узлом. - Сохранение журналов, файлов модели и других файлов, записанных в ./outputs в учетную запись хранения, связанную с рабочей областью
- Масштабирование вычислительных ресурсов, включая удаление временного хранилища (относится к Kubernetes)
маршрутизатор Машинное обучение Azure
Интерфейсный компонент (azureml-fe), который направляет входящие запросы вывода в развернутые службы, автоматически масштабируется по мере необходимости. Масштабирование azureml-fe зависит от назначения и размера кластера AKS (числа узлов). Назначение и узлы кластера настраиваются при создании или подключении кластера AKS. Существует одна служба azureml-fe для каждого кластера, которая может работать на нескольких модулях pod.
Внимание
- При использовании кластера, настроенного как
dev-test
, самомасштабирование отключено. Даже для кластеров FastProd/DenseProd, автоматическое масштабирование включается, только когда телеметрии показывает, что оно требуется. - Машинное обучение Azure не автоматически отправляет журналы из контейнеров, включая системные контейнеры. Для комплексной отладки рекомендуется включить Аналитику контейнеров для кластера AKS. Это позволяет сохранять журналы контейнеров, управлять ими в команде AML по мере необходимости. Без этого AML не может гарантировать поддержку проблем, связанных с azureml-fe.
- Максимальная полезные данные запроса составляет 100 МБ.
Azureml-fe масштабируется как вертикально, чтобы использовать больше ядер, так и горизонтально, чтобы использовать больше pod. При принятии решения о вертикальном увеличении масштаба используется время, необходимое для маршрутизации входящих запросов вывода. Если это время превышает пороговое значение, происходит вертикальное масштабирование. Если время для маршрутизации входящих запросов по-прежнему превышает пороговое значение, происходит горизонтальное масштабирование.
При уменьшении масштаба используется потребление ресурсов ЦП. Если порог использования ЦП выполнен, внешний интерфейс сначала масштабируется. Если загрузка ЦП падает до порогового значения горизонтального масштабирования, выполняется операция горизонтального снижения масштаба. Масштабирование происходит только в том случае, если доступны достаточно ресурсов кластера.
При масштабировании или уменьшении масштаба модули pod azureml-fe перезагружаются, чтобы применить изменения ЦП или памяти. Перезапуски не влияют на запросы вывода.
Общие сведения о требованиях к подключению для кластера вывода AKS
При Машинное обучение Azure создает или присоединяет кластер AKS, кластер AKS развертывается с помощью одной из следующих двух сетевых моделей:
- Сеть Kubenet: сетевые ресурсы обычно создаются и настраиваются в качестве кластера AKS.
- Сеть сетевых интерфейсов контейнеров Azure (CNI): кластер AKS подключен к существующему ресурсу и конфигурациям виртуальной сети.
При использовании сетей Kubenet система правильно создает и настраивает сеть для Службы машинного обучения Azure. При использовании сетей CNI необходимо понимать требования к подключениям, а также обеспечить разрешение DNS и исходящее подключение для функции создания выводов AKS. Например, можно использовать брандмауэр для блокировки сетевого трафика.
На приведенной ниже схеме показаны все требования к подключениям функции создания выводов AKS. Черные стрелки представляют фактический обмен данными, а синие — доменные имена. Возможно, потребуется добавить записи для этих узлов в брандмауэр или на пользовательский DNS-сервер.
Общие требования к подключению 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 версии 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 версии 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 для контейнеров.
Связанный контент
- Использование управления доступом на основе ролей Azure для авторизации Kubernetes
- Обеспечение безопасности среды вывода службы "Машинное обучение Azure" с помощью виртуальных сетей
- Использование пользовательского контейнера для развертывания модели в сетевой конечной точке
- Устранение неполадок при развертывании удаленной модели
- Обновление развернутой веб-службы
- Использование TLS для защиты веб-службы с помощью Машинного обучения Azure.
- Использование модели Машинного обучения Azure, развернутой в качестве веб-службы
- Мониторинг и сбор данных из конечных точек веб-службы Машинного обучения
- Сбор данных из моделей в рабочей среде