ОБЛАСТЬ ПРИМЕНЕНИЯ:
Расширение машинного обучения 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. Для проверки подлинности используется проверка подлинности 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
меняется от службы к службе. Для возможности использования будущих версий API задайте ее в виде переменной:
API_VERSION="2022-05-01"
При обучении с помощью 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-compute
кластер.
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 скрипт 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.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. Содержимое файла, используемого в этом примере:
$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:
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.2-ubuntu18.04-py37-cpu
Следующая команда извлекает список версий среды с новыми версиями в верхней части коллекции. jq
используется для получения идентификатора последней ([0]
) версии, которая затем хранится в переменной $ENVIRONMENT
.
ENVIRONMENT=$(curl --location --request GET "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/environments/AzureML-lightgbm-3.2-ubuntu18.04-py37-cpu?api-version=$API_VERSION" --header "Authorization: Bearer $TOKEN" | jq -r .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, используемых в этой статье, см. в следующей справочной документации: