Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Реестр машинного обучения Azure позволяет совместно работать в разных рабочих областях вашей организации. С помощью реестров можно совместно использовать модели, компоненты и среды.
Существует два сценария, в которых вы хотите использовать один набор моделей, компонентов и сред в нескольких рабочих областях:
-
MlOps между рабочими областями: вы обучаете модель в рабочей области и должны развертывать ее
devвtestиprodрабочих областях. В этом случае необходимо иметь сквозные связи между конечными точками, на которых модель развернута в рабочих пространствахtestилиprod, и заданием обучения, метриками, кодом, данными и средой, использованной для обучения модели в рабочем пространствеdev. - Совместное использование моделей и конвейеров в разных командах: совместное использование и повторное использование улучшают сотрудничество и повышают производительность. В этом сценарии может потребоваться опубликовать обученную модель и связанные компоненты и среды, используемые для обучения его в центральном каталоге. Оттуда коллеги из других команд могут искать и повторно использовать ресурсы, которыми вы поделились в своих собственных экспериментах.
В этой статье вы узнаете, как:
- Создайте среду и компонент в реестре.
- Используйте компонент из реестра для отправки задания на обучение модели в рабочем пространстве.
- Зарегистрируйте обученную модель в реестре.
- Разверните модель из реестра в веб-конечной точке в рабочей области, а затем отправьте запрос вывода.
Предварительные условия
Перед выполнением действий, описанных в этой статье, убедитесь, что выполнены следующие необходимые условия:
- Подписка Azure. Если у вас еще нет подписки Azure, создайте бесплатную учетную запись, прежде чем начинать работу. Попробуйте бесплатную или платную версию Машинного обучения Azure.
Реестр машинного обучения Azure для совместного использования моделей, компонентов и сред. Сведения о создании реестра см. в статье "Сведения о создании реестра".
Рабочая область Машинного обучения Azure. Чтобы создать его, если у вас его нет, следуйте шагам, изложенным в статье Краткое руководство: Создание ресурсов рабочей области.
Внимание
Регион Azure (расположение), в котором создается рабочая область, должна находиться в списке поддерживаемых регионов для реестра Машинное обучение Azure
Azure CLI и
mlрасширение или Python SDK v2 для Azure Machine Learning:Чтобы установить Azure CLI и расширение, см. статью "Установка,настройка" и использование интерфейса командной строки (версии 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 примере в репозитории примеров. Чтобы использовать эти файлы в среде разработки, используйте следующие команды, чтобы клонировать репозиторий и изменить каталоги в примере:
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.10 образ Docker и устанавливает пакеты 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 Machine Learning. Убедитесь, что вы перейдете к глобальному интерфейсу пользователя и найдите элемент 'Реестры'.
Замечание
Управляемое удостоверение AcrPull , назначаемое системой, имеет разрешение на экземпляр реестра контейнеров Azure (ACR), связанный с этим реестром. Если вычислительному узлу рабочей области необходимо извлечь образ среды, реестр AzureML создает и возвращает маркер ACR с соответствующей картой области действия, что позволяет узлу извлечь этот образ. Ни рабочая область, ни управляемое удостоверение для вычислений не имеют прямого доступа к ACR реестра.
Создание компонента в реестре
Компоненты — это повторно используемые строительные блоки конвейеров машинного обучения в Azure Machine Learning. Вы можете упаковить код, команду, среду, интерфейс ввода и выходной интерфейс отдельного шага конвейера в компонент. Затем вы можете повторно использовать компонент в нескольких конвейерах, не беспокоясь о переносе зависимостей и кода при каждом написании другого конвейера.
Создание компонента в рабочей области позволяет использовать компонент в любом задании конвейера в этой рабочей области. Создание компонента в реестре позволяет использовать компонент в любом конвейере в любой рабочей области организации. Создание компонентов в реестре — отличный способ создания модульных повторно используемых служебных программ или общих задач обучения, которые можно использовать для экспериментирования различными командами в организации.
Дополнительные сведения о компонентах см. в следующих статьях:
Использование компонентов в конвейерах (SDK)
Внимание
Реестр поддерживает только именованные ресурсы (данные,модель/компонент/среда). Чтобы ссылаться на ресурс в реестре, сначала необходимо создать его в реестре. В случае с компонентом конвейера, если требуется ссылочный компонент или окружение, сначала необходимо создать этот компонент или окружение в реестре.
Убедитесь, что вы находитесь в папке cli/jobs/pipelines-with-components/nyc_taxi_data_regression. Вы можете найти файл train.yml определения компонента, который упаковывает скрипт обучения Scikit Learn train_src/train.py. Элемент 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 или переопределить версию в интерфейсе командной строки на случайную версию.
Запишите 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 Machine Learning Studio. Убедитесь, что вы перейдете к глобальному интерфейсу пользователя и найдите элемент 'Реестры'.
Запуск задания конвейера в рабочей области с помощью компонента из реестра
При выполнении задания конвейера, использующего компонент из реестра, вычислительные ресурсы и обучающие данные являются локальными для рабочей области. Дополнительные сведения о выполнении заданий см. в следующих статьях:
- Выполнение заданий (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 Machine Learning Studio выберите в выходных данных задания ссылку конечной точки, чтобы просмотреть задание. Здесь можно проанализировать метрики обучения, убедиться, что задание использует компонент и среду из реестра, и просмотреть обученную модель.
name Запишите идентификатор задания из выходных данных или найдите ту же информацию в обзоре задания в Azure Machine Learning Studio. Эти сведения потребуются для скачивания обученной модели в следующем разделе по созданию моделей в реестре.
Создание модели в реестре
Вы узнаете, как создавать модели в реестре в этом разделе. Просмотрите управление моделями, чтобы узнать больше об управлении моделями в Azure Machine Learning. Мы рассмотрим два разных способа создания модели в реестре. Сначала данные берутся из локальных файлов. Во-вторых, необходимо скопировать модель, зарегистрированную в рабочей области, в реестр.
В обоих вариантах создается модель с форматом 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 Machine Learning показана модель в реестре. Если вы создали модель из выходных данных задания, а затем скопировали модель из рабочей области в реестр, вы увидите, что модель имеет ссылку на задание, обучившее модель. Эту ссылку можно использовать для перехода к заданию обучения для просмотра кода, среды и данных, используемых для обучения модели.
Развертывание модели из реестра в конечную точку в сети в рабочей области
В последнем разделе вы развернете модель из реестра в конечную точку в сети в рабочей области. Вы можете развернуть любую рабочую область, к которой у вас есть доступ в вашей организации, если местоположение рабочей области является одним из местоположений, поддерживаемых реестром. Эта возможность полезна, если вы обучили модель в рабочей области dev, и теперь необходимо развернуть модель в рабочей области test или prod, сохраняя сведения о трассировке кода, вычислительной среды и данных, использованных для обучения модели.
Сетевые конечные точки позволяют развертывать модели и отправлять запросы вывода через REST API. Дополнительные сведения см. в статье о развертывании и оценке модели машинного обучения с помощью веб-конечной точки.
Совет
В этом примере для простоты используется проверка подлинности на основе ключей. Для рабочих развертываний корпорация Майкрософт рекомендует проверку подлинности на основе токенов 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.
Очистка ресурсов
Если вы не собираетесь использовать развертывание, удалите его, чтобы сократить затраты. В следующем примере удаляется конечная точка и все базовые развертывания:
az ml online-endpoint delete --name reg-ep-1234 --yes --no-wait