Машинное обучение Azure предоставляет несколько способов отправки заданий обучения машинного обучения. В этой статье вы узнаете, как отправлять задания с помощью следующих методов:
Расширение Azure CLI для машинного обучения: ml расширение также называется CLI версии 2.
Пакет SDK для Python версии 2 для Машинное обучение Azure.
REST API: API, на основе которых основан интерфейс командной строки и пакет SDK.
Служебная программа curl. Программа curl доступна в подсистема Windows для Linux или любом дистрибутиве UNIX.
Совет
В PowerShell curl используется псевдоним для Invoke-WebRequest и curl -d "key=val" -X POST uri становится Invoke-WebRequest -Body "key=val" -Method POST -Uri uri.
Хотя можно вызвать REST API из PowerShell, в примерах в этой статье предполагается, что вы используете Bash.
Программа jq для обработки JSON. Эта программа используется для извлечения значений из документов JSON, возвращаемых из вызовов REST API.
Клонирование репозитория примеров
Фрагменты кода в этой статье основаны на примерах в репозитории GitHub Машинное обучение Azure. Чтобы клонировать репозиторий в среду разработки, используйте следующую команду:
При использовании параметра --depth 1 клонируется только последняя фиксация, что сокращает время выполнения операции.
Пример задания
Примеры, приведенные в этой статье, используют набор данных цветка ириса для обучения модели MLFlow.
Обучение в облаке
При обучении в облаке необходимо подключиться к рабочей области Машинное обучение Azure и выбрать вычислительный ресурс, который будет использоваться для запуска задания обучения.
1. Подключение к рабочей области
Совет
Используйте приведенные ниже вкладки, чтобы выбрать метод, который вы хотите использовать для обучения модели. При выборе вкладки все вкладки в этой статье будут автоматически переключаться на одну и ту же вкладку. Вы можете выбрать другую вкладку в любое время.
Чтобы подключиться к рабочей области, вам потребуются параметры идентификатора — подписка, группа ресурсов и имя рабочей области. Эти сведения будут использоваться в MLClientazure.ai.ml пространстве имен для получения дескриптора требуемой рабочей области Машинное обучение Azure. Для проверки подлинности используется проверка подлинности Azure по умолчанию. Дополнительные сведения о настройке учетных данных и подключении к рабочей области см. в этом примере.
#import required libraries
from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential
#Enter details of your Azure Machine Learning workspace
subscription_id = '<SUBSCRIPTION_ID>'
resource_group = '<RESOURCE_GROUP>'
workspace = '<AZUREML_WORKSPACE_NAME>'
#connect to the workspace
ml_client = MLClient(DefaultAzureCredential(), subscription_id, resource_group, workspace)
При использовании Azure CLI требуются параметры идентификатора — подписка, группа ресурсов и имя рабочей области. Хотя эти параметры можно указать для каждой команды, можно также задать значения по умолчанию, которые будут использоваться для всех команд. Используйте следующие команды, чтобы задать значения по умолчанию. Замените <subscription ID>, <Azure Machine Learning workspace name>а <resource group> также значениями конфигурации:
az account set --subscription <subscription ID>
az configure --defaults workspace=<Azure Machine Learning workspace name> group=<resource group>
Примеры REST API в этой статье используют $SUBSCRIPTION_ID, $RESOURCE_GROUP$LOCATIONи $WORKSPACE заполнители. Замените заполнители собственными значениями следующим образом:
$SUBSCRIPTION_ID: идентификатор подписки Azure.
$RESOURCE_GROUP: группа ресурсов Azure, содержащая рабочую область.
$LOCATION: регион Azure, в котором находится ваша рабочая область.
$WORKSPACE: имя рабочей области Машинное обучение Azure.
$COMPUTE_NAME: имя Машинное обучение Azure вычислительного кластера.
Административные запросы REST запрашивают маркер проверки подлинности субъекта-службы. Маркер можно получить с помощью следующей команды. Маркер хранится в переменной $TOKEN среды:
Поставщик услуг использует аргумент api-version для обеспечения совместимости. Аргумент api-version меняется от службы к службе. Для возможности использования будущих версий API задайте ее в виде переменной:
API_VERSION="2022-05-01"
При обучении с помощью REST API данные и скрипты обучения должны быть отправлены в учетную запись хранения, доступ к которым может получить рабочая область. Следующий пример получает сведения о хранилище рабочей области и сохраняет его в переменные, чтобы использовать его позже:
Кластер вычислений Машинное обучение Azure — это полностью управляемый вычислительный ресурс, который можно использовать для запуска задания обучения. В следующих примерах создается вычислительный cpu-compute кластер.
Для выполнения этого скрипта вы будете использовать command скрипт Python, который выполняет main.py скрипт Python, расположенный в разделе ./sdk/python/jobs/single-step/lightgbm/iris/src/. Команда будет выполняться путем отправки ее в качестве job Машинное обучение Azure.
# submit the command
returned_job = ml_client.jobs.create_or_update(command_job)
# get a URL for the status of the job
returned_job.studio_url
В приведенных выше примерах настроено:
code — путь, по которому находится код для выполнения команды;
command — команда, которую необходимо выполнить;
environment — среда, необходимая для запуска скрипта обучения. В этом примере мы используем курированную или готовую среду, предоставляемую Машинное обучение Azure.AzureML-lightgbm-3.2-ubuntu18.04-py37-cpu Мы используем последнюю версию этой среды с помощью директивы @latest . Вы также можете использовать пользовательские среды, указав базовый образ Docker и указав в нем yaml conda.
inputs — словарь входных данных, использующих пары "значение-имя" для команды. Ключ — это имя входных данных в контексте задания, а значение — это входное значение. На входные данные можно ссылаться в command с помощью выражения ${{inputs.<input_name>}}. Для использования файлов или папок в качестве входных данных можно использовать класс Input. Дополнительные сведения см. в выражениях SDK и CLI версии 2.
Дополнительные сведения см. в справочной документации.
При отправке задания URL-адрес возвращается в состояние задания в Студия машинного обучения Azure. Используйте пользовательский интерфейс студии для просмотра хода выполнения задания. Можно также использовать returned_job.status для проверки текущего состояния задания.
Для az ml job create команды, используемой в этом примере, требуется файл определения задания YAML. Содержимое файла, используемого в этом примере:
Примечание.
Чтобы использовать бессерверные вычисления, удалите compute: azureml:cpu-cluster" его в этом коде.
$schema: https://azuremlschemas.azureedge.net/latest/commandJob.schema.json
code: src
command: >-
python main.py
--iris-csv ${{inputs.iris_csv}}
inputs:
iris_csv:
type: uri_file
path: https://azuremlexamples.blob.core.windows.net/datasets/iris.csv
environment: azureml:AzureML-lightgbm-3.3@latest
compute: azureml:cpu-cluster
display_name: lightgbm-iris-example
experiment_name: lightgbm-iris-example
description: Train a LightGBM model on the Iris dataset.
В приведенном выше примере вы настроили:
code — путь, по которому находится код для выполнения команды;
command — команда, которую необходимо выполнить;
inputs — словарь входных данных, использующих пары "значение-имя" для команды. Ключ — это имя входных данных в контексте задания, а значение — это входное значение. На входные данные можно ссылаться в command с помощью выражения ${{inputs.<input_name>}}. Дополнительные сведения см. в выражениях SDK и CLI версии 2.
environment — среда, необходимая для запуска скрипта обучения. В этом примере мы используем курированную или готовую среду, предоставляемую Машинное обучение Azure.AzureML-lightgbm-3.3 Мы используем последнюю версию этой среды с помощью директивы @latest . Вы также можете использовать пользовательские среды, указав базовый образ Docker и указав в нем yaml conda.
Чтобы отправить задание, используйте следующую команду. Идентификатор выполнения (имя) задания обучения хранится в переменной $run_id :
run_id=$(az ml job create -f jobs/single-step/lightgbm/iris/job.yml --query name -o tsv)
Для возврата сведений о задании можно использовать хранимый идентификатор выполнения. Параметр --web открывает веб-интерфейс Студия машинного обучения Azure, в котором можно подробно ознакомиться с заданием:
az ml job show -n $run_id --web
В рамках отправки заданий скрипты обучения и данные должны быть отправлены в облачное хранилище, к которому может получить доступ Машинное обучение Azure рабочая область.
Чтобы отправить скрипт обучения, используйте следующую команду Azure CLI. Команда указывает каталог , содержащий файлы, необходимые для обучения, а не отдельный файл. Если вы хотите использовать REST для отправки данных, см. ссылку Put BLOB-объектов :
az storage blob upload-batch -d $AZUREML_DEFAULT_CONTAINER/testjob -s cli/jobs/single-step/lightgbm/iris/src/ --account-name $AZURE_STORAGE_ACCOUNT
Создайте версию ссылки на обучающие данные. В этом примере данные уже находятся в облаке и находятся в https://azuremlexamples.blob.core.windows.net/datasets/iris.csvэтом примере. Дополнительные сведения о ссылке на данные см. в Машинное обучение Azure:
Зарегистрируйте версию ссылки на скрипт обучения для использования с заданием. В этом примере расположение скрипта — это учетная запись хранения по умолчанию и контейнер, который вы отправили на шаг 1. Идентификатор кода обучения с версиями возвращается и хранится в переменной $TRAIN_CODE :
Создайте среду, которую кластер будет использовать для запуска скрипта обучения. В этом примере мы используем курированную или готовую среду, предоставляемую Машинное обучение Azure.AzureML-lightgbm-3.2-ubuntu18.04-py37-cpu Следующая команда извлекает список версий среды с новыми версиями в верхней части коллекции. jq используется для получения идентификатора последней ([0]) версии, которая затем хранится в переменной $ENVIRONMENT .
Наконец, отправьте задание. В следующем примере показано, как отправить задание, ссылаться на код обучения, идентификатор среды, URL-адрес входных данных и идентификатор вычислительного кластера. Расположение выходных данных задания будет храниться в переменной $JOB_OUTPUT :
Совет
Имя задания должно быть уникальным. В этом примере uuidgen используется для создания уникального значения имени.
Свойство name , возвращаемое заданием обучения, используется как часть пути к модели.
from azure.ai.ml.entities import Model
from azure.ai.ml.constants import AssetTypes
run_model = Model(
path="azureml://jobs/{}/outputs/artifacts/paths/model/".format(returned_job.name),
name="run-model-example",
description="Model created from run.",
type=AssetTypes.MLFLOW_MODEL
)
ml_client.models.create_or_update(run_model)
Совет
Имя (хранящееся в переменной $run_id ) используется как часть пути к модели.
az ml model create -n sklearn-iris-example -v 1 -p runs:/$run_id/model --type mlflow_model
Совет
Имя (хранящееся в переменной $run_id ) используется как часть пути к модели.
Дополнительные сведения о командах Azure CLI, классах пакета SDK для Python или REST API, используемых в этой статье, см. в следующей справочной документации: