Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Машинное обучение Azure реестр позволяет совместно работать между рабочими областями в организации. С помощью реестров можно совместно использовать модели, компоненты и среды.
Существует два сценария, в которых вы хотите использовать один набор моделей, компонентов и сред в нескольких рабочих областях:
-
Кросс-пространственная MLOps: вы обучаете модель в одной рабочей области и должны развернуть её в
testиprodрабочих областях. В этом случае вам необходимо обеспечить сквозную прослеживаемость между конечными точками, на которые развертывается модель в рабочих областяхtestилиprod, и заданием обучения, метриками, кодом, данными и средой, использованными для обучения модели в рабочей областиdev. - Совместное использование моделей и конвейеров в разных командах: это способствует улучшению совместной работы и повышению производительности благодаря обмену и повторному применению. В этом сценарии может потребоваться опубликовать обученную модель и связанные компоненты и среды, используемые для обучения его в центральном каталоге. Оттуда коллеги из других команд могут искать и повторно использовать ресурсы, которыми вы поделились в своих собственных экспериментах.
В этой статье описано, как:
- Создайте среду и компонент в реестре.
- Используйте компонент из реестра, чтобы отправить задание на обучение модели в рабочем пространстве.
- Зарегистрируйте обученную модель в реестре.
- Разверните модель из реестра в веб-конечной точке в рабочей области, а затем отправьте запрос вывода.
Необходимые условия
Перед выполнением действий, описанных в этой статье, убедитесь, что у вас есть следующие предварительные требования:
- Подписка Azure. Если у вас нет подписки Azure, создайте бесплатную учетную запись перед началом работы. Попробуйте версию free или платную версию Машинное обучение Azure.
Реестр Машинное обучение Azure для совместного использования моделей, компонентов и сред. Сведения о создании реестра см. в статье " Сведения о создании реестра".
Рабочая область Машинное обучение Azure. Чтобы создать ресурс, если у вас его нет, выполните действия, описанные в статье «Быстрый старт: Создание ресурсов рабочей области».
Важно
Регион Azure (расположение), в котором создается рабочая область, должна находиться в списке поддерживаемых регионов для реестра Машинное обучение Azure
Azure CLI и расширение
mlor пакета SDK Машинное обучение Azure Python версии 2:Чтобы установить Azure CLI и расширение, см. раздел Install, настройка и использование интерфейса командной строки (версии 2).
Важно
В примерах интерфейса командной строки в этой статье предполагается, что вы используете оболочку 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 в репозитории examples. Чтобы использовать эти файлы в среде разработки, используйте следующие команды, чтобы клонировать репозиторий и изменить каталоги в примере:
git clone https://github.com/Azure/azureml-examples
cd azureml-examples
В примере CLI измените каталоги на cli/jobs/pipelines-with-components/nyc_taxi_data_regression в локальном клоне репозитория examples.
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 создает среду в реестре.
Мы создадим среду, которая использует образ docker python:3.10 и устанавливает Python пакеты, необходимые для выполнения задания обучения с помощью платформы SciKit Learn. Если вы клонировали репозиторий с примерами и находитесь в папке cli/jobs/pipelines-with-components/nyc_taxi_data_regression, вы сможете увидеть файл определения среды env_train.yml, который ссылается на docker-файл env_train/Dockerfile. Содержимое env_train.yml выглядит следующим образом:
$schema: https://azuremlschemas.azureedge.net/latest/environment.schema.json
name: SKLearnEnv
version: 1-<VERSION>
description: Scikit Learn environment
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. Проследуйте к глобальному пользовательскому интерфейсу и найдите запись Реестры.
Примечание
Назначаемое системой управляемое удостоверение ресурса реестра имеет разрешение AcrPull для экземпляра Реестр контейнеров Azure (ACR), связанного с этим реестром. Если вычислительные ресурсы рабочей области должны получить образ среды, реестр AzureML создает и возвращает токен ACR с соответствующей картой диапазона, что позволяет вычислительным ресурсам рабочей области получить образ. Ни рабочая область, ни управляемая идентификация вычислений не имеют прямого доступа к реестру ACR (Azure Container Registry).
Создание компонента в реестре
Компоненты являются многократно используемыми стандартными блоками конвейеров Машинное обучение в Машинное обучение Azure. Вы можете упаковить код, команду, среду, интерфейс ввода и выходной интерфейс отдельного шага конвейера в компонент. Затем вы можете повторно использовать компонент в нескольких конвейерах, не беспокоясь о переносе зависимостей и кода при каждом написании другого конвейера.
Создание компонента в рабочей области позволяет использовать компонент в любом задании конвейера в этой рабочей области. Создание компонента в реестре позволяет использовать компонент в любом конвейере в любой рабочей области организации. Создание компонентов в реестре — отличный способ создания модульных повторно используемых служебных программ или общих задач обучения, которые можно использовать для экспериментирования различными командами в организации.
Дополнительные сведения о компонентах см. в следующих статьях:
Использование компонентов в конвейерах (SDK)
Важно
Реестр поддерживает только именованные ресурсы (данные,модель/компонент/среда). Чтобы ссылаться на ресурс в реестре, сначала необходимо создать его в реестре. Особенно в случае компонента конвейера, если требуется сослаться на компонент или среду в компоненте конвейера, сначала необходимо создать этот компонент или среду в реестре.
Убедитесь, что вы находитесь в папке cli/jobs/pipelines-with-components/nyc_taxi_data_regression. Вы находите файл train.yml определения компонента, который упаковывает скрипт train_src/train.py обучения Scikit Learn. Этот компонент train.yml использует курированную средуsklearn-1.5 из azureml реестра. Вы можете изменить поле 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/azureml/environments/sklearn-1.5/labels/latest
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}}
# </component>
Если вы хотите использовать свою среду из предыдущего шага вместо курированной среды, обновите поле environment на azureml://registries/<registry-name>/environments/SKLearnEnv/versions/1.
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
Совет
Если вы получите сообщение об ошибке, что имя компонента уже существует в реестре, можно либо изменить версию в 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. Эти сведения потребуются для скачивания обученной модели в следующем разделе по созданию моделей в реестре.
Создание модели в реестре
Вы узнаете, как создавать модели в реестре в этом разделе. Просмотрите раздел manage models, чтобы узнать больше об управлении моделями в Машинное обучение 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 createCLI можно использовать для создания моделей в рабочей области или реестре. При выполнении команды--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. Если вы создали модель из выходных данных задания, а затем скопировали модель из рабочего пространства в реестр, вы увидите, что у модели есть ссылка на задание, которое обучило модель. Эту ссылку можно использовать для перехода к заданию обучения для просмотра кода, среды и данных, используемых для обучения модели.
Развертывание модели из регистра в онлайновую конечную точку в рабочей области.
В последнем разделе вы развернете модель из реестра в конечную точку в сети в рабочей области. Вы можете развернуть любую рабочую область, к которую у вас есть доступ в организации, если расположение рабочей области является одним из расположений, поддерживаемых реестром. Эта возможность полезна, если вы обучили модель в рабочей области dev, и теперь необходимо развернуть модель в test или prod рабочие области, сохраняя линейную информацию о коде, среде и данных, которые использовались для обучения модели.
Сетевые конечные точки позволяют развертывать модели и отправлять запросы вывода через REST API. Дополнительные сведения см. в статье о развертывании и оценке модели машинного обучения с помощью веб-конечной точки.
Совет
В этом примере для простоты используется проверка подлинности на основе ключей. Для производственных развертываний Microsoft рекомендует аутентификацию с использованием токенов Microsoft Entra (aad_token), которая обеспечивает повышенную безопасность через управление доступом на основе идентичности. Дополнительные сведения см. в разделе "Проверка подлинности клиентов для сетевых конечных точек".
Создайте конечную точку в Сети.
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_DS3_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
Важно
- Для конечных точек, созданных с использованием пользовательской назначенной идентичности, требуется ручное назначение ролей. Удостоверение должно иметь
ACRPullиStorage Blob Data Readerроли на уровне подписки.
Совет
-
curlкоманда работает только в Linux. - Если вы не настроили рабочую область и группу ресурсов по умолчанию, как описано в разделе предварительных требований, вам нужно указать параметры
--workspace-nameи--resource-groupдля работы командaz ml online-endpointиaz ml online-deployment.
Очистка ресурсов
Если вы не собираетесь использовать развертывание, удалите его, чтобы сократить затраты. В следующем примере удаляется конечная точка и все базовые развертывания: