Поделиться через


Практическое руководство по эксплуатации конвейера обучения с помощью конечных точек пакетной службы

ОБЛАСТЬ ПРИМЕНЕНИЯ:Расширение машинного обучения 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

Создайте среду следующим образом:

  1. Определите среду:

    среда/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.
    
  2. Создайте среду:

    az ml environment create -f environment/xgboost-sklearn-py38.yml
    

Создание вычислительного кластера

Конечные точки и развертывания пакетной службы выполняются в вычислительных кластерах. Они могут работать в любом Машинное обучение 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

Создание пакетной конечной точки

  1. Укажите имя конечной точки. Имя пакетной конечной точки должно быть уникальным в каждом регионе, так как имя используется для создания URI вызова. Чтобы обеспечить уникальность, добавьте все конечные символы в имя, указанное в следующем коде.

    ENDPOINT_NAME="uci-classifier-train"
    
  2. Настройка конечной точки:

    Файл 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
    
  3. Создание конечной точки:

    az ml batch-endpoint create --name $ENDPOINT_NAME -f endpoint.yml
    
  4. Запросите универсальный код ресурса (URI) конечной точки:

    az ml batch-endpoint show --name $ENDPOINT_NAME
    

Развертывание компонента конвейера

Чтобы развернуть компонент конвейера, необходимо создать пакетное развертывание. Развертывание — это набор ресурсов, необходимых для размещения ресурса, который выполняет фактическую работу.

  1. Настройка развертывания:

    Файл 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
    
  2. Создание развертывания:

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

    az ml batch-deployment create --endpoint $ENDPOINT_NAME -f deployment-ordinal/deployment.yml --set-default
    

    Совет

    Обратите внимание на использование флага --set-default , чтобы указать, что это новое развертывание теперь используется по умолчанию.

  3. Развертывание готово для использования.

Тестирование развертывания

После создания развертывания он готов к получению заданий. Выполните следующие действия, чтобы проверить его:

  1. Для нашего развертывания требуется, чтобы указать один вход данных.

    Файл inputs.yml содержит определение входного ресурса данных:

    inputs.yml

    inputs:
      input_data:
        type: uri_folder
        path: azureml:heart-classifier-train@latest
    

    Совет

    Дополнительные сведения о том, как указывать входные данные, см. в статье "Создание заданий и входных данных" для конечных точек пакетной службы.

  2. Вы можете вызвать развертывание по умолчанию следующим образом:

    JOB_NAME=$(az ml batch-endpoint invoke -n $ENDPOINT_NAME --f inputs.yml --query name -o tsv)
    
  3. Вы можете отслеживать ход выполнения отображения и потоковой передачи журналов с помощью:

    az ml job stream -n $JOB_NAME
    

Стоит отметить, что только входные данные конвейера публикуются в качестве входных данных в конечной точке пакетной службы. Например, categorical_encoding это входные данные шага конвейера, но не входные данные в самом конвейере. Используйте этот факт для управления входными данными, которые вы хотите предоставить клиентам и которые вы хотите скрыть.

Доступ к выходным данным задания

После завершения задания мы можем получить доступ к некоторым выходным данным. Этот конвейер создает следующие выходные данные для своих компонентов:

  • preprocess job: выходные данные transformations_output
  • train job: выходные данные и modelevaluation_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 входные данные клиентам в качестве входных данных для самого задания конвейера. Однако мы решили изменить значение параметра на этапе предварительной обработки, чтобы скрыть и контролировать параметр внутри развертывания и воспользоваться возможностью иметь несколько развертываний в одной конечной точке.

  1. Измените конвейер. Выглядит следующим образом:

    Конфигурация конвейера определена 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}}
    
  2. Настройка развертывания:

    Файл 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
    
  3. Создание развертывания:

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

    az ml batch-deployment create --endpoint $ENDPOINT_NAME -f deployment-onehot/deployment.yml
    

    Развертывание готово для использования.

  4. Развертывание готово для использования.

Тестирование недефесультного развертывания

После создания развертывания он готов к получению заданий. Мы можем протестировать его так же, как мы сделали раньше, но теперь мы вызовем конкретное развертывание:

  1. Вызовите развертывание следующим образом, указав параметр развертывания для активации конкретного развертывания uci-classifier-train-onehot:

    DEPLOYMENT_NAME="uci-classifier-train-onehot"
    JOB_NAME=$(az ml batch-endpoint invoke -n $ENDPOINT_NAME -d $DEPLOYMENT_NAME --f inputs.yml --query name -o tsv)
    
  2. Вы можете отслеживать ход выполнения отображения и потоковой передачи журналов с помощью:

    az ml job stream -n $JOB_NAME
    

Настройка нового развертывания в качестве используемого по умолчанию

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

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

(Необязательно) Удалите вычислительные ресурсы, если вы не планируете повторно использовать вычислительный кластер с последующими развертываниями.

az ml compute delete -n batch-cluster

Следующие шаги