В этой статье вы узнаете, как развернуть модель в онлайн-конечной точке для использования в режиме реального времени вывода. Начните с развертывания модели на локальном компьютере для отладки любых ошибок. Затем вы развертываете и тестируете модель в Azure, просматриваете журналы развертывания и отслеживаете соглашение об уровне обслуживания (SLA). К концу этой статьи у вас будет масштабируемая конечная точка HTTPS/REST, которую можно использовать для вывода в режиме реального времени.
Сетевые конечные точки — это конечные точки, используемые для вывода в режиме реального времени. Существует два типа сетевых конечных точек: управляемые и Kubernetes. Дополнительные сведения о конечных точках и различиях между управляемыми сетевыми конечными точками и сетевыми конечными точками Kubernetes см. в статье "Что такое Машинное обучение Azure конечные точки?
Управляемые подключенные конечные точки помогают развертывать модели машинного обучения в комплексном режиме. Управляемые сетевые конечные точки работают с мощными машинами ЦП и GPU в Azure масштабируемым и полностью управляемым образом. Управляемые сетевые конечные точки отвечают за обслуживание, масштабирование, безопасность и мониторинг моделей, избавляя вас от накладных расходов на настройку и управление базовой инфраструктурой.
В основном примере в этом документе для развертывания используются управляемые сетевые конечные точки. Чтобы использовать Kubernetes, ознакомьтесь с заметками в этом документе, которые соответствуют обсуждению управляемой сетевой конечной точки.
В примерах CLI в этой статье предполагается, что вы используете оболочку Bash (или совместимый вариант). Например, из системы Linux или подсистемы Windows для Linux.
Управление доступом на основе ролей Azure (Azure RBAC) используется для предоставления доступа к операциям в Машинном обучении Azure. Чтобы выполнить действия, описанные в этой статье, учетной записи пользователя должна быть назначена роль владельца или участника для рабочей области Машинного обучения Azure либо пользовательская роль с разрешением Microsoft.MachineLearningServices/workspaces/onlineEndpoints/*. Если вы используете студию для создания и управления сетевыми конечными точками и развертываниями, вам потребуется дополнительное разрешение "Microsoft.Resources/deployments/write" от владельца группы ресурсов. Дополнительные сведения см. в статье Управление доступом к рабочей области Машинного обучения Azure.
(Необязательно) Для локального развертывания необходимо установить подсистему Docker на локальном компьютере. Настоятельно рекомендуем использовать этот вариант, чтобы упростить отладку.
Управление доступом на основе ролей Azure (Azure RBAC) используется для предоставления доступа к операциям в Машинном обучении Azure. Чтобы выполнить действия, описанные в этой статье, учетной записи пользователя должна быть назначена роль владельца или участника для рабочей области Машинного обучения Azure либо пользовательская роль с разрешением Microsoft.MachineLearningServices/workspaces/onlineEndpoints/*. Дополнительные сведения см. в статье Управление доступом к рабочей области Машинного обучения Azure.
(Необязательно) Для локального развертывания необходимо установить подсистему Docker на локальном компьютере. Настоятельно рекомендуем использовать этот вариант, чтобы упростить отладку.
Перед выполнением действий, описанных в этой статье, убедитесь, что выполнены следующие необходимые условия:
Рабочая область Машинное обучение Azure и вычислительный экземпляр. Если у вас нет этих ресурсов и вы хотите их создать, выполните действия, описанные в кратком руководстве. Создание ресурсов рабочей области.
Управление доступом на основе ролей Azure (Azure RBAC) используется для предоставления доступа к операциям в Машинном обучении Azure. Чтобы выполнить действия, описанные в этой статье, учетной записи пользователя должна быть назначена роль владельца или участника для рабочей области Машинного обучения Azure либо пользовательская роль с разрешением Microsoft.MachineLearningServices/workspaces/onlineEndpoints/*. Дополнительные сведения см. в статье Управление доступом к рабочей области Машинного обучения Azure.
Примечание.
Хотя расширение Azure CLI и CLI для машинного обучения используется в этих шагах, они не являются основным фокусом. они используются больше в качестве служебных программ, передают шаблоны в Azure и проверяют состояние развертываний шаблонов.
Перед выполнением действий, описанных в этой статье, убедитесь, что выполнены следующие необходимые условия:
В примерах CLI в этой статье предполагается, что вы используете оболочку Bash (или совместимый вариант). Например, из системы Linux или подсистемы Windows для Linux.
Управление доступом на основе ролей Azure (Azure RBAC) используется для предоставления доступа к операциям в Машинном обучении Azure. Чтобы выполнить действия, описанные в этой статье, учетной записи пользователя должна быть назначена роль владельца или участника для рабочей области Машинного обучения Azure либо пользовательская роль с разрешением Microsoft.MachineLearningServices/workspaces/onlineEndpoints/*. Дополнительные сведения см. в статье Управление доступом к рабочей области Машинного обучения Azure.
Убедитесь, что для развертывания достаточно квоты виртуальной машины. Машинное обучение Azure резервирует 20% вычислительных ресурсов для выполнения обновлений на некоторых номерах SKU виртуальных машин. Например, если вы запрашиваете 10 экземпляров в развертывании, необходимо иметь квоту на 12 для каждого числа ядер для SKU виртуальной машины. Ошибка при учете дополнительных вычислительных ресурсов приводит к ошибке. Существуют некоторые номера SKU виртуальных машин, исключенные из дополнительного резервирования квот. Дополнительные сведения о выделении квот см. в статье о выделении квот виртуальной машины для развертывания.
Кроме того, можно использовать квоту из общего пула квот Машинное обучение Azure в течение ограниченного времени. Машинное обучение Azure предоставляет общий пул квот, из которого пользователи в различных регионах могут получить доступ к квоте для выполнения тестирования в течение ограниченного времени в зависимости от доступности.
При использовании студии для развертывания моделей Llama-2, Phi, Nemotron, Mistral, Dolly и DeciLM моделей из каталога моделей в управляемую конечную точку в сети Машинное обучение Azure позволяет получить доступ к общему пулу квот в течение короткого времени, чтобы вы могли выполнять тестирование. Дополнительные сведения о общем пуле квот см. в разделе Машинное обучение Azure общей квоты.
Если вы еще не задали параметры по умолчанию для Azure CLI, сохраните их. Чтобы не указывать параметры для подписки, рабочей области и группы ресурсов несколько раз, используйте следующий код:
az account set --subscription <subscription ID>
az configure --defaults workspace=<Azure Machine Learning workspace name> group=<resource group>
Клонирование репозитория примеров
Чтобы следовать этой статье, сначала клонируйте репозиторий примеров (azureml-examples). Затем запустите следующий код, чтобы перейти в каталог репозитория cli/ :
git clone --depth 1 https://github.com/Azure/azureml-examples
cd azureml-examples
cd cli
Совет
При использовании параметра --depth 1 клонируется только последняя фиксация, что сокращает время выполнения операции.
Команды, приведенные в этом руководстве, находятся в файлах deploy-local-endpoint.sh и deploy-managed-online-endpoint.shcli каталоге, а файлы конфигурации YAML находятся в подкаталоге endpoints/online/managed/sample/ .
Примечание.
Файлы конфигурации YAML для конечных точек Kubernetes в сети находятся в подкаталоге endpoints/online/kubernetes/ .
Клонирование репозитория примеров
Чтобы запустить примеры обучения, сначала клонируйте репозиторий примеров (azureml-examples) и измените его в azureml-examples/sdk/python/endpoints/online/managed каталог:
git clone --depth 1 https://github.com/Azure/azureml-examples
cd azureml-examples/sdk/python/endpoints/online/managed
Совет
При использовании параметра --depth 1 клонируется только последняя фиксация, что сокращает время выполнения операции.
Подключение к рабочей области Машинного обучения Azure
Рабочая область — это ресурс верхнего уровня для Машинного обучения Azure, который обеспечивает централизованное расположение для работы со всеми артефактами, созданными в Машинном обучении Azure. В этом разделе описано, как подключиться к рабочей области, в которой будут выполняться задачи развертывания. Чтобы продолжить, откройте online-endpoints-simple-deployment.ipynb записную книжку.
Импортируйте необходимые библиотеки:
# import required libraries
from azure.ai.ml import MLClient
from azure.ai.ml.entities import (
ManagedOnlineEndpoint,
ManagedOnlineDeployment,
Model,
Environment,
CodeConfiguration,
)
from azure.identity import DefaultAzureCredential
Примечание.
Если вы используете конечную точку Kubernetes online, импортируйте KubernetesOnlineEndpoint и KubernetesOnlineDeployment класс из библиотеки azure.ai.ml.entities .
Настройте сведения о рабочей области и получите дескриптор для рабочей области:
Чтобы подключиться к рабочей области, вам нужны параметры идентификатора — подписка, группа ресурсов и имя рабочей области. Эти сведения используются для MLClientazure.ai.ml получения дескриптора необходимой рабочей области Машинное обучение Azure. В этом примере используется проверка подлинности Azure по умолчанию.
# enter details of your Azure Machine Learning workspace
subscription_id = "<SUBSCRIPTION_ID>"
resource_group = "<RESOURCE_GROUP>"
workspace = "<AZUREML_WORKSPACE_NAME>"
# get a handle to the workspace
ml_client = MLClient(
DefaultAzureCredential(), subscription_id, resource_group, workspace
)
Если на локальном компьютере установлен Git, следуйте инструкциям, чтобы клонировать репозиторий примеров. В противном случае следуйте инструкциям по скачиванию файлов из репозитория примеров.
Клонирование репозитория примеров
Для выполнения этой статьи сначала клонируйте репозиторий примеров (azureml-examples), а затем перейдите azureml-examples/cli/endpoints/online/model-1 в каталог.
git clone --depth 1 https://github.com/Azure/azureml-examples
cd azureml-examples/cli/endpoints/online/model-1
Совет
При использовании параметра --depth 1 клонируется только последняя фиксация, что сокращает время выполнения операции.
Скачивание файлов из репозитория примеров
Если вы клонировали репозиторий примеров, локальный компьютер уже имеет копии файлов для этого примера, и вы можете перейти к следующему разделу. Если вы не клонируйте репозиторий, его можно скачать на локальный компьютер.
Перейдите к кнопке "Код" на странице и выберите "Скачать ZIP" на вкладке "Локальный".<>
Найдите папку /cli/endpoints/online/model-1/model и файл /cli/endpoints/online/model-1/onlinescoring/score.py.
Настройка переменных среды
Задайте следующие переменные среды, так как они используются в примерах в этой статье. Замените значения идентификатором подписки Azure, регионом Azure, где находится ваша рабочая область, группа ресурсов, содержащая рабочую область, и имя рабочей области:
export SUBSCRIPTION_ID="your Azure subscription ID"
export LOCATION="Azure region where your workspace is located"
export RESOURCE_GROUP="Azure resource group that contains your workspace"
export WORKSPACE="Azure Machine Learning workspace name"
Несколько примеров шаблонов требуют отправки файлов в хранилище BLOB-объектов Azure для рабочей области. Следующие действия запрашивают рабочую область и хранят эти сведения в переменных среды, используемых в примерах:
git clone --depth 1 https://github.com/Azure/azureml-examples
cd azureml-examples
Совет
При использовании параметра --depth 1 клонируется только последняя фиксация, что сокращает время выполнения операции.
Определение конечной точки
Чтобы определить конечную точку в Сети, укажите имя конечной точки и режим проверки подлинности. Дополнительные сведения об управляемых сетевых конечных точках см. в статье "Сетевые конечные точки".
Чтобы задать имя конечной точки, выполните следующую команду. Замените YOUR_ENDPOINT_NAME на имя, уникальное в регионе Azure. Дополнительные сведения о правилах именования см. в разделе "Ограничения конечной точки".
Для Linux выполните следующую команду:
export ENDPOINT_NAME="<YOUR_ENDPOINT_NAME>"
Настройка конечной точки
В следующем фрагменте кода показан файл endpoints/online/managed/sample/endpoint.yml:
Справка по формату YAML конечной точки представлена в приведенной ниже таблице. Чтобы узнать, как указать эти атрибуты, ознакомьтесь со ссылкой на YAML для веб-конечной точки. Сведения об ограничениях, связанных с управляемыми конечными точками, см. в разделе об ограничениях для сетевых конечных точек.
Ключ.
Description
$schema
(Необязательно) Схема YAML. Чтобы просмотреть все доступные параметры в ФАЙЛЕ YAML, можно просмотреть схему в предыдущем фрагменте кода в браузере.
name
Имя конечной точки.
auth_mode
Используйте key для аутентификации на основе ключей. Используйте aml_token для проверки подлинности в службе "Машинное обучение Azure" на основе маркеров. Используется aad_token для проверки подлинности на основе маркеров Microsoft Entra (предварительная версия). Дополнительные сведения о проверке подлинности см. в статье "Проверка подлинности клиентов для сетевых конечных точек".
Настройка конечной точки
Сначала определите имя сетевой конечной точки, а затем настройте конечную точку.
Имя конечной точки должно быть уникальным в регионе Azure. Дополнительные сведения о правилах именования см. в разделе "Ограничения конечной точки".
# Define an endpoint name
endpoint_name = "my-endpoint"
# Example way to define a random name
import datetime
endpoint_name = "endpt-" + datetime.datetime.now().strftime("%m%d%H%M%f")
# create an online endpoint
endpoint = ManagedOnlineEndpoint(
name = endpoint_name,
description="this is a sample endpoint",
auth_mode="key"
)
Предыдущий код используется key для проверки подлинности на основе ключей. Чтобы использовать проверку подлинности на основе маркеров, используйте Машинное обучение Azureaml_token. Чтобы использовать проверку подлинности на основе маркеров Microsoft Entra (предварительная версия), используйте aad_token. Дополнительные сведения о проверке подлинности см. в статье "Проверка подлинности клиентов для сетевых конечных точек".
Настройка конечной точки
При развертывании в Azure из студии вы создадите конечную точку и развертывание для его добавления. В то время вам будет предложено указать имена конечной точки и развертывания.
Задание имени конечной точки
Чтобы задать имя конечной точки, выполните следующую команду. Замените YOUR_ENDPOINT_NAME на имя, уникальное в регионе Azure. Дополнительные сведения о правилах именования см. в разделе "Ограничения конечной точки".
Развертывание представляет собой набор ресурсов, необходимых для размещения модели, которая выполняет процесс вывода. В этом примере вы развертываете модель scikit-learn, которая выполняет регрессию и использует скрипт оценки score.py для выполнения модели при заданном входном запросе.
Дополнительные сведения о ключевых атрибутах развертывания см. в разделе "Сетевые развертывания".
Настройка развертывания
Конфигурация развертывания использует расположение модели, которую вы хотите развернуть.
В следующем фрагменте кода показаны конечные точки,online/managed/sample/blue-deployment.yml-файл со всеми необходимыми входными данными для настройки развертывания:
Файл blue-deployment.yml указывает следующие атрибуты развертывания:
model — задает встроенные свойства модели, используя path (где отправлять файлы из). Интерфейс командной строки автоматически отправляет файлы модели и регистрирует модель с автоматически созданным именем.
environment — использование встроенных определений, которые включают в себя отправку файлов из, интерфейс командной строки автоматически отправляет conda.yaml файл и регистрирует среду. Позже для сборки среды развертывание использует image (в этом примере) mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latestбазовый образ, а conda_file зависимости устанавливаются на основе базового образа.
code_configuration — во время развертывания локальные файлы, такие как источник Python для модели оценки, отправляются из среды разработки.
Чтобы использовать конечные точки Kubernetes вместо управляемых сетевых конечных точек в качестве целевого объекта вычислений:
Создайте и присоедините кластер Kubernetes в качестве целевого объекта вычислений к рабочей области Машинного обучения Azure с помощью студии машинного обучения Azure.
Используйте YAML конечной точки для целевого объекта Kubernetes, а не управляемой конечной точки YAML. Чтобы изменить значение compute зарегистрированного целевого объекта вычислений, необходимо изменить YAML. Вы можете использовать этот deployment.yaml с дополнительными свойствами, применимыми к развертыванию Kubernetes.
Все команды, используемые в этой статье для управляемых сетевых конечных точек, также применяются к конечным точкам Kubernetes, за исключением следующих возможностей, которые не применяются к конечным точкам Kubernetes:
Model — задает встроенные свойства модели, используя path (где отправлять файлы из). Пакет SDK автоматически отправляет файлы модели и регистрирует модель с автоматически созданным именем.
Environment — использование встроенных определений, которые включают в себя отправку файлов, пакет SDK автоматически отправляет conda.yaml файл и регистрирует среду. Позже для сборки среды развертывание использует image (в этом примере) mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latestбазовый образ, а conda_file зависимости устанавливаются на основе базового образа.
CodeConfiguration — во время развертывания локальные файлы, такие как источник Python для модели оценки, отправляются из среды разработки.
Дополнительные сведения об определении развертывания в Интернете см . в классе OnlineDeployment.
Настройка развертывания
При развертывании в Azure вы создадите конечную точку и развертывание для его добавления. В то время вам будет предложено указать имена конечной точки и развертывания.
Скрипт оценки, указанный init() вcode_configuration.scoring_script, должен иметь функцию и run() функцию.
Скрипт оценки должен иметь init() функцию и run() функцию.
Скрипт оценки должен иметь init() функцию и run() функцию.
Скрипт оценки должен иметь init() функцию и run() функцию. В этой статье используется файл score.py.
При использовании шаблона для развертывания необходимо сначала отправить файлы оценки в хранилище BLOB-объектов Azure, а затем зарегистрировать его:
Следующий код использует команду az storage blob upload-batch Azure CLI для отправки файлов оценки:
az storage blob upload-batch -d $AZUREML_DEFAULT_CONTAINER/score -s cli/endpoints/online/model-1/onlinescoring --account-name $AZURE_STORAGE_ACCOUNT
Следующий код регистрирует код с помощью шаблона:
az deployment group create -g $RESOURCE_GROUP \
--template-file arm-templates/code-version.json \
--parameters \
workspaceName=$WORKSPACE \
codeAssetName="score-sklearn" \
codeUri="https://$AZURE_STORAGE_ACCOUNT.blob.core.windows.net/$AZUREML_DEFAULT_CONTAINER/score"
В этом примере используется файл score.py: score.py
import os
import logging
import json
import numpy
import joblib
def init():
"""
This function is called when the container is initialized/started, typically after create/update of the deployment.
You can write the logic here to perform init operations like caching the model in memory
"""
global model
# AZUREML_MODEL_DIR is an environment variable created during deployment.
# It is the path to the model folder (./azureml-models/$MODEL_NAME/$VERSION)
# Please provide your model's folder name if there is one
model_path = os.path.join(
os.getenv("AZUREML_MODEL_DIR"), "model/sklearn_regression_model.pkl"
)
# deserialize the model file back into a sklearn model
model = joblib.load(model_path)
logging.info("Init complete")
def run(raw_data):
"""
This function is called for every invocation of the endpoint to perform the actual scoring/prediction.
In the example we extract the data from the json input and call the scikit-learn model's predict()
method and return the result back
"""
logging.info("model 1: request received")
data = json.loads(raw_data)["data"]
data = numpy.array(data)
result = model.predict(data)
logging.info("Request processed")
return result.tolist()
Функция init() вызывается при инициализации или запуске контейнера. Инициализация обычно происходит вскоре после создания или обновления развертывания. Функция init — это место для записи логики для глобальных операций инициализации, таких как кэширование модели в памяти (как показано в этом score.py файле).
Функция run() вызывается каждый раз при вызове конечной точки, и она выполняет фактическую оценку и прогнозирование. В этом score.py файле run() функция извлекает данные из входных данных JSON, вызывает метод модели predict() scikit-learn, а затем возвращает результат прогнозирования.
Развертывание и отладка локально с помощью локальной конечной точки
Настоятельно рекомендуется локально запустить конечную точку для проверки и отладки кода и конфигурации перед развертыванием в Azure. Пакет SDK Azure CLI и Python поддерживают локальные конечные точки и развертывания, а шаблон Студия машинного обучения Azure и ARM не поддерживаются.
Вы можете использовать пакет Python http-сервера Машинное обучение Azure для отладки скрипта оценки локально без подсистемы Docker. Отладка с помощью сервера вывода помогает выполнить отладку скрипта оценки перед развертыванием на локальных конечных точках, чтобы можно было выполнять отладку без влияния на конфигурации контейнеров развертывания.
Дополнительные сведения об отладке сетевых конечных точек локально перед развертыванием в Azure см. в статье "Отладка конечных точек Online".
Локальное развертывание модели
Сначала создайте конечную точку. При необходимости для локальной конечной точки можно пропустить этот шаг и непосредственно создать развертывание (следующий шаг), которое, в свою очередь, создаст необходимые метаданные. Развертывание моделей локально полезно для разработки и тестирования.
Вызовите конечную точку для оценки модели с помощью invoke команды и передачи параметров запроса, хранящихся в JSON-файле:
az ml online-endpoint invoke --local --name $ENDPOINT_NAME --request-file endpoints/online/model-1/sample-request.json
Если вы хотите использовать клиент REST (например, curl), вам потребуется URI оценки. Чтобы получить URI оценки, используйте команду az ml online-endpoint show --local -n $ENDPOINT_NAME. Найдите атрибут scoring_uri в возвращенных данных.
Вызовите конечную точку для оценки модели с помощью invoke команды и передачи параметров запроса, хранящихся в JSON-файле.
Если вы хотите использовать клиент REST (например, curl), вам потребуется URI оценки. Чтобы получить URI оценки, выполните следующий код. Найдите атрибут scoring_uri в возвращенных данных.
Студия не поддерживает локальные конечные точки. Чтобы проверить конечную точку локально, см. вкладки Azure CLI или Python.
Шаблон не поддерживает локальные конечные точки. Чтобы проверить конечную точку локально, см. вкладки Azure CLI или Python.
Развертывание сетевой конечной точки в Azure
Теперь следует развернуть сетевую конечную точку в Azure. Рекомендуется зарегистрировать модель и среду, которую вы будете использовать в развертывании.
Регистрация модели и среды
Рекомендуется зарегистрировать модель и среду перед развертыванием в Azure, чтобы можно было указать зарегистрированные имена и версии во время развертывания. Регистрация ресурсов позволяет повторно использовать их без необходимости отправлять их каждый раз при создании развертываний, тем самым повышая воспроизводимость и возможность трассировки.
Примечание.
В отличие от развертывания в Azure, локальное развертывание не поддерживает использование зарегистрированных моделей и сред. Скорее, локальное развертывание использует локальные файлы модели и использует среды только с локальными файлами.
Для развертывания в Azure можно использовать локальные или зарегистрированные ресурсы (модели и среды). В этом разделе статьи развертывание в Azure использует зарегистрированные ресурсы, но вы можете использовать локальные ресурсы. Пример конфигурации развертывания, которая отправляет локальные файлы для локального развертывания, см. в разделе "Настройка развертывания".
Чтобы зарегистрировать модель и среду, используйте форму model: azureml:my-model:1 или environment: azureml:my-env:1.
Для регистрации вы можете извлечь определения YAML model и environment в отдельные файлы YAML и использовать команды az ml model create и az ml environment create. Чтобы узнать больше об этих командах, выполните команду az ml model create -h и az ml environment create -h.
from azure.ai.ml.entities import Model
from azure.ai.ml.constants import AssetTypes
file_model = Model(
path="../../model-1/model/",
type=AssetTypes.CUSTOM_MODEL,
name="my-model",
description="Model created from local file.",
)
ml_client.models.create_or_update(file_model)
Зарегистрируйте среду:
from azure.ai.ml.entities import Environment
env_docker_conda = Environment(
image="mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04",
conda_file="../../model-1/environment/conda.yaml",
name="my-env",
description="Environment created from a Docker image plus Conda environment.",
)
ml_client.environments.create_or_update(env_docker_conda)
Регистрация модели — это логическая сущность в рабочей области, которая может содержать один файл модели или каталог нескольких файлов. Рекомендуется зарегистрировать модель и среду в рабочей среде. Перед созданием конечной точки и развертывания в этой статье необходимо зарегистрировать папку модели, содержащую модель.
Чтобы зарегистрировать пример модели, выполните следующие действия.
Перейдите на вкладку Модели на панели навигации слева.
Выберите " Регистрация" и выберите " Из локальных файлов".
Выберите неуказанный тип для типа модели.
Нажмите кнопку "Обзор" и выберите "Обзор папки".
\azureml-examples\cli\endpoints\online\model-1\model Выберите папку из локальной копии репозитория, клонированного или скачаемого ранее. При появлении запроса нажмите кнопку "Отправить " и подождите завершения отправки.
Нажмите кнопку "Далее" после завершения отправки папки.
Введите понятное Имя модели. Действия, описанные в этой статье, предполагают, что модель называется model-1.
Нажмите Далее, а затем Зарегистрировать для завершения регистрации.
На панели навигации слева выберите страницу "Среды ".
Нажмите кнопку создания.
На странице "Параметры" укажите имя, например my-env для среды.
В поле "Выбор источника среды" выберите "Использовать существующий образ Docker с необязательным источником conda".
Нажмите кнопку "Далее ", чтобы перейти на страницу "Настройка".
Скопируйте содержимое \azureml-examples\cli\endpoints\online\model-1\environment\conda.yaml файла из локальной копии репозитория, клонированного или скачаного ранее.
Вставьте содержимое в текстовое поле.
Нажмите кнопку "Далее", пока не получите страницу "Рецензирование".
Теперь щелкните Создать.
Дополнительные сведения о создании среды в студии см. в статье "Создание среды".
Чтобы зарегистрировать модель с помощью шаблона, необходимо сначала отправить файл модели в хранилище BLOB-объектов Azure. В следующем примере команда используется az storage blob upload-batch для отправки файла в хранилище по умолчанию для рабочей области:
az storage blob upload-batch -d $AZUREML_DEFAULT_CONTAINER/model -s cli/endpoints/online/model-1/model --account-name $AZURE_STORAGE_ACCOUNT
После отправки файла используйте шаблон для создания регистрации модели. В следующем примере modelUri параметр содержит путь к модели:
az deployment group create -g $RESOURCE_GROUP \
--template-file arm-templates/model-version.json \
--parameters \
workspaceName=$WORKSPACE \
modelAssetName="sklearn" \
modelUri="azureml://subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/workspaces/$WORKSPACE/datastores/$AZUREML_DEFAULT_DATASTORE/paths/model/sklearn_regression_model.pkl"
Часть среды — это файл conda, указывающий зависимости модели, необходимые для размещения модели. В следующем примере показано, как считывать содержимое файла conda в переменные среды:
В следующем примере показано, как использовать шаблон для регистрации среды. Содержимое файла conda из предыдущего шага передается в шаблон с помощью condaFile параметра:
Используйте зарегистрированные ресурсы (модель и среда) в определении развертывания. В следующем фрагменте кода показан endpoints/online/managed/sample/blue-deployment-with-registered-assets.yml файл со всеми необходимыми входными данными для настройки развертывания:
При развертывании из студии вы создадите конечную точку и развертывание для его добавления. В то время вам будет предложено указать имена конечной точки и развертывания.
Вы можете указать типы экземпляров ЦП или GPU в определении развертывания как для локального развертывания, так и для развертывания в Azure.
Определение развертывания в файле blue-deployment-with-registered-assets.yml использовал экземпляр типа Standard_DS3_v2 общего назначения и образ mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latestDocker, отличный от GPU. Для вычислений GPU выберите SKU типа вычислений GPU и образ Docker GPU.
Сведения об использовании Kubernetes вместо управляемых конечных точек в качестве целевого объекта вычислений см. в статье "Общие сведения о целевом объекте вычислений Kubernetes".
Вы можете указать типы экземпляров ЦП или GPU в конфигурации развертывания как для локального развертывания, так и для развертывания в Azure.
Ранее вы настроили развертывание, которое использовал экземпляр типа Standard_DS3_v2 общего назначения и образ mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latestDocker, отличный от GPU. Для вычислений GPU выберите SKU типа вычислений GPU и образ Docker GPU.
Сведения об использовании Kubernetes вместо управляемых конечных точек в качестве целевого объекта вычислений см. в статье "Общие сведения о целевом объекте вычислений Kubernetes".
При использовании студии для развертывания в Azure вам будет предложено указать свойства вычислений (тип экземпляра и число экземпляров) и среду для развертывания.
Предыдущая регистрация среды указывает образ mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04 docker, отличный от GPU, передав значение environment-version.json шаблону с помощью dockerImage параметра. Для вычислений GPU укажите значение для образа docker GPU для шаблона (с помощью dockerImage параметра) и укажите номер SKU online-endpoint-deployment.json вычислительного типа GPU для шаблона (с помощью skuName параметра).
az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml
Создайте развертывание с именем blue в конечной точке.
az ml online-deployment create --name blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment-with-registered-assets.yml --all-traffic
Создание развертывания может занять до 15 минут в зависимости от того, создается ли базовая среда или образ в первый раз. Последующие развертывания, использующие ту же среду, обрабатываются быстрее.
Совет
Если вы предпочитаете не блокировать консоль CLI, можно добавить флаг --no-wait в команду. Однако этот параметр остановит интерактивное отображение состояния развертывания.
Внимание
Флаг --all-traffic в коде az ml online-deployment create , который используется для создания развертывания, выделяет 100 % трафика конечной точки только что созданному синему развертыванию. Хотя это полезно для разработки и тестирования, для рабочей среды может потребоваться маршрутизировать трафик к новому развертыванию с помощью явной команды. Например, az ml online-endpoint update -n $ENDPOINT_NAME --traffic "blue=100".
Создание конечной точки:
endpoint Используя определенные ранее и MLClient созданные ранее, теперь можно создать конечную точку в рабочей области. Эта команда запускает создание конечной точки и возвращает ответ подтверждения во время создания конечной точки.
blue_deployment_with_registered_assets Используя определяемые ранее и MLClient созданные ранее экземпляры, теперь можно создать развертывание в рабочей области. Эта команда запускает создание развертывания и возвращает ответ подтверждения во время создания развертывания.
Если вы предпочитаете не блокировать консоль Python, можно добавить флаг no_wait=True в параметры. Однако этот параметр остановит интерактивное отображение состояния развертывания.
Создание управляемой сетевой конечной точки и развертывания
С помощью студии вы можете создать управляемую подключенную конечную точку прямо в браузере. При создании управляемой сетевой конечной точки в студии необходимо определить первоначальное развертывание. Создание пустой такой точки невозможно.
Одним из способов создания управляемой сетевой конечной точки в студии является страница "Модели ". Этот метод также предоставляет простой способ добавления модели в существующее управляемое сетевое развертывание. Чтобы развернуть модель с именем model-1 , зарегистрированную ранее в разделе "Регистрация модели и среды", выполните указанные ниже действия .
Перейдите на вкладку Модели на панели навигации слева.
Выберите модель с именем model-1 , проверив круг рядом с его именем.
Выберите "Развернуть>конечную точку в режиме реального времени".
Это действие открывает окно, в котором можно указать сведения о конечной точке.
Введите имя конечной точки, уникальное в регионе Azure. Дополнительные сведения о правилах именования см. в разделе "Ограничения конечной точки".
Сохраните выбор по умолчанию: управляемое для типа вычислений.
Сохраните выбор по умолчанию: проверка подлинности на основе ключей для типа проверки подлинности. Дополнительные сведения о проверке подлинности см. в статье "Проверка подлинности клиентов для сетевых конечных точек".
Нажмите кнопку "Далее", пока не получите на страницу "Развертывание". Здесь переключите Application Insights диагностика включено, чтобы вы могли просматривать графики действий конечной точки в студии позже и анализировать метрики и журналы с помощью Application Insights.
Нажмите кнопку "Далее ", чтобы перейти на страницу "Код + среда". Здесь выберите следующие параметры:
Выберите сценарий оценки для вывода: перейдите и выберите \azureml-examples\cli\endpoints\online\model-1\onlinescoring\score.py файл из репозитория, клонированного или скачаного ранее.
Выберите раздел среды : выберите настраиваемые среды и выберите среду my-env:1 , созданную ранее.
Нажмите Далее, принимая значения по умолчанию, пока не появится запрос о создании развертывания.
Просмотрите параметры развертывания и нажмите кнопку "Создать ".
Кроме того, можно создать управляемую конечную точку в сети на странице конечных точек в студии.
На панели навигации слева выберите Конечные точки.
Выберите + Создать.
Это действие открывает окно для выбора модели и указания сведений о конечной точке и развертывании. Введите параметры конечной точки и развертывания, как описано ранее, а затем создайте развертывание.
Используйте шаблон для создания веб-конечной точки:
Список всех конечных точек в рабочей области в формате таблицы с помощью list метода:
for endpoint in ml_client.online_endpoints.list():
print(endpoint.name)
Метод возвращает список (итератор) сущностей ManagedOnlineEndpoint .
Дополнительные сведения можно получить, указав дополнительные параметры. Например, выводит список конечных точек, таких как таблица:
print("Kind\tLocation\tName")
print("-------\t----------\t------------------------")
for endpoint in ml_client.online_endpoints.list():
print(f"{endpoint.kind}\t{endpoint.location}\t{endpoint.name}")
Просмотр управляемых сетевых конечных точек
Все управляемые сетевые конечные точки можно просмотреть на странице конечных точек. Перейдите на страницу сведений конечной точки, чтобы найти критически важные сведения, включая URI конечной точки, состояние, средства тестирования, мониторы действий, журналы развертывания и пример кода потребления:
На панели навигации слева выберите Конечные точки. Здесь можно просмотреть список всех конечных точек в рабочей области.
Необязательно: задайте фильтр для типа вычислительного ресурса, чтобы отобразить только управляемые вычислительные ресурсы.
Выберите имя конечной точки, чтобы просмотреть страницу сведений о конечной точке.
Совет
Хотя шаблоны полезны для развертывания ресурсов, их нельзя использовать для перечисления, отображения или вызова ресурсов. Используйте Azure CLI, пакет SDK для Python или студию для выполнения этих операций. В следующем коде используется Azure CLI.
show Используйте команду для отображения сведений в provisioning_state конечной точке и развертывании:
az ml online-endpoint show -n $ENDPOINT_NAME
Вывод списка всех конечных точек в рабочей области в формате таблицы с помощью list команды:
az ml online-endpoint list --output table
Проверка состояния развертывания в сети
Проверьте журналы, чтобы узнать, была ли модель развернута без ошибок.
Чтобы просмотреть выходные данные журнала из контейнера, используйте следующую команду CLI:
az ml online-deployment get-logs --name blue --endpoint $ENDPOINT_NAME
По умолчанию журналы извлекаются из контейнера сервера вывода. Чтобы просмотреть журналы из контейнера инициализатора хранилища, добавьте --container storage-initializer флаг. Дополнительные сведения о журналах развертывания см. в разделе "Получение журналов контейнеров".
Выходные get_logs данные журнала можно просмотреть с помощью метода:
По умолчанию журналы извлекаются из контейнера сервера вывода. Чтобы просмотреть журналы из контейнера инициализатора хранилища, добавьте container_type="storage-initializer" этот параметр. Дополнительные сведения о журналах развертывания см. в разделе "Получение журналов контейнеров".
Чтобы просмотреть выходные данные журнала, выберите вкладку "Журналы" на странице конечной точки. Если у вас несколько развертываний в конечной точке, используйте раскрывающийся список, чтобы выбрать развертывание, журнал которого вы хотите просмотреть.
По умолчанию журналы извлекаются с сервера вывода. Чтобы просмотреть журналы из контейнера инициализатора хранилища, используйте Azure CLI или пакет SDK для Python (см. каждую вкладку для получения сведений). Журналы из контейнера инициализатора хранилища содержат сведения о том, были ли успешно скачаны данные кода и модели в контейнер. Дополнительные сведения о журналах развертывания см. в разделе "Получение журналов контейнеров".
Совет
Хотя шаблоны полезны для развертывания ресурсов, их нельзя использовать для перечисления, отображения или вызова ресурсов. Используйте Azure CLI, пакет SDK для Python или студию для выполнения этих операций. В следующем коде используется Azure CLI.
Чтобы просмотреть выходные данные журнала из контейнера, используйте следующую команду CLI:
az ml online-deployment get-logs --name blue --endpoint $ENDPOINT_NAME
По умолчанию журналы извлекаются из контейнера сервера вывода. Чтобы просмотреть журналы из контейнера инициализатора хранилища, добавьте --container storage-initializer флаг. Дополнительные сведения о журналах развертывания см. в разделе "Получение журналов контейнеров".
Вызов конечной точки для оценки данных с помощью модели
invoke Используйте команду или клиент REST, чтобы вызвать конечную точку и оценить некоторые данные:
az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file endpoints/online/model-1/sample-request.json
Получите ключ, используемый для проверки подлинности в конечной точке:
Совет
Вы можете контролировать, какие субъекты безопасности Microsoft Entra могут получить ключ проверки подлинности, назначив их пользовательской роли, которая позволяет Microsoft.MachineLearningServices/workspaces/onlineEndpoints/token/action и Microsoft.MachineLearningServices/workspaces/onlineEndpoints/listkeys/action. Дополнительные сведения об управлении авторизацией в рабочих областях см. в статье "Управление доступом к рабочей области Машинное обучение Azure".
ENDPOINT_KEY=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME -o tsv --query primaryKey)
Используйте curl для оценки данных.
SCORING_URI=$(az ml online-endpoint show -n $ENDPOINT_NAME -o tsv --query scoring_uri)
curl --request POST "$SCORING_URI" --header "Authorization: Bearer $ENDPOINT_KEY" --header 'Content-Type: application/json' --data @endpoints/online/model-1/sample-request.json
Обратите внимание, что вы используете show и get-credentials команды для получения учетных данных проверки подлинности. Кроме того, обратите внимание, что флаг используется --query для фильтрации только необходимых атрибутов. Дополнительные сведения о флаге см. в статье "Запрос выходных --query данных команды Azure CLI".
Чтобы просмотреть журналы вызовов, снова введите команду get-logs.
MLClient Используя созданный ранее дескриптор, получите дескриптор конечной точки. Затем конечную точку можно вызвать с помощью invoke команды со следующими параметрами:
endpoint_name — имя конечной точки
request_file — файл с данными запроса
deployment_name — имя конкретного развертывания для тестирования в конечной точке.
# test the blue deployment with some sample data
ml_client.online_endpoints.invoke(
endpoint_name=endpoint_name,
deployment_name="blue",
request_file="../model-1/sample-request.json",
)
Перейдите на вкладку "Тест" на странице сведений о конечной точке, чтобы протестировать управляемое сетевое развертывание. Введите тестовые входные данные и просмотрите результаты.
Откройте вкладку Тест на странице сведений о конечной точке.
С помощью раскрывающегося списка выберите развертывание, которое хотите протестировать.
Хотя шаблоны полезны для развертывания ресурсов, их нельзя использовать для перечисления, отображения или вызова ресурсов. Используйте Azure CLI, пакет SDK для Python или студию для выполнения этих операций. В следующем коде используется Azure CLI.
invoke Используйте команду или клиент REST, чтобы вызвать конечную точку и оценить некоторые данные:
az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file cli/endpoints/online/model-1/sample-request.json
Если вы хотите обновить код, модель, среду или параметры масштабирования, обновите файл YAML и введите команду az ml online-endpoint update.
Примечание.
При обновлении количества экземпляров (для масштабирования развертывания) вместе с другими параметрами модели (например, кодом, моделью или средой) в одной update команде сначала будет выполнена операция масштабирования, а затем будут применены другие обновления. Рекомендуется выполнять эти операции отдельно в рабочей среде.
Измените последнюю строку функции init(): после logging.info("Init complete") добавьте logging.info("Updated successfully").
Сохраните файл.
Выполните следующую команду:
az ml online-deployment update -n blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment-with-registered-assets.yml
Примечание.
Обновление с помощью YAML является декларативным. Это означает, что изменения в YAML отражаются в базовых ресурсах Azure Resource Manager (конечных точках и развертываниях). В декларативном подходе используется GitOps: все изменения конечных точек и развертываний (даже instance_count) проходят через YAML.
Совет
Вы можете использовать универсальные параметры обновления, такие как --set параметр, с помощью команды CLI update для переопределения атрибутов в YAML или для задания определенных атрибутов, не передавая их в YAML-файл. Использовать --set для отдельных атрибутов особенно удобно в сценариях разработки и тестирования. Например, с помощью флага --set instance_count=2 можно увеличить значение instance_count первого развертывания. Однако поскольку YAML не обновляется, этот метод не упрощает процесс GitOps.
Указание ФАЙЛА YAML не является обязательным. Например, если вы хотите протестировать различные параметры параллелизма для данного развертывания, можно попробовать что-то подобное az ml online-deployment update -n blue -e my-endpoint --set request_settings.max_concurrent_requests_per_instance=4 environment_variables.WORKER_COUNT=4. Это позволит сохранить всю существующую конфигурацию, но обновить только указанные параметры.
Так как вы изменили init() функцию, которая выполняется при создании или обновлении конечной точки, сообщение Updated successfully будет находиться в журналах. Чтобы получить журналы, выполните следующую команду:
az ml online-deployment get-logs --name blue --endpoint $ENDPOINT_NAME
Команда update также работает с локальными конечными точками. Используйте такую же команду az ml online-deployment update с флагом --local.
Если вы хотите обновить код, модель или среду, обновите конфигурацию, а затем запустите MLClientonline_deployments.begin_create_or_update метод для создания или обновления развертывания.
Примечание.
При обновлении количества экземпляров (для масштабирования развертывания) вместе с другими параметрами модели (например, кодом, моделью или средой) в одном begin_create_or_update методе сначала будет выполнена операция масштабирования, а затем будут применены другие обновления. Рекомендуется выполнять эти операции отдельно в рабочей среде.
Чтобы понять, как работает команда begin_create_or_update:
Так как вы изменили init() функцию, которая выполняется при создании или обновлении конечной точки, сообщение Updated successfully будет находиться в журналах. Чтобы получить журналы, выполните следующую команду:
Этот begin_create_or_update метод также работает с локальными развертываниями. Используйте тот же метод с флагом local=True .
В настоящее время студия позволяет обновлять только количество экземпляров развертывания. С помощью инструкций ниже вы можете масштабировать отдельное развертывание, изменив количество его экземпляров.
Откройте страницу сведений о конечной точке и найдите карточку для развертывания, которую вы хотите обновить.
Щелкните значок редактирования (значок карандаша) рядом с именем развертывания.
Обновите число экземпляров, связанное с развертыванием. Вы можете выбрать вариант " Использование по умолчанию " или "Целевое использование " для типа масштабирования развертывания.
Если выбран параметр Default, вы также указываете числовое значение для счетчика экземпляров.
При выборе целевого использования можно указать значения, используемые для параметров при автомасштабировании развертывания.
Выберите "Обновить" , чтобы завершить обновление счетчиков экземпляров для развертывания.
В настоящее время нет возможности обновить развертывание с помощью шаблона ARM.
Примечание.
Обновление развертывания в этом разделе является примером последовательного обновления на месте.
Для управляемой сетевой конечной точки развертывание обновляется до новой конфигурации с 20% узлами за раз. То есть, если развертывание содержит 10 узлов, одновременно обновляются 2 узла.
Для конечной точки Kubernetes online система итеративно создает новый экземпляр развертывания с новой конфигурацией и удаляет старый.
Для использования в рабочей среде следует учитывать сине-зеленое развертывание, которое предлагает более безопасную альтернативу обновлению веб-службы.
(Дополнительно) Настройка автомасштабирования
Благодаря автомасштабированию автоматически запускается именно тот объем ресурсов, который нужен для обработки нагрузки в вашем приложении. Управляемые сетевые конечные точки поддерживают автоматическое масштабирование через интеграцию с функцией автомасштабирования Azure Monitor. Сведения о настройке автомасштабирования см. в разделе Автомасштабирование сетевых конечных точек.
(Необязательно) Мониторинг соглашения об уровне обслуживания с помощью Azure Monitor
Чтобы просмотреть метрики и настроить оповещения на основе соглашения об уровне обслуживания, выполните действия, описанные в статье Мониторинг сетевых конечных точек.
(Необязательно) Интеграция с Log Analytics
Команда get-logs для ИНТЕРФЕЙСА командной строки или get_logs метода пакета SDK предоставляет только последние несколько сотен строк журналов из автоматически выбранного экземпляра. Однако Log Analytics позволяет надежно хранить и анализировать журналы. Дополнительные сведения об использовании ведения журнала см. в разделе "Мониторинг сетевых конечных точек".