ПРИМЕНИМО К:
Azure CLI расширение ml версии 2 (текущая)
Python пакет SDK azure-ai-ml версии 2 (текущая)
Машинное обучение Azure предоставляет несколько способов отправки заданий обучения машинного обучения. В этой статье вы узнаете, как отправлять задания с помощью следующих методов:
- расширение Azure CLI для машинного обучения: расширение
ml также называется CLI версии 2.
- пакет SDK версии 2 Python для Машинное обучение Azure.
- REST API: API, на основе которых основан интерфейс командной строки и пакет SDK.
Необходимые условия
Чтобы использовать сведения о REST API , вам потребуется следующее:
Субъект-служба в рабочей области. Используйте аутентификацию служебного принципала для административных запросов REST.
Маркер проверки подлинности учетной записи службы. Выполните действия, описанные в разделе "Получение маркера проверки подлинности субъекта-службы ", чтобы получить этот маркер.
Утилита 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.
Клонирование репозитория примеров
Фрагменты кода в этой статье основаны на примерах в репозитории примеров Машинное обучение Azure на GitHub. Чтобы клонировать репозиторий в среду разработки, используйте следующую команду:
git clone --depth 1 https://github.com/Azure/azureml-examples
Совет
Используйте --depth 1, чтобы клонировать только последний коммит в репозиторий, что сокращает время операции.
Пример задания
Примеры, приведенные в этой статье, используют набор данных цветка ириса для обучения модели MLFlow.
Обучение в облаке
При обучении в облаке необходимо подключиться к рабочей области Машинное обучение Azure и выбрать вычислительный ресурс для запуска задания обучения.
1. Подключение к рабочей области
Совет
Используйте следующие вкладки, чтобы выбрать метод, который вы хотите использовать для обучения модели. Выбор вкладки автоматически переключает все вкладки в этой статье на одну и ту же вкладку. Вы можете выбрать другую вкладку в любое время.
Чтобы подключиться к рабочей области, вам потребуются параметры идентификатора — подписка, группа ресурсов и имя рабочей области. Используйте эти сведения в пространстве имен MLClient из пространства имен azure.ai.ml, чтобы получить дескриптор требуемой рабочей области Машинное обучение Azure. Для аутентификации используйте стандартную аутентификацию Azure. Дополнительные сведения о настройке учетных данных и подключении к рабочей области см. в этой статье example.
#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 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 среды:
TOKEN=$(az account get-access-token --query accessToken -o tsv)
Поставщик услуг использует api-version аргумент для обеспечения совместимости. Аргумент api-version зависит от службы к службе.
В этой статье рассматриваются конечные точки Azure Resource Manager (management.azure.com). Установите для API_VERSION текущую версию Машинное обучение Azure Resource Manager:
API_VERSION="2025-09-01"
Если вы используете API уровня данных Машинное обучение Azure, они могут использовать другую версию API. Например, справочник по плоскости данных Azure AI Assets использует 2024-04-01-preview. Дополнительные сведения см. в группах операций REST для Машинное обучение Azure (Resource Manager) и Azure ресурсы ИИ (плоскость данных).
При обучении с помощью REST API необходимо передать данные и обучающие скрипты в учетную запись хранения, доступ к которым может получить рабочая область. Следующий пример получает сведения о хранилище рабочей области и сохраняет его в переменные, чтобы использовать его позже:
# Get values for storage account
response=$(curl --location --request GET "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/datastores?api-version=$API_VERSION&isDefault=true" \
--header "Authorization: Bearer $TOKEN")
AZUREML_DEFAULT_DATASTORE=$(echo $response | jq -r '.value[0].name')
AZUREML_DEFAULT_CONTAINER=$(echo $response | jq -r '.value[0].properties.containerName')
export AZURE_STORAGE_ACCOUNT=$(echo $response | jq -r '.value[0].properties.accountName')
2. Создание вычислительного ресурса для обучения
Вычислительный кластер Машинное обучение Azure — это полностью управляемый вычислительный ресурс, который можно использовать для запуска задания обучения. В следующих примерах создается вычислительный кластер с именем cpu-cluster.
from azure.ai.ml.entities import AmlCompute
# specify aml compute name.
cpu_compute_target = "cpu-cluster"
try:
ml_client.compute.get(cpu_compute_target)
except Exception:
print("Creating a new cpu compute target...")
compute = AmlCompute(
name=cpu_compute_target, size="STANDARD_D2_V2", min_instances=0, max_instances=4
)
ml_client.compute.begin_create_or_update(compute).result()
az ml compute create -n cpu-cluster --type amlcompute --min-instances 0 --max-instances 4
curl -X PUT \
"https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/computes/$COMPUTE_NAME?api-version=$API_VERSION" \
-H "Authorization:Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"location": "'$LOCATION'",
"properties": {
"computeType": "AmlCompute",
"properties": {
"vmSize": "Standard_D2_V2",
"vmPriority": "Dedicated",
"scaleSettings": {
"maxNodeCount": 4,
"minNodeCount": 0,
"nodeIdleTimeBeforeScaleDown": "PT30M"
}
}
}
}'
Совет
Хотя операция возвращает ответ через несколько секунд, этот ответ указывает только на то, что запрос на создание принимается. Создание кластера может занять несколько минут.
3. Отправка задания обучения
Чтобы запустить этот скрипт, используйте command, который выполняет скрипт main.py Python, расположенный в ./sdk/python/jobs/single-step/lightgbm/iris/src/. Вы отправляете команду как job в Машинное обучение Azure.
from azure.ai.ml import command, Input
# define the command
command_job = command(
code="./src",
command="python main.py --iris-csv ${{inputs.iris_csv}} --learning-rate ${{inputs.learning_rate}} --boosting ${{inputs.boosting}}",
environment="AzureML-lightgbm-3.2-ubuntu18.04-py37-cpu@latest",
inputs={
"iris_csv": Input(
type="uri_file",
path="https://azuremlexamples.blob.core.windows.net/datasets/iris.csv",
),
"learning_rate": 0.9,
"boosting": "gbdt",
},
compute="cpu-cluster",
)
# 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.3@latest. Вы также можете использовать пользовательские среды, указав базовый образ Docker и указав файл yaml для conda поверх него.
-
inputs — словарь входных параметров команды, представленных в виде пар «имя-значение». Ключ — это имя входных данных в контексте задания, а значение — входное значение. Ссылайтесь на входные данные в command с помощью выражения ${{inputs.<input_name>}}. Чтобы использовать файлы или папки в качестве входных данных, используйте Input класс. Дополнительные сведения см. в выражениях SDK и CLI версии 2.
Дополнительные сведения см. в справочной документации.
При отправке задания служба возвращает URL-адрес состояния задания в Студия машинного обучения Azure. Используйте пользовательский интерфейс студии для просмотра хода выполнения задания. Можно также использовать returned_job.status для проверки текущего состояния задания.
Для az ml job create команды в этом примере требуется файл определения задания YAML. Файл, используемый в этом примере, содержит следующее содержимое:
$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.
В предыдущем YAML вы настроили следующее:
-
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 reference.
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. Дополнительные сведения о ссылках на данные см. в разделе Data в Машинное обучение Azure:
DATA_VERSION=$RANDOM
curl --location --request PUT "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/data/iris-data/versions/$DATA_VERSION?api-version=$API_VERSION" \
--header "Authorization: Bearer $TOKEN" \
--header "Content-Type: application/json" \
--data-raw "{
\"properties\": {
\"description\": \"Iris dataset\",
\"dataType\": \"uri_file\",
\"dataUri\": \"https://azuremlexamples.blob.core.windows.net/datasets/iris.csv\"
}
}"
Зарегистрируйте версионную ссылку на скрипт обучения для использования с работой. В этом примере расположение скрипта — это учетная запись хранилища и контейнер по умолчанию, в который вы загрузились на шаге 1. Идентификатор версии кода обучения возвращается и хранится в переменной $TRAIN_CODE.
TRAIN_CODE=$(curl --location --request PUT "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/codes/train-lightgbm/versions/1?api-version=$API_VERSION" \
--header "Authorization: Bearer $TOKEN" \
--header "Content-Type: application/json" \
--data-raw "{
\"properties\": {
\"description\": \"Train code\",
\"codeUri\": \"https://$AZURE_STORAGE_ACCOUNT.blob.core.windows.net/$AZUREML_DEFAULT_CONTAINER/testjob\"
}
}" | jq -r '.id')
Создайте среду, которую кластер использует для запуска скрипта обучения. В этом примере используйте курированную или готовую среду, предоставляемую Машинное обучение Azure с именем AzureML-lightgbm-3.3.
Azure Resource Manager не поддерживает ярлык @latest для идентификаторов среды. Следующая команда содержит список версий среды и выбирает идентификатор последней измененной версии, который затем хранится в переменной $ENVIRONMENT .
ENVIRONMENT_NAME="AzureML-lightgbm-3.3"
ENVIRONMENT=$(curl --location --request GET "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/environments/$ENVIRONMENT_NAME/versions?api-version=$API_VERSION" \
--header "Authorization: Bearer $TOKEN" | jq -r '.value | sort_by(.systemData.lastModifiedAt) | last | .id')
Наконец, отправьте задание. В следующем примере показано, как отправить задание, ссылаться на код обучения, идентификатор среды, URL-адрес входных данных и идентификатор вычислительного кластера. Расположение выходных данных задания хранится в переменной $JOB_OUTPUT :
Совет
Имя задания должно быть уникальным. В этом примере uuidgen используется для создания уникального значения имени.
run_id=$(uuidgen)
curl --location --request PUT "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/jobs/$run_id?api-version=$API_VERSION" \
--header "Authorization: Bearer $TOKEN" \
--header "Content-Type: application/json" \
--data-raw "{
\"properties\": {
\"jobType\": \"Command\",
\"codeId\": \"$TRAIN_CODE\",
\"command\": \"python main.py --iris-csv \$AZURE_ML_INPUT_iris\",
\"environmentId\": \"$ENVIRONMENT\",
\"inputs\": {
\"iris\": {
\"jobInputType\": \"uri_file\",
\"uri\": \"https://azuremlexamples.blob.core.windows.net/datasets/iris.csv\"
}
},
\"experimentName\": \"lightgbm-iris\",
\"computeId\": \"/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/computes/$COMPUTE_NAME\"
}
}"
Важно
Машинное обучение Azure обучающие и командные задания не поддерживают реестры контейнеров Azure (ACR), которые используют кастомизированные метки доменных имен. Задания, ссылающиеся на такой реестр, могут завершиться сбоем во время запуска из-за ошибок при извлечении образа или разрешении среды. Чтобы избежать этой проблемы, выполните указанные ниже действия.
- Используйте формат сервера входа по умолчанию (
<registry-name>.azurecr.io) для ACR.
- При создании реестра задайте область метки доменного имени как незащищённое.
Регистрация обученной модели
В следующих примерах показано, как зарегистрировать модель в рабочей области Машинное обучение Azure.
Совет
Задание на обучение возвращает свойство 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 в рамках пути к модели.
curl --location --request PUT "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/models/sklearn/versions/1?api-version=$API_VERSION" \
--header "Authorization: Bearer $TOKEN" \
--header "Content-Type: application/json" \
--data-raw "{
\"properties\": {
\"modelType\": \"mlflow_model\",
\"modelUri\":\"runs:/$run_id/model\"
}
}"
Дальнейшие действия
Теперь, когда у вас есть обученная модель, узнайте, как развернуть ее с помощью сетевой конечной точки.
Дополнительные примеры см. в репозитории GitHub примеров Машинное обучение Azure.
Дополнительные сведения о командах Azure CLI, классах пакета SDK Python или REST API, используемых в этой статье, см. в следующей справочной документации: