Практическое руководство по эксплуатации конвейера обучения с помощью конечных точек пакетной службы
ОБЛАСТЬ ПРИМЕНЕНИЯ:Расширение машинного обучения Azure CLI версии 2 (current)Python SDK azure-ai-ml версии 2 (current)
В этой статье вы узнаете, как ввести в эксплуатацию конвейер обучения в конечной точке пакетной службы. Конвейер использует несколько компонентов (или шагов), которые включают обучение модели, предварительную обработку данных и оценку модели.
Содержание:
- Создание и проверка конвейера обучения
- Развертывание конвейера в конечной точке пакетной службы
- Изменение конвейера и создание нового развертывания в той же конечной точке
- Тестирование нового развертывания и задание его в качестве развертывания по умолчанию
Сведения об этом примере
В этом примере развертывается конвейер обучения, который принимает входные данные обучения (помеченные) и создает прогнозную модель, а также результаты оценки и преобразования, применяемые во время предварительной обработки. Конвейер будет использовать табличные данные из набора данных болезни сердца UCI для обучения модели XGBoost. Мы используем компонент предварительной обработки данных для предварительной обработки данных перед отправкой в компонент обучения для соответствия и оценки модели.
Визуализация конвейера выглядит следующим образом:
Пример в этой статье основан на примерах кода, содержащихся в репозитории azureml-examples . Чтобы выполнить команды локально без необходимости копирования и вставки YAML и других файлов, сначала клонируйте репозиторий, а затем измените каталоги в папку:
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli
Файлы для этого примера находятся в следующих файлах:
cd endpoints/batch/deploy-pipelines/training-with-components
Следуйте инструкциям в записных книжках Jupyter
Вы можете следовать версии пакета SDK для Python этого примера, открыв записную книжку sdk-deploy-and-test.ipynb в клонируемом репозитории.
Необходимые компоненты
Подписка Azure. Если у вас еще нет подписки Azure, создайте бесплатную учетную запись, прежде чем начинать работу. Попробуйте бесплатную или платную версию Машинного обучения Azure.
Рабочая область Машинного обучения Azure. Сведения о создании рабочей области см. в разделе "Управление Машинное обучение Azure рабочих областей".
Убедитесь, что в рабочей области Машинное обучение есть следующие разрешения:
- Создание конечных точек и развертываний пакетной службы или управление ими: используйте роль владельца, участника или настраиваемую роль, которая позволяет
Microsoft.MachineLearningServices/workspaces/batchEndpoints/*
. - Создайте развертывания Azure Resource Manager в группе ресурсов рабочей области: используйте роль владельца, участника или настраиваемую роль, которая позволяет
Microsoft.Resources/deployments/write
в группе ресурсов, в которой развернута рабочая область.
- Создание конечных точек и развертываний пакетной службы или управление ими: используйте роль владельца, участника или настраиваемую роль, которая позволяет
Установите следующее программное обеспечение для работы с Машинное обучение:
Выполните следующую команду, чтобы установить Azure CLI и
ml
расширение для Машинное обучение Azure:az extension add -n ml
Развертывания компонентов конвейера для конечных точек пакетной службы представлены в версии 2.7
ml
расширения для Azure CLI.az extension update --name ml
Используйте команду, чтобы получить последнюю версию.
Подключение к рабочей области
Рабочая область — это ресурс верхнего уровня для Машинное обучение. Он предоставляет централизованное место для работы со всеми артефактами, создаваемыми при использовании Машинное обучение. В этом разделе описано, как подключиться к рабочей области, в которой выполняются задачи развертывания.
В следующей команде введите значения для идентификатора подписки, рабочей области, расположения и группы ресурсов:
az account set --subscription <subscription>
az configure --defaults workspace=<workspace> group=<resource-group> location=<location>
Создание компонента конвейера обучения
В этом разделе мы создадим все ресурсы, необходимые для нашего конвейера обучения. Начнем с создания среды, включающей необходимые библиотеки для обучения модели. Затем мы создадим вычислительный кластер, в котором будет выполняться пакетное развертывание, и, наконец, мы зарегистрируем входные данные в качестве ресурса данных.
Создание среды
Компоненты в этом примере будут использовать среду с XGBoost
библиотеками и scikit-learn
библиотеками. Файл environment/conda.yml
содержит конфигурацию среды:
среда/conda.yml
channels:
- conda-forge
dependencies:
- python=3.8.5
- pip
- pip:
- mlflow
- azureml-mlflow
- datasets
- jobtools
- cloudpickle==1.6.0
- dask==2023.2.0
- scikit-learn==1.1.2
- xgboost==1.3.3
- pandas==1.4
name: mlflow-env
Создайте среду следующим образом:
Определите среду:
среда/xgboost-sklearn-py38.yml
$schema: https://azuremlschemas.azureedge.net/latest/environment.schema.json name: xgboost-sklearn-py38 image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest conda_file: conda.yml description: An environment for models built with XGBoost and Scikit-learn.
Создайте среду:
Создание вычислительного кластера
Конечные точки и развертывания пакетной службы выполняются в вычислительных кластерах. Они могут работать в любом Машинное обучение Azure вычислительном кластере, который уже существует в рабочей области. Таким образом, несколько пакетных развертываний могут совместно использовать одну и ту же инфраструктуру вычислений. В этом примере мы будем работать над Машинное обучение Azure вычислительным кластеромbatch-cluster
. Давайте убедимся, что вычислительные ресурсы существуют в рабочей области или создаются в противном случае.
az ml compute create -n batch-cluster --type amlcompute --min-instances 0 --max-instances 5
Регистрация обучающих данных в качестве ресурса данных
Данные обучения представлены в CSV-файлах. Чтобы имитировать более рабочую нагрузку на уровне рабочей среды, мы регистрируем обучающие данные в файле в heart.csv
качестве ресурса данных в рабочей области. Этот ресурс данных будет указан в качестве входных данных для конечной точки.
az ml data create --name heart-classifier-train --type uri_folder --path data/train
Создание конвейера
Конвейер, который мы хотим выполнить в эксплуатацию, принимает один вход, данные обучения и создает три выходных данных: обученную модель, результаты оценки и преобразования данных, применяемые в качестве предварительной обработки. Конвейер состоит из двух компонентов:
preprocess_job
: этот шаг считывает входные данные и возвращает подготовленные данные и примененные преобразования. Шаг получает три входных данных:data
: папка, содержащая входные данные для преобразования и оценкиtransformations
: (необязательно) Путь к преобразованиям, которые будут применены, если они доступны. Если путь не указан, преобразования будут извлечены из входных данных.transformations
Так как входные данные являются необязательными,preprocess_job
компонент можно использовать во время обучения и оценки.categorical_encoding
: стратегия кодирования для категориальных признаков (ordinal
илиonehot
).
train_job
: этот шаг обучит модель XGBoost на основе подготовленных данных и возвращает результаты оценки и обученную модель. Шаг получает три входных данных:data
: предварительно обработанные данные.target_column
: столбец, который мы хотим предсказать.eval_size
: указывает пропорцию входных данных, используемых для оценки.
Конфигурация конвейера определена deployment-ordinal/pipeline.yml
в файле:
deployment-ordinal/pipeline.yml
$schema: https://azuremlschemas.azureedge.net/latest/pipelineComponent.schema.json
type: pipeline
name: uci-heart-train-pipeline
display_name: uci-heart-train
description: This pipeline demonstrates how to train a machine learning classifier over the UCI heart dataset.
inputs:
input_data:
type: uri_folder
outputs:
model:
type: mlflow_model
mode: upload
evaluation_results:
type: uri_folder
mode: upload
prepare_transformations:
type: uri_folder
mode: upload
jobs:
preprocess_job:
type: command
component: ../components/prepare/prepare.yml
inputs:
data: ${{parent.inputs.input_data}}
categorical_encoding: ordinal
outputs:
prepared_data:
transformations_output: ${{parent.outputs.prepare_transformations}}
train_job:
type: command
component: ../components/train_xgb/train_xgb.yml
inputs:
data: ${{parent.jobs.preprocess_job.outputs.prepared_data}}
target_column: target
register_best_model: false
eval_size: 0.3
outputs:
model:
mode: upload
type: mlflow_model
path: ${{parent.outputs.model}}
evaluation_results:
mode: upload
type: uri_folder
path: ${{parent.outputs.evaluation_results}}
Примечание.
pipeline.yml
В файле transformations
входные данные отсутствуютpreprocess_job
; поэтому скрипт узнает параметры преобразования из входных данных.
Визуализация конвейера выглядит следующим образом:
Тестирование конвейера
Давайте протестируем конвейер с некоторыми примерами данных. Для этого мы создадим задание с помощью конвейера и созданного ранее вычислительного batch-cluster
кластера.
pipeline-job.yml
Следующий файл содержит конфигурацию для задания конвейера:
deployment-ordinal/pipeline-job.yml
$schema: https://azuremlschemas.azureedge.net/latest/pipelineJob.schema.json
type: pipeline
experiment_name: uci-heart-train-pipeline
display_name: uci-heart-train-job
description: This pipeline demonstrates how to train a machine learning classifier over the UCI heart dataset.
compute: batch-cluster
component: pipeline.yml
inputs:
input_data:
type: uri_folder
outputs:
model:
type: mlflow_model
mode: upload
evaluation_results:
type: uri_folder
mode: upload
prepare_transformations:
mode: upload
Создайте тестовое задание:
az ml job create -f deployment-ordinal/pipeline-job.yml --set inputs.input_data.path=azureml:heart-classifier-train@latest
Создание пакетной конечной точки
Укажите имя конечной точки. Имя пакетной конечной точки должно быть уникальным в каждом регионе, так как имя используется для создания URI вызова. Чтобы обеспечить уникальность, добавьте все конечные символы в имя, указанное в следующем коде.
Настройка конечной точки:
Файл
endpoint.yml
содержит конфигурацию конечной точки.endpoint.yml
$schema: https://azuremlschemas.azureedge.net/latest/batchEndpoint.schema.json name: uci-classifier-train description: An endpoint to perform training of the Heart Disease Data Set prediction task. auth_mode: aad_token
Создание конечной точки:
Запросите универсальный код ресурса (URI) конечной точки:
Развертывание компонента конвейера
Чтобы развернуть компонент конвейера, необходимо создать пакетное развертывание. Развертывание — это набор ресурсов, необходимых для размещения ресурса, который выполняет фактическую работу.
Настройка развертывания:
Файл
deployment-ordinal/deployment.yml
содержит конфигурацию развертывания. Вы можете проверить схему YAML полной пакетной конечной точки для получения дополнительных свойств.deployment-ordinal/deployment.yml
$schema: https://azuremlschemas.azureedge.net/latest/pipelineComponentBatchDeployment.schema.json name: uci-classifier-train-xgb description: A sample deployment that trains an XGBoost model for the UCI dataset. endpoint_name: uci-classifier-train type: pipeline component: pipeline.yml settings: continue_on_step_failure: false default_compute: batch-cluster
Создание развертывания:
Выполните следующий код, чтобы создать пакетное развертывание в конечной точке пакетной службы и задать его как развертывание по умолчанию.
az ml batch-deployment create --endpoint $ENDPOINT_NAME -f deployment-ordinal/deployment.yml --set-default
Совет
Обратите внимание на использование флага
--set-default
, чтобы указать, что это новое развертывание теперь используется по умолчанию.Развертывание готово для использования.
Тестирование развертывания
После создания развертывания он готов к получению заданий. Выполните следующие действия, чтобы проверить его:
Для нашего развертывания требуется, чтобы указать один вход данных.
Файл
inputs.yml
содержит определение входного ресурса данных:inputs.yml
inputs: input_data: type: uri_folder path: azureml:heart-classifier-train@latest
Совет
Дополнительные сведения о том, как указывать входные данные, см. в статье "Создание заданий и входных данных" для конечных точек пакетной службы.
Вы можете вызвать развертывание по умолчанию следующим образом:
Вы можете отслеживать ход выполнения отображения и потоковой передачи журналов с помощью:
Стоит отметить, что только входные данные конвейера публикуются в качестве входных данных в конечной точке пакетной службы. Например, categorical_encoding
это входные данные шага конвейера, но не входные данные в самом конвейере. Используйте этот факт для управления входными данными, которые вы хотите предоставить клиентам и которые вы хотите скрыть.
Доступ к выходным данным задания
После завершения задания мы можем получить доступ к некоторым выходным данным. Этот конвейер создает следующие выходные данные для своих компонентов:
preprocess job
: выходные данныеtransformations_output
train job
: выходные данные иmodel
evaluation_results
Вы можете скачать связанные результаты с помощью:
az ml job download --name $JOB_NAME --output-name transformations
az ml job download --name $JOB_NAME --output-name model
az ml job download --name $JOB_NAME --output-name evaluation_results
Создание нового развертывания в конечной точке
Конечные точки могут одновременно размещать несколько развертываний, сохраняя только одно развертывание в качестве значения по умолчанию. Таким образом, вы можете выполнить итерацию по разным моделям, развернуть различные модели в конечной точке и протестировать их, а затем переключить развертывание по умолчанию на развертывание модели, которое лучше всего подходит для вас.
Давайте изменим способ предварительной обработки в конвейере, чтобы узнать, работает ли модель лучше.
Изменение параметра в компоненте предварительной обработки конвейера
Компонент предварительной обработки имеет вызываемые categorical_encoding
входные данные, которые могут иметь значения ordinal
или onehot
. Эти значения соответствуют двум разным способам кодирования категориальных признаков.
ordinal
: кодирует значения признаков с числовыми (порядковыми)[1:n]
значениями, из которыхn
число категорий в функции. Порядковое кодирование подразумевает, что между категориями признаков существует естественный порядок ранжирования.onehot
: не подразумевает упорядоченную связь естественного ранга, но представляет проблему размерности, если количество категорий большое.
По умолчанию мы использовали ordinal
ранее. Теперь изменим категориальную кодировку, чтобы использовать onehot
и узнать, как выполняется модель.
Совет
Кроме того, мы могли бы предоставить categorial_encoding
входные данные клиентам в качестве входных данных для самого задания конвейера. Однако мы решили изменить значение параметра на этапе предварительной обработки, чтобы скрыть и контролировать параметр внутри развертывания и воспользоваться возможностью иметь несколько развертываний в одной конечной точке.
Измените конвейер. Выглядит следующим образом:
Конфигурация конвейера определена
deployment-onehot/pipeline.yml
в файле:deployment-onehot/pipeline.yml
$schema: https://azuremlschemas.azureedge.net/latest/pipelineComponent.schema.json type: pipeline name: uci-heart-train-pipeline display_name: uci-heart-train description: This pipeline demonstrates how to train a machine learning classifier over the UCI heart dataset. inputs: input_data: type: uri_folder outputs: model: type: mlflow_model mode: upload evaluation_results: type: uri_folder mode: upload prepare_transformations: type: uri_folder mode: upload jobs: preprocess_job: type: command component: ../components/prepare/prepare.yml inputs: data: ${{parent.inputs.input_data}} categorical_encoding: onehot outputs: prepared_data: transformations_output: ${{parent.outputs.prepare_transformations}} train_job: type: command component: ../components/train_xgb/train_xgb.yml inputs: data: ${{parent.jobs.preprocess_job.outputs.prepared_data}} target_column: target eval_size: 0.3 outputs: model: type: mlflow_model path: ${{parent.outputs.model}} evaluation_results: type: uri_folder path: ${{parent.outputs.evaluation_results}}
Настройка развертывания:
Файл
deployment-onehot/deployment.yml
содержит конфигурацию развертывания. Вы можете проверить схему YAML полной пакетной конечной точки для получения дополнительных свойств.deployment-onehot/deployment.yml
$schema: https://azuremlschemas.azureedge.net/latest/pipelineComponentBatchDeployment.schema.json name: uci-classifier-train-onehot description: A sample deployment that trains an XGBoost model for the UCI dataset using onehot encoding for variables. endpoint_name: uci-classifier-train type: pipeline component: pipeline.yml settings: continue_on_step_failure: false default_compute: batch-cluster
Создание развертывания:
Развертывание готово для использования.
Тестирование недефесультного развертывания
После создания развертывания он готов к получению заданий. Мы можем протестировать его так же, как мы сделали раньше, но теперь мы вызовем конкретное развертывание:
Вызовите развертывание следующим образом, указав параметр развертывания для активации конкретного развертывания
uci-classifier-train-onehot
:Вы можете отслеживать ход выполнения отображения и потоковой передачи журналов с помощью:
Настройка нового развертывания в качестве используемого по умолчанию
После того как мы удовлетворены производительностью нового развертывания, мы можем задать этот новый вариант в качестве значения по умолчанию:
az ml batch-endpoint update --name $ENDPOINT_NAME --set defaults.deployment_name=$DEPLOYMENT_NAME
Удаление старого развертывания
После завершения можно удалить старое развертывание, если он больше не нужен:
az ml batch-deployment delete --name uci-classifier-train-xgb --endpoint-name $ENDPOINT_NAME --yes
Очистка ресурсов
После завершения удалите связанные ресурсы из рабочей области:
Выполните следующий код, чтобы удалить конечную точку пакетной службы и его базовое развертывание. --yes
используется для подтверждения удаления.
az ml batch-endpoint delete -n $ENDPOINT_NAME --yes
(Необязательно) Удалите вычислительные ресурсы, если вы не планируете повторно использовать вычислительный кластер с последующими развертываниями.