ОБЛАСТЬ ПРИМЕНЕНИЯ:
Расширение машинного обучения Azure CLI версии 2 (current)
Python SDK azure-ai-ml версии 2 (current)
Машинное обучение Azure предоставляет несколько способов отправки заданий обучения машинного обучения. В этой статье вы узнаете, как отправлять задания с помощью следующих методов:
- Расширение Azure CLI для машинного обучения:
ml расширение также называется CLI версии 2.
- Пакет SDK для Python версии 2 для Машинное обучение Azure.
- REST API: API, на основе которых основан интерфейс командной строки и пакет SDK.
Необходимые компоненты
Чтобы использовать пакет SDK, установите пакет SDK машинного обучения Azure версии 2 для Python.
Чтобы использовать сведения о 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.
Клонирование репозитория примеров
Фрагменты кода в этой статье основаны на примерах в репозитории GitHub Машинное обучение Azure. Чтобы клонировать репозиторий в среду разработки, используйте следующую команду:
git clone --depth 1 https://github.com/Azure/azureml-examples
Совет
Используйте --depth 1, чтобы клонировать только последний коммит в репозиторий, что сокращает время для выполнения операции.
Пример задания
Примеры, приведенные в этой статье, используют набор данных цветка ириса для обучения модели MLFlow.
Обучение в облаке
При обучении в облаке необходимо подключиться к рабочей области Машинного обучения Azure и выбрать вычислительный ресурс для запуска задания обучения.
1. Подключение к рабочей области
Совет
Используйте следующие вкладки, чтобы выбрать метод, который вы хотите использовать для обучения модели. Выбор вкладки автоматически переключает все вкладки в этой статье на одну и ту же вкладку. Вы можете выбрать другую вкладку в любое время.
Чтобы подключиться к рабочей области, вам потребуются параметры идентификатора — подписка, группа ресурсов и имя рабочей области. Используйте эти сведения в MLClient из пространства имен azure.ai.ml, чтобы получить доступ к необходимой рабочей области Azure Machine Learning. Чтобы пройти проверку подлинности, используйте проверку подлинности 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 среды:
TOKEN=$(az account get-access-token --query accessToken -o tsv)
Поставщик услуг использует аргумент api-version для обеспечения совместимости. Аргумент api-version меняется от службы к службе.
В этой статье используются конечные точки Azure Resource Manager (management.azure.com). Задайте API_VERSION на текущую версию Менеджера ресурсов машинного обучения Azure:
API_VERSION="2025-09-01"
Если вы используете API плоскости данных Машинного обучения Azure, они могут использовать другую версию. Например, справочная документация по плоскости данных для ресурсов ИИ Azure использует 2024-04-01-preview. Дополнительные сведения см. в группах операций REST для Azure Machine Learning (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, который выполняет Python-скрипт main.py, расположенный в ./sdk/python/jobs/single-step/lightgbm/iris/src/. Вы отправляете команду, как job в Azure Machine Learning.
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 Machine Learning под названием 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 Machine Learning под названием 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:
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 Machine Learning под названием 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.
Совет
Задание на обучение возвращает свойство 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\"
}
}"
Следующие шаги
Теперь, когда у вас есть обученная модель, узнайте , как развернуть ее с помощью сетевой конечной точки.
Дополнительные примеры см. в Машинное обучение Azure репозитории GitHub.
Дополнительные сведения о командах Azure CLI, классах пакета SDK для Python или REST API, используемых в этой статье, см. в следующей справочной документации: