Совместное использование моделей, компонентов и сред в рабочих областях с помощью реестров
Машинное обучение Azure реестр позволяет совместно работать между рабочими областями в организации. С помощью реестров можно совместно использовать модели, компоненты и среды.
Существует два сценария, в которых вы хотите использовать один набор моделей, компонентов и сред в нескольких рабочих областях:
- MlOps между рабочими областями: вы обучаете модель в рабочей области и должны развертывать ее
test
вdev
иprod
рабочих областях. В этом случае необходимо иметь сквозную линию между конечными точками, в которых модель развертывается вtest
рабочих областях илиprod
в рабочих областях, а также задание обучения, метрики, код, данные и среда, которые использовались для обучения модели вdev
рабочей области. - Совместное использование моделей и конвейеров в разных командах: совместное использование и повторное использование совместной работы и повышения производительности. В этом сценарии может потребоваться опубликовать обученную модель и связанные компоненты и среды, используемые для обучения его в центральном каталоге. Оттуда коллеги из других команд могут искать и повторно использовать ресурсы, которыми вы поделились в своих собственных экспериментах.
В этой статье вы узнаете, как выполнять следующие задачи.
- Создайте среду и компонент в реестре.
- Используйте компонент из реестра для отправки задания обучения модели в рабочей области.
- Зарегистрируйте обученную модель в реестре.
- Разверните модель из реестра в веб-конечной точке в рабочей области, а затем отправьте запрос вывода.
Необходимые компоненты
Перед выполнением действий, описанных в этой статье, убедитесь, что выполнены следующие необходимые условия:
- Подписка Azure. Если у вас еще нет подписки Azure, создайте бесплатную учетную запись, прежде чем начинать работу. Попробуйте бесплатную или платную версию Машинного обучения Azure.
Реестр Машинное обучение 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/Dockerfile
docker. Ниже 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. Вы можете упаковить код, команду, среду, входной интерфейс и выходной интерфейс отдельного шага конвейера в компонент. Затем вы можете повторно использовать компонент в нескольких конвейерах, не беспокоясь о переносе зависимостей и кода при каждом написании другого конвейера.
Создание компонента в рабочей области позволяет использовать компонент в любом задании конвейера в этой рабочей области. Создание компонента в реестре позволяет использовать компонент в любом конвейере в любой рабочей области организации. Создание компонентов в реестре — отличный способ создания модульных повторно используемых служебных программ или общих задач обучения, которые можно использовать для экспериментирования различными командами в организации.
Дополнительные сведения о компонентах см. в следующих статьях:
Использование компонентов в конвейерах (SDK)
Внимание
Реестр поддерживает только именованные ресурсы (данные,модель/компонент/среда). Если вы ссылаетесь на ресурс в реестре, сначала необходимо создать его в реестре. Особенно для варианта компонента конвейера, если требуется эталонный компонент или среда в компоненте конвейера, необходимо сначала создать компонент или среду в реестре.
Убедитесь, что вы находитесь в папке 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. Перейдите к глобальному пользовательскому интерфейсу и найдите запись реестра .
Запуск задания конвейера в рабочей области с помощью компонента из реестра
При выполнении задания конвейера, использующего компонент из реестра, вычислительные ресурсы и обучающие данные являются локальными для рабочей области. Дополнительные сведения о выполнении заданий см. в следующих статьях:
- Выполнение заданий (CLI)
- Выполнение заданий (ПАКЕТ SDK)
- Задания конвейера с компонентами (CLI)
- Задания конвейера с компонентами (ПАКЕТ SDK)
Мы запустите задание конвейера с помощью компонента обучения Scikit Learn, созданного в предыдущем разделе для обучения модели. Убедитесь, что вы находитесь в папке cli/jobs/pipelines-with-components/nyc_taxi_data_regression
. Набор данных обучения расположен в папке data_transformed
. Измените component
раздел в разделе train_job
single-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-workspace
prod-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. Мы рассмотрим два разных способа создания модели в реестре. Сначала из локальных файлов. Во-вторых, необходимо скопировать модель, зарегистрированную в рабочей области, в реестр.
В обоих вариантах вы создадите модель с форматом 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.json
cli/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