Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
ОБЛАСТЬ ПРИМЕНЕНИЯ:
расширение Azure CLI ml версии 2 (текущее)
Из этой статьи вы узнаете, как развернуть модель MLflow в сетевой конечной точке для вывода в режиме реального времени. При развертывании модели MLflow в сетевой конечной точке не требуется указывать скрипт оценки или среду. Эта функция называется развертыванием без кода.
Для развертывания без кода Машинное обучение Azure:
- Динамически устанавливает пакеты Python, перечисленные в файле conda.yaml. В результате система устанавливает зависимости во время выполнения контейнера.
- Предоставляет базовый образ MLflow или курированную среду, содержащую следующие элементы:
- Пакет
azureml-inference-server-http - Пакет
mlflow-skinny - Скрипт оценки для вывода
- Пакет
Prerequisites
Python 3.10 или более поздней версии.
Подписка Azure. Если у вас нет подписки на Azure, создайте бесплатную учетную запись перед началом.
Учетная запись пользователя, которая имеет по крайней мере одну из следующих ролей управления доступом на основе ролей Azure (Azure RBAC):
- Роль владельца рабочей области Машинного обучения Azure
- Роль участника для рабочей области Машинного обучения Azure
- Пользовательская роль с
Microsoft.MachineLearningServices/workspaces/onlineEndpoints/*разрешениями
Дополнительные сведения см. в статье "Управление доступом к рабочим областям Azure машинного обучения".
Доступ к Машинному обучению Azure:
Установите Azure CLI и
mlрасширение в Azure CLI. Инструкции по установке см. в разделе "Установка и настройка интерфейса командной строки( версия 2)".
О примерe
В примере этой статьи показано, как развернуть модель MLflow в сетевой конечной точке для выполнения прогнозов. В примере используется модель MLflow, основанная на наборе данных диабета. Этот набор данных содержит 10 базовых переменных: возраст, секс, индекс массы тела, среднее кровяное давление и шесть измерений крови, полученных от 442 пациентов с диабетом. Он также содержит ответ на интерес, количественное измерение прогрессирования заболеваний в течение одного года после даты базовых данных.
Модель была обучена с использованием scikit-learn регрессора. Все необходимые предварительные обработки упаковывается в виде конвейера, поэтому эта модель является сквозным конвейером, который переходит от необработанных данных к прогнозам.
Сведения в этой статье основаны на примерах кода из репозитория azureml-examples . Если клонировать репозиторий, вы можете выполнять команды в этой статье локально, не копируя или вставляя файлы YAML и другие файлы. Используйте следующие команды, чтобы клонировать репозиторий и перейти в папку для языка программирования:
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli
Следуйте инструкциям в Jupyter Notebook
Чтобы выполнить инструкции, описанные в этой статье, см. статью "Развертывание модели MLflow в записной книжке для сетевых конечных точек " в репозитории примеров.
Подключение к рабочей области
Подключитесь к рабочей области Машинного обучения Azure:
az account set --subscription <subscription-ID>
az configure --defaults workspace=<workspace-name> group=<resource-group-name> location=<location>
Регистрация модели.
Вы можете развернуть только зарегистрированные модели в сетевых конечных точках. Действия, описанные в этой статье, используют модель, обученную для набора данных диабета. В этом случае у вас уже есть локальная копия модели в клонируемом репозитории, поэтому необходимо опубликовать модель только в реестре в рабочей области. Этот шаг можно пропустить, если модель, которую вы хотите развернуть, уже зарегистрирована.
MODEL_NAME='sklearn-diabetes'
az ml model create --name $MODEL_NAME --type "mlflow_model" --path "endpoints/online/ncd/sklearn-diabetes/model"
Что если вы зарегистрировали свою модель в ходе выполнения запуска?
Если вы залогировали модель во время запуска, ее можно зарегистрировать напрямую.
Чтобы зарегистрировать модель, необходимо знать расположение хранилища:
- Если вы используете функцию MLflow
autolog, путь к модели зависит от типа модели и платформы. Проверьте выходные данные задания, чтобы определить имя папки модели. Эта папка содержит файл с именемMLModel. - Если вы используете метод
log_modelдля ручной регистрации моделей, передайте в него путь к модели как аргумент. Например, если вы используетеmlflow.sklearn.log_model(my_model, "classifier")для регистрации модели, — это путь,classifierв котором хранится модель.
С помощью интерфейса командной строки машинного обучения Azure версии 2 можно создать модель из выходных данных задания обучения. Следующий код использует материалы задания с идентификатором $RUN_ID для регистрации модели с именем $MODEL_NAME.
$MODEL_PATH — это путь, который задание использует для хранения модели.
az ml model create --name $MODEL_NAME --path azureml://jobs/$RUN_ID/outputs/artifacts/$MODEL_PATH
Развертывание модели MLflow в сетевой конечной точке
Используйте следующий код, чтобы настроить режим имени и проверки подлинности конечной точки, в которой требуется развернуть модель:
Подсказка
В этом примере для простоты используется проверка подлинности на основе ключей. Для рабочих развертываний корпорация Майкрософт рекомендует проверку подлинности на основе токенов Microsoft Entra (
aad_token), которая обеспечивает повышенную безопасность с помощью управления доступом на основе удостоверений. Дополнительные сведения см. в разделе "Проверка подлинности клиентов для сетевых конечных точек".Задайте имя конечной точки, выполнив следующую команду. Сначала замените
YOUR_ENDPOINT_NAMEуникальным именем.export ENDPOINT_NAME="<YOUR_ENDPOINT_NAME>"Чтобы настроить конечную точку, создайте файл YAML с именем
create-endpoint.yaml, содержащий следующие строки:$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json name: my-endpoint auth_mode: keyСоздание конечной точки:
az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/ncd/create-endpoint.yamlНастройте развертывание. Развертывание — это набор ресурсов, необходимых для размещения модели, выполняющей фактическое выполнение выводов.
Создайте файл YAML с именем
sklearn-deployment.yaml, который содержит следующие строки:$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json name: sklearn-deployment endpoint_name: my-endpoint model: name: mir-sample-sklearn-ncd-model version: 2 path: sklearn-diabetes/model type: mlflow_model instance_type: Standard_DS3_v2 instance_count: 1Note
Автоматическое создание
scoring_scriptиenvironmentподдерживается только для варианта моделиPyFunc. Сведения об использовании другого варианта модели см. в статье "Настройка развертываний модели MLflow".Создайте развертывание:
az ml online-deployment create --name sklearn-deployment --endpoint $ENDPOINT_NAME -f endpoints/online/ncd/sklearn-deployment.yaml --all-trafficaz ml online-deployment create --name sklearn-deployment --endpoint $ENDPOINT_NAME -f endpoints/online/ncd/sklearn-deployment.yaml --all-trafficНазначьте весь трафик на развёртывание. На данный момент в конечной точке есть одно развертывание, но ни один трафик не направлен на него.
Этот шаг не требуется в Azure CLI, если во время создания используется
--all-trafficфлаг. Если необходимо изменить трафик, используйтеaz ml online-endpoint update --trafficкоманду. Дополнительные сведения об обновлении трафика см. в разделе "Постепенное обновление трафика".Обновите конфигурацию конечной точки:
Этот шаг не требуется в Azure CLI, если во время создания используется
--all-trafficфлаг. Если необходимо изменить трафик, используйтеaz ml online-endpoint update --trafficкоманду. Дополнительные сведения об обновлении трафика см. в разделе "Постепенное обновление трафика".
Вызов конечной точки
Когда развертывание будет готово, можно использовать его для обслуживания запросов. Одним из способов тестирования развертывания является использование встроенной функции вызова в клиенте развертывания. В репозитории sample-request-sklearn.json примеров файл содержит следующий код JSON. Его можно использовать в качестве примера файла запроса для развертывания.
{"input_data": {
"columns": [
"age",
"sex",
"bmi",
"bp",
"s1",
"s2",
"s3",
"s4",
"s5",
"s6"
],
"data": [
[ 1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0 ],
[ 10.0,2.0,9.0,8.0,7.0,6.0,5.0,4.0,3.0,2.0]
],
"index": [0,1]
}}
Note
Этот файл использует ключ input_data вместо inputs, который используется службой MLflow. Машинное обучение Azure требует другого формата ввода для автоматического создания контрактов Swagger для конечных точек. Для получения дополнительной информации об ожидаемых форматах входных данных см. Развертывание на встроенном сервере MLflow и развертывание на сервере для инференса в Azure Machine Learning.
Отправьте запрос в конечную точку:
az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file endpoints/online/ncd/sample-request-sklearn.json
Ответ должен быть похож на следующий текст:
[
11633.100167144921,
8522.117402884991
]
Important
Для MLflow no-code-deployment тестирование с помощью локальных конечных точек в настоящее время не поддерживается.
Настройка развертываний модели MLflow
При развертывании модели MLflow в сетевой конечной точке не требуется указывать скрипт оценки. Но можно добавить скрипт оценки, если вы хотите настроить процесс вывода.
Настройте развертывание модели MLflow, если:
- Модель не имеет вкуса
PyFunc. - Необходимо настроить способ запуска модели. Например, необходимо использовать
mlflow.<flavor>.load_model()для выбора определённого варианта при загрузке модели. - Вам потребуется предварительная обработка или постобработка в процессе оценки, так как модель не выполняет эту обработку.
- Выходные данные модели не могут быть хорошо представлены в табличных данных. Например, выходные данные — это тензор, представляющий изображение.
Important
Если вы указываете скрипт оценки для развертывания модели MLflow, необходимо также указать среду для развертывания.
Развертывание пользовательского скрипта оценки
Чтобы развернуть модель MLflow, использующую пользовательский скрипт оценки, выполните действия, описанные в следующих разделах.
Определение папки модели
Определите папку, содержащую модель MLflow, выполнив следующие действия:
Перейдите к Студия машинного обучения Azure.
Перейдите в раздел "Модели".
Выберите модель, которую вы хотите развернуть, и перейдите на вкладку "Артефакты ".
Запишите отображаемую папку. При регистрации модели укажите эту папку.
Создайте сценарий оценки
В следующем скрипте оценки score.py приведен пример выполнения вывода с моделью MLflow. Этот скрипт можно адаптировать к вашим потребностям или изменить любую из его частей, чтобы отразить ваш сценарий. Обратите внимание, что имя папки, которое вы ранее определили, modelвключается в функцию init() .
import logging
import os
import json
import mlflow
from io import StringIO
from mlflow.pyfunc.scoring_server import infer_and_parse_json_input, predictions_to_json
def init():
global model
global input_schema
# "model" is the path of the mlflow artifacts when the model was registered. For automl
# models, this is generally "mlflow-model".
model_path = os.path.join(os.getenv("AZUREML_MODEL_DIR"), "model")
model = mlflow.pyfunc.load_model(model_path)
input_schema = model.metadata.get_input_schema()
def run(raw_data):
json_data = json.loads(raw_data)
if "input_data" not in json_data.keys():
raise Exception("Request must contain a top level key named 'input_data'")
serving_input = json.dumps(json_data["input_data"])
data = infer_and_parse_json_input(serving_input, input_schema)
predictions = model.predict(data)
result = StringIO()
predictions_to_json(predictions, result)
return result.getvalue()
Создание среды
Следующим шагом является создание среды, в которой можно запустить скрипт оценки. Поскольку модель является моделью MLflow, требования conda также указываются в пакете модели. Дополнительные сведения о файлах, включенных в модель MLflow, см. в формате MLmodel. Вы создаете среду с помощью зависимостей conda из файла. Однако необходимо также включить пакеты azureml-inference-server-http и azureml-ai-monitoring, которые требуются для онлайн-развертываний в Azure Machine Learning.
Вы можете создать файл определения conda с именем conda.yaml, содержащий следующие строки:
channels:
- conda-forge
dependencies:
- python=3.12
- pip
- pip:
- mlflow
- scikit-learn==1.7.0
- cloudpickle==3.1.1
- psutil==7.0.0
- pandas==2.3.0
- azureml-inference-server-http
name: mlflow-env
Note
Раздел dependencies этого файла conda включает в себя azureml-inference-server-http и azureml-ai-monitoring пакеты.
Используйте этот файл зависимостей conda для создания среды:
Вы создаете встроенную среду в конфигурации развертывания.
Создайте развертывание
В папке endpoints/online/ncd создайте файл конфигурации развертывания, deployment.ymlсодержащий следующие строки:
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
name: sklearn-diabetes-custom
endpoint_name: my-endpoint
model: azureml:sklearn-diabetes@latest
environment:
image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu22.04
conda_file: sklearn-diabetes/environment/conda.yaml
code_configuration:
code: sklearn-diabetes/src
scoring_script: score.py
instance_type: Standard_F2s_v2
instance_count: 1
Создайте развертывание:
az ml online-deployment create -f endpoints/online/ncd/deployment.yml
Обслуживание запросов
Когда развертывание завершится, оно готово к выполнению запросов. Один из способов тестирования развертывания — использовать invoke метод с примером файла запроса, например следующим файлом: sample-request-sklearn.json
{"input_data": {
"columns": [
"age",
"sex",
"bmi",
"bp",
"s1",
"s2",
"s3",
"s4",
"s5",
"s6"
],
"data": [
[ 1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0 ],
[ 10.0,2.0,9.0,8.0,7.0,6.0,5.0,4.0,3.0,2.0]
],
"index": [0,1]
}}
Отправьте запрос в конечную точку:
az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file endpoints/online/ncd/sample-request-sklearn.json
Ответ должен быть похож на следующий текст:
{
"predictions": [
1095.2797413413252,
1134.585328803727
]
}
Note
Ответ содержит predictions ключ при использовании MLflow 2.x или более поздней версии.
Очистка ресурсов
Если конечная точка больше не нужна, удалите связанные с ней ресурсы:
az ml online-endpoint delete --name $ENDPOINT_NAME --yes