Обучение моделей с помощью Машинное обучение Azure интерфейса командной строки, пакета SDK и REST API

ПРИМЕНИМО К:Azure CLI расширение ml версии 2 (текущая)Python пакет SDK azure-ai-ml версии 2 (текущая)

Машинное обучение Azure предоставляет несколько способов отправки заданий обучения машинного обучения. В этой статье вы узнаете, как отправлять задания с помощью следующих методов:

  • расширение Azure CLI для машинного обучения: расширение ml также называется CLI версии 2.
  • пакет SDK версии 2 Python для Машинное обучение Azure.
  • REST API: API, на основе которых основан интерфейс командной строки и пакет SDK.

Необходимые условия

Чтобы использовать пакет SDK, выполните указанные ниже действия.

Клонирование репозитория примеров

Фрагменты кода в этой статье основаны на примерах в репозитории примеров Машинное обучение Azure на GitHub. Чтобы клонировать репозиторий в среду разработки, используйте следующую команду:

git clone --depth 1 https://github.com/Azure/azureml-examples
cd azureml-examples

Совет

Используйте --depth 1, чтобы клонировать только последний коммит в репозиторий, что сокращает время операции.

В оставшейся части этой статьи предполагается, что вы выполняете команды из каталога azureml-examples.

Пример задания

Примеры, приведенные в этой статье, используют набор данных цветка ириса для обучения модели MLFlow.

Обучение в облаке

При обучении в облаке необходимо подключиться к рабочей области Машинное обучение Azure и выбрать вычислительный ресурс для запуска задания обучения.

Подключение к рабочей области

Совет

Используйте следующие вкладки, чтобы выбрать метод, который вы хотите использовать для обучения модели. Выбор вкладки автоматически переключает все вкладки в этой статье на одну и ту же вкладку. Вы можете выбрать другую вкладку в любое время.

Чтобы подключиться к рабочей области, вам потребуются параметры идентификатора — подписка, группа ресурсов и имя рабочей области. Используйте эти сведения в пространстве имен 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)

Проверьте подключение, распечатав имя рабочей области:

print(ml_client.workspace_name)

Создание вычислительного ресурса для обучения

Примечание

Чтобы попробовать бессерверные вычисления, пропустите этот шаг и перейдите к отправке задания обучения.

Вычислительный кластер Машинное обучение 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()

Убедитесь, что вычислительный кластер существует:

cpu_cluster = ml_client.compute.get("cpu-cluster")
print(f"Compute '{cpu_cluster.name}' provisioning state: {cpu_cluster.provisioning_state}")

Отправка задания обучения

Чтобы запустить этот скрипт, используйте command, который выполняет скрипт main.py Python, расположенный в ./sdk/python/jobs/single-step/lightgbm/iris/src/. Вы отправляете команду как job в Машинное обучение Azure.

Примечание

Чтобы использовать бессерверные вычисления, удалите compute="cpu-cluster" в этом коде.

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",
)

Отправьте задание в том же сеансе Python:

# 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 для проверки текущего состояния задания.

print(f"Studio URL: {returned_job.studio_url}")

Важно

Машинное обучение Azure обучающие и командные задания не поддерживают реестры контейнеров Azure (ACR), которые используют кастомизированные метки доменных имен. Задания, ссылающиеся на такой реестр, могут завершиться сбоем во время запуска из-за ошибок при извлечении образа или разрешении среды. Чтобы избежать этой проблемы, выполните указанные ниже действия.

  • Используйте формат сервера входа по умолчанию (<registry-name>.azurecr.io) для ACR.
  • При создании реестра задайте область метки доменного имени как незащищённое.

Отслеживайте задание по обучению

Дождитесь завершения задания обучения перед регистрацией модели. Состояние задания изменяется следующим образом: StartingPreparingRunningCompleted.

Используется ml_client.jobs.stream() для отслеживания выходных данных задания в режиме реального времени:

ml_client.jobs.stream(returned_job.name)

Кроме того, проверьте состояние задания программным способом:

returned_job = ml_client.jobs.get(returned_job.name)
print(f"Job status: {returned_job.status}")

Регистрация обученной модели

В следующих примерах показано, как зарегистрировать модель в рабочей области Машинное обучение 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)

Убедитесь, что модель зарегистрирована:

registered_model = ml_client.models.get("run-model-example", version="1")
print(f"Model '{registered_model.name}' version {registered_model.version} registered successfully.")

Очистите ресурсы

Если вы не планируете использовать вычислительный кластер для новых обучающих заданий, удалите его, чтобы избежать дальнейших расходов. Плата за кластер продолжает начисляться, пока он существует, даже если ни один узел не запущен.

ml_client.compute.begin_delete("cpu-cluster").wait()

Устранение распространённых ошибок

Error Причина Решение
ImportError: No module named 'azure.identity' Отсутствующий azure-identity пакет Запуск pip install azure-identity
DefaultAzureCredential failed Вы не вошли в Azure Сначала запустите az login, или задайте переменные среды для аутентификации субъекта-службы
ComputeNotFound Несоответствие имени кластера или удаление кластера Проверка имени кластера и проверка состояния подготовки
EnvironmentNotFound Преднастроенная среда устарела или недоступна Выведите список доступных сред с помощью ml_client.environments.list() и используйте текущую версию
QuotaExceeded Недостаточная квота vCPU для размера виртуальной машины Запрос увеличения квоты или использования меньшего размера виртуальной машины

Сведения о проблемах, связанных с средой, см. в статье "Устранение неполадок со сборками образа среды".

Дальнейшие действия

Теперь, когда у вас есть обученная модель, узнайте, как развернуть ее с помощью сетевой конечной точки.

Дополнительные примеры см. в репозитории GitHub примеров Машинное обучение Azure.

Дополнительные сведения о командах Azure CLI, классах пакета SDK Python или REST API, используемых в этой статье, см. в следующей справочной документации: