Совместное использование моделей, компонентов и сред в рабочих областях с помощью реестров

Машинное обучение Azure реестр позволяет совместно работать между рабочими областями в организации. С помощью реестров можно совместно использовать модели, компоненты и среды.

Существует два сценария, в которых вы хотите использовать один набор моделей, компонентов и сред в нескольких рабочих областях:

  • MlOps между рабочими областями: вы обучаете модель в рабочей области и должны развертывать ее test в dev и prod рабочих областях. В этом случае необходимо иметь сквозную линию между конечными точками, в которых модель развертывается в test рабочих областях или prod в рабочих областях, а также задание обучения, метрики, код, данные и среда, которые использовались для обучения модели в dev рабочей области.
  • Совместное использование моделей и конвейеров в разных командах: совместное использование и повторное использование совместной работы и повышения производительности. В этом сценарии может потребоваться опубликовать обученную модель и связанные компоненты и среды, используемые для обучения его в центральном каталоге. Оттуда коллеги из других команд могут искать и повторно использовать ресурсы, которыми вы поделились в своих собственных экспериментах.

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

  • Создайте среду и компонент в реестре.
  • Используйте компонент из реестра для отправки задания обучения модели в рабочей области.
  • Зарегистрируйте обученную модель в реестре.
  • Разверните модель из реестра в веб-конечной точке в рабочей области, а затем отправьте запрос вывода.

Необходимые компоненты

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

  • Реестр Машинное обучение Azure для совместного использования моделей, компонентов и сред. Сведения о создании реестра см. в статье "Сведения о создании реестра".

  • Рабочая область Машинного обучения Azure. Если у вас ее нет, создайте ее по инструкциям, приведенным в кратком руководстве по созданию ресурсов рабочей области.

    Внимание

    Регион Azure (расположение), в котором создается рабочая область, должна находиться в списке поддерживаемых регионов для реестра Машинное обучение Azure

  • Azure CLI и ml расширение или пакет SDK для Python версии 2 Машинное обучение Azure:

    Чтобы установить Azure CLI и расширение, см. статью "Установка,настройка" и использование интерфейса командной строки (версии 2).

    Внимание

    • В примерах CLI в этой статье предполагается, что вы используете оболочку Bash (или совместимый вариант). Например, из системы Linux или подсистемы Windows для Linux.

    • В примерах также предполагается, что вы настроили значения по умолчанию для Azure CLI, чтобы вам не нужно указывать параметры подписки, рабочей области, группы ресурсов или расположения. Чтобы задать параметры по умолчанию, используйте следующие команды. Замените следующие параметры значениями конфигурации:

      • Замените <subscription> идентификатором своей подписки Azure.
      • Заменить <workspace> рабочей областью машинного обучения Azure.
      • Замените <resource-group> группой ресурсов Azure, содержащей вашу рабочую область.
      • Замените <location> регионом Azure, содержащим вашу рабочую область.
      az account set --subscription <subscription>
      az configure --defaults workspace=<workspace> group=<resource-group> location=<location>
      

      Для просмотра текущих значений по умолчанию используйте команду az configure -l.

Клонирование репозитория примеров

Примеры кода в этой статье основаны на nyc_taxi_data_regression примере в репозитории примеров. Чтобы использовать эти файлы в среде разработки, используйте следующие команды, чтобы клонировать репозиторий и изменить каталоги в примере:

git clone https://github.com/Azure/azureml-examples
cd azureml-examples

В примере CLI измените каталоги cli/jobs/pipelines-with-components/nyc_taxi_data_regression на локальный клон репозитория примеров.

cd cli/jobs/pipelines-with-components/nyc_taxi_data_regression

Создание подключения к пакету SDK

Совет

Этот шаг необходим только при использовании пакета SDK для Python.

Создайте подключение клиента как к рабочей области Машинное обучение Azure, так и к реестру:

ml_client_workspace = MLClient( credential=credential,
    subscription_id = "<workspace-subscription>",
    resource_group_name = "<workspace-resource-group",
    workspace_name = "<workspace-name>")
print(ml_client_workspace)

ml_client_registry = MLClient(credential=credential,
                        registry_name="<REGISTRY_NAME>",
                        registry_location="<REGISTRY_REGION>")
print(ml_client_registry)

Создание среды в реестре

Среды определяют контейнер Docker и зависимости Python, необходимые для выполнения заданий обучения или развертывания моделей. Дополнительные сведения о средах см. в следующих статьях:

Совет

Ту же команду az ml environment create CLI можно использовать для создания сред в рабочей области или реестре. При выполнении команды создается среда в рабочей области, а при выполнении команды --workspace-name--registry-name создается среда в реестре.

Мы создадим среду, которая использует python:3.8 образ Docker и устанавливает пакеты Python, необходимые для запуска задания обучения с помощью платформы SciKit Learn. Если вы клонировали репозиторий примеров и находятся в папке cli/jobs/pipelines-with-components/nyc_taxi_data_regression, вы сможете просмотреть файл env_train.yml определения среды, ссылающийся на файл env_train/Dockerfiledocker. Ниже env_train.yml приведена ссылка:

$schema: https://azuremlschemas.azureedge.net/latest/environment.schema.json
name: SKLearnEnv
version: 1
build:
  path: ./env_train

Создайте среду следующим образом.az ml environment create

az ml environment create --file env_train.yml --registry-name <registry-name>

Если в реестре уже существует среда с этим именем и версией, можно изменить version поле в env_train.yml или указать другую версию в CLI, которая переопределяет значение версии.env_train.yml

# use shell epoch time as the version
version=$(date +%s)
az ml environment create --file env_train.yml --registry-name <registry-name> --set version=$version

Совет

version=$(date +%s) работает только в Linux. Замените $version случайным числом, если это не работает.

name Запишите и version среду из выходных данных az ml environment create команды и используйте их с az ml environment show командами следующим образом. При создании компонента в реестре вам потребуется name и version в следующем разделе.

az ml environment show --name SKLearnEnv --version 1 --registry-name <registry-name>

Совет

Если вы использовали другое имя или версию среды, замените --name соответствующие параметры.--version

Вы также можете использовать az ml environment list --registry-name <registry-name> для перечисления всех сред в реестре.

Вы можете просматривать все среды в Студия машинного обучения Azure. Перейдите к глобальному пользовательскому интерфейсу и найдите запись реестра .

Снимок экрана: среды в реестре.

Создание компонента в реестре

Компоненты являются повторно используемыми стандартными блоками конвейеров Машинное обучение в Машинное обучение Azure. Вы можете упаковить код, команду, среду, входной интерфейс и выходной интерфейс отдельного шага конвейера в компонент. Затем вы можете повторно использовать компонент в нескольких конвейерах, не беспокоясь о переносе зависимостей и кода при каждом написании другого конвейера.

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

Дополнительные сведения о компонентах см. в следующих статьях:

Убедитесь, что вы находитесь в папке cli/jobs/pipelines-with-components/nyc_taxi_data_regression. Вы найдете файл train.yml определения компонента, который упакован скрипт train_src/train.py обучения Scikit Learn и курируемую средуAzureML-sklearn-0.24-ubuntu18.04-py37-cpu. Мы будем использовать среду Scikit Learn, созданную на каждом шаге вместо курируемой среды. Поле можно изменить environment в train.yml поле для ссылки на среду Scikit Learn. Результирующий файл train.yml определения компонента будет аналогичен следующему примеру:

# <component>
$schema: https://azuremlschemas.azureedge.net/latest/commandComponent.schema.json
name: train_linear_regression_model
display_name: TrainLinearRegressionModel
version: 1
type: command
inputs:
  training_data: 
    type: uri_folder
  test_split_ratio:
    type: number
    min: 0
    max: 1
    default: 0.2
outputs:
  model_output:
    type: mlflow_model
  test_data:
    type: uri_folder
code: ./train_src
environment: azureml://registries/<registry-name>/environments/SKLearnEnv/versions/1`
command: >-
  python train.py 
  --training_data ${{inputs.training_data}} 
  --test_data ${{outputs.test_data}} 
  --model_output ${{outputs.model_output}}
  --test_split_ratio ${{inputs.test_split_ratio}}

Если вы использовали другое имя или версию, более универсальное представление выглядит следующим образом: environment: azureml://registries/<registry-name>/environments/<sklearn-environment-name>/versions/<sklearn-environment-version>поэтому убедитесь, что вы замените <registry-name><sklearn-environment-name> имя и <sklearn-environment-version> соответственно. Затем выполните az ml component create команду, чтобы создать компонент следующим образом.

az ml component create --file train.yml --registry-name <registry-name>

Совет

Ту же команду az ml component create CLI можно использовать для создания компонентов в рабочей области или реестре. При выполнении команды команда создает компонент в рабочей области, а при выполнении команды --workspace-name--registry-name создается компонент в реестре.

Если вы предпочитаете не изменять train.yml, можно переопределить имя среды в CLI следующим образом:

az ml component create --file train.yml --registry-name <registry-name>` --set environment=azureml://registries/<registry-name>/environments/SKLearnEnv/versions/1
# or if you used a different name or version, replace `<sklearn-environment-name>` and `<sklearn-environment-version>` accordingly
az ml component create --file train.yml --registry-name <registry-name>` --set environment=azureml://registries/<registry-name>/environments/<sklearn-environment-name>/versions/<sklearn-environment-version>

Совет

Если вы получите сообщение об ошибке, что имя компонента уже существует в реестре, можно изменить версию в или переопределить версию train.yml в CLI с случайной версией.

name Запишите и version компонент из выходных данных az ml component create команды и используйте их с az ml component show командами, как показано ниже. При создании задания обучения в рабочей области вам потребуется name и version в следующем разделе.

az ml component show --name <component_name> --version <component_version> --registry-name <registry-name>

Вы также можете использовать az ml component list --registry-name <registry-name> для перечисления всех компонентов в реестре.

Вы можете просмотреть все компоненты в Студия машинного обучения Azure. Перейдите к глобальному пользовательскому интерфейсу и найдите запись реестра .

Снимок экрана: компоненты в реестре.

Запуск задания конвейера в рабочей области с помощью компонента из реестра

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

Мы запустите задание конвейера с помощью компонента обучения Scikit Learn, созданного в предыдущем разделе для обучения модели. Убедитесь, что вы находитесь в папке cli/jobs/pipelines-with-components/nyc_taxi_data_regression. Набор данных обучения расположен в папке data_transformed . Измените component раздел в разделе train_jobsingle-job-pipeline.yml файла, чтобы обратиться к компоненту обучения, созданному в предыдущем разделе. single-job-pipeline.yml Результат показан ниже.

$schema: https://azuremlschemas.azureedge.net/latest/pipelineJob.schema.json
type: pipeline
display_name: nyc_taxi_data_regression_single_job
description: Single job pipeline to train regression model based on nyc taxi dataset

jobs:
  train_job:
    type: command
    component: azureml://registries/<registry-name>/component/train_linear_regression_model/versions/1
    compute: azureml:cpu-cluster
    inputs:
      training_data: 
        type: uri_folder
        path: ./data_transformed
    outputs:
      model_output: 
        type: mlflow_model
      test_data: 

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

Предупреждение

  • Перед выполнением задания конвейера убедитесь, что рабочая область, в которой будет выполняться задание, находится в регионе Azure, поддерживаемом реестром, в котором вы создали компонент.
  • Убедитесь, что рабочая область имеет вычислительный кластер с именем cpu-cluster или измените compute поле под jobs.train_job.compute именем вычисления.

Запустите задание конвейера az ml job create с помощью команды.

az ml job create --file single-job-pipeline.yml 

Совет

Если вы не настроили рабочую область по умолчанию и группу ресурсов, как описано в разделе предварительных требований, необходимо указать --workspace-name--resource-group параметры и параметры для az ml job create работы.

Кроме того, можно пропустить редактирование single-job-pipeline.yml и переопределить имя компонента, используемое train_job в CLI.

az ml job create --file single-job-pipeline.yml --set jobs.train_job.component=azureml://registries/<registry-name>/component/train_linear_regression_model/versions/1

Так как компонент, используемый в задании обучения, предоставляется через реестр, вы можете отправить задание в любую рабочую область, доступ к которой у вас есть в организации, даже в разных подписках. Например, если у вас есть dev-workspaceи test-workspaceprod-workspaceвыполнение задания обучения в этих трех рабочих областях, так же просто, как выполнение трех az ml job create команд.

az ml job create --file single-job-pipeline.yml --workspace-name dev-workspace --resource-group <resource-group-of-dev-workspace>
az ml job create --file single-job-pipeline.yml --workspace-name test-workspace --resource-group <resource-group-of-test-workspace>
az ml job create --file single-job-pipeline.yml --workspace-name prod-workspace --resource-group <resource-group-of-prod-workspace>

В Студия машинного обучения Azure выберите ссылку конечной точки в выходных данных задания, чтобы просмотреть задание. Здесь можно проанализировать метрики обучения, убедиться, что задание использует компонент и среду из реестра и просмотрите обученную модель. name Запишите задание из выходных данных или найдите те же сведения из обзора задания в Студия машинного обучения Azure. Эти сведения потребуются для скачивания обученной модели в следующем разделе по созданию моделей в реестре.

Снимок экрана: конвейер в Студия машинного обучения Azure.

Создание модели в реестре

Вы узнаете, как создавать модели в реестре в этом разделе. Просмотрите модели управления моделями, чтобы узнать больше об управлении моделями в Машинное обучение Azure. Мы рассмотрим два разных способа создания модели в реестре. Сначала из локальных файлов. Во-вторых, необходимо скопировать модель, зарегистрированную в рабочей области, в реестр.

В обоих вариантах вы создадите модель с форматом MLflow, который поможет развернуть эту модель для вывода без написания кода вывода.

Создание модели в реестре из локальных файлов

Скачайте модель, которая доступна в качестве выходных train_job данных, заменив <job-name> имя задания из предыдущего раздела. Модель вместе с файлами метаданных MLflow должна быть доступна в ./artifacts/model/файле .

# fetch the name of the train_job by listing all child jobs of the pipeline job
train_job_name=$(az ml job list --parent-job-name <job-name> --query [0].name | sed 's/\"//g')
# download the default outputs of the train_job
az ml job download --name $train_job_name 
# review the model files
ls -l ./artifacts/model/

Совет

Если вы не настроили рабочую область по умолчанию и группу ресурсов, как описано в разделе предварительных требований, необходимо указать --workspace-name--resource-group параметры и параметры для az ml model create работы.

Предупреждение

Выходные az ml job list данные передаются в sed. Это работает только в оболочках Linux. Если вы находитесь в Windows, запустите az ml job list --parent-job-name <job-name> --query [0].name и отрезаете все кавычки, которые вы видите в имени задания обучения.

Если вы не можете скачать модель, вы можете найти пример модели MLflow, обученную заданием обучения в предыдущем разделе в cli/jobs/pipelines-with-components/nyc_taxi_data_regression/artifacts/model/ папке.

Создайте модель в реестре:

# create model in registry
az ml model create --name nyc-taxi-model --version 1 --type mlflow_model --path ./artifacts/model/ --registry-name <registry-name>

Совет

  • Используйте случайное число для version параметра, если возникает ошибка, которая существует имя модели и версия.
  • Ту же команду az ml model create CLI можно использовать для создания моделей в рабочей области или реестре. При выполнении команды создается модель в рабочей области, а при выполнении команды --workspace-name--registry-name создается модель в реестре.

Предоставление общего доступа к модели из рабочей области в реестр

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

Убедитесь, что у вас есть имя задания конвейера из предыдущего раздела и замените его в команде, чтобы получить имя задания обучения ниже. Затем вы зарегистрируете модель из выходных данных задания обучения в рабочей области. Обратите внимание, как --path параметр ссылается на выходные данные train_job с синтаксисом azureml://jobs/$train_job_name/outputs/artifacts/paths/model .

# fetch the name of the train_job by listing all child jobs of the pipeline job
train_job_name=$(az ml job list --parent-job-name <job-name> --workspace-name <workspace-name> --resource-group <workspace-resource-group> --query [0].name | sed 's/\"//g')
# create model in workspace
az ml model create --name nyc-taxi-model --version 1 --type mlflow_model --path azureml://jobs/$train_job_name/outputs/artifacts/paths/model 

Совет

  • Используйте случайное число для version параметра, если возникает ошибка, которая существует имя модели и версия.
  • Если вы не настроили рабочую область по умолчанию и группу ресурсов, как описано в разделе предварительных требований, необходимо указать --workspace-name--resource-group параметры и параметры для az ml model create работы.

Запишите имя и версию модели. Вы можете проверить, зарегистрирована ли модель в рабочей области, просматривая ее в пользовательском интерфейсе Студии или используя az ml model show --name nyc-taxi-model --version $model_version команду.

Затем вы будете совместно использовать модель из рабочей области в реестр.

# share model registered in workspace to registry
az ml model share --name nyc-taxi-model --version 1 --registry-name <registry-name> --share-with-name <new-name> --share-with-version <new-version>

Совет

  • Не забудьте использовать правильное имя модели и версию, если вы изменили ее в команде az ml model create .
  • В приведенной выше команде есть два необязательных параметра "-share-with-name" и "--share-with-version". Если они не указаны, новая модель будет иметь то же имя и версию, что и общая модель. name Запишите и version модель из выходных данных az ml model create команды и используйте их с az ml model show командами следующим образом. При развертывании модели в сетевой конечной точке для вывода вам потребуется name и version в следующем разделе.
az ml model show --name <model_name> --version <model_version> --registry-name <registry-name>

Можно также использовать az ml model list --registry-name <registry-name> для перечисления всех моделей в реестре или просмотра всех компонентов в пользовательском интерфейсе Студия машинного обучения Azure. Перейдите к глобальному пользовательскому интерфейсу и найдите центр реестров.

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

Снимок экрана: модели в реестре.

Развертывание модели из реестра в конечную точку в сети в рабочей области

В последнем разделе вы развернете модель из реестра в конечную точку в сети в рабочей области. Вы можете развернуть любую рабочую область, к которую у вас есть доступ в организации, если расположение рабочей области является одним из расположений, поддерживаемых реестром. Эта возможность полезна, если вы обучили модель в рабочей области и теперь необходимо развернуть модель test в dev или prod рабочей области, сохраняя сведения о происхождении кода, среды и данных, используемых для обучения модели.

Сетевые конечные точки позволяют развертывать модели и отправлять запросы вывода через REST API. Дополнительные сведения см. в статье о развертывании и оценке модели машинного обучения с помощью веб-конечной точки.

Создайте конечную точку в Сети.

az ml online-endpoint create --name reg-ep-1234

model: Обновите строкуdeploy.yml, доступную в папкеcli/jobs/pipelines-with-components/nyc_taxi_data_regression, чтобы ссылаться на имя модели и версию на каждом шаге. Создайте сетевое развертывание в виртуальной конечной точке. Показан ниже deploy.yml для справки.

$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
name: demo
endpoint_name: reg-ep-1234
model: azureml://registries/<registry-name>/models/nyc-taxi-model/versions/1
instance_type: Standard_DS2_v2
instance_count: 1

Создайте сетевое развертывание. Развертывание занимает несколько минут.

az ml online-deployment create --file deploy.yml --all-traffic

Извлеките URI оценки и отправьте пример запроса оценки. Пример данных для запроса оценки доступен в папке scoring-data.jsoncli/jobs/pipelines-with-components/nyc_taxi_data_regression .

ENDPOINT_KEY=$(az ml online-endpoint get-credentials -n reg-ep-1234 -o tsv --query primaryKey)
SCORING_URI=$(az ml online-endpoint show -n reg-ep-1234 -o tsv --query scoring_uri)
curl --request POST "$SCORING_URI" --header "Authorization: Bearer $ENDPOINT_KEY" --header 'Content-Type: application/json' --data @./scoring-data.json

Совет

  • curl команда работает только в Linux.
  • Если вы не настроили рабочую область по умолчанию и группу ресурсов, как описано в разделе предварительных требований, необходимо указать --workspace-name--resource-group параметры и параметры для az ml online-endpoint работы команд az ml online-deployment .

Очистка ресурсов

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

az ml online-endpoint delete --name reg-ep-1234 --yes --no-wait

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