Руководство. Обучение модели в Машинное обучение Azure

ОБЛАСТЬ ПРИМЕНЕНИЯ: Пакет SDK для Python azure-ai-ml версии 2 (current)

Узнайте, как специалист по обработке и анализу данных использует Машинное обучение Azure для обучения модели. В этом примере мы используем связанный набор данных кредитной карта, чтобы показать, как использовать Машинное обучение Azure для проблемы классификации. Цель заключается в том, чтобы предсказать, имеет ли клиент высокую вероятность по умолчанию по кредиту карта платеже.

Скрипт обучения обрабатывает подготовку данных, а затем обучает и регистрирует модель. В этом руководстве описано, как отправить облачное задание обучения (задание команды). Если вы хотите узнать больше о загрузке данных в Azure, см. руководство по отправке, доступу и просмотру данных в Машинное обучение Azure. Вот что нужно сделать:

  • Получение дескриптора в рабочую область Машинное обучение Azure
  • Создание вычислительного ресурса и среды задания
  • создать сценарий обучения;
  • Создайте и запустите задание команды для запуска скрипта обучения в вычислительном ресурсе, настроенном с соответствующей средой задания и источником данных
  • Просмотр выходных данных скрипта обучения
  • развертывание новой обученной модели в качестве конечной точки;
  • Вызов конечной точки Машинное обучение Azure для вывода

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

Необходимые компоненты

  1. Чтобы использовать Машинное обучение Azure, сначала потребуется рабочая область. Если у вас нет ресурсов, выполните инструкции по созданию рабочей области и узнайте больше об использовании.

  2. Войдите в студию и выберите рабочую область, если она еще не открыта.

  3. Откройте или создайте записную книжку в рабочей области:

    • Создайте записную книжку, если вы хотите скопировать и вставить код в ячейки.
    • Кроме того, откройте учебники/get-started-notebooks/train-model.ipynb из раздела "Примеры " студии. Затем выберите "Клонировать", чтобы добавить записную книжку в файлы. (См. сведения о том, где найти примеры.)

Настройка ядра

  1. На верхней панели над открытой записной книжкой создайте вычислительный экземпляр, если у вас еще нет.

    Screenshot shows how to create a compute instance.

  2. Если вычислительный экземпляр остановлен, нажмите кнопку "Пуск вычислений " и подождите, пока она не будет запущена.

    Screenshot shows how to start compute if it is stopped.

  3. Убедитесь, что ядро, найденное в правом верхнем углу.Python 3.10 - SDK v2 В противном случае используйте раскрывающийся список для выбора этого ядра.

    Screenshot shows how to set the kernel.

  4. Если вы видите баннер, который говорит, что необходимо пройти проверку подлинности, выберите "Проверка подлинности".

Внимание

Остальная часть этого руководства содержит ячейки записной книжки учебника. Скопируйте и вставьте их в новую записную книжку или переключитесь на записную книжку, если она клонирована.

Использование задания команды для обучения модели в Машинное обучение Azure

Чтобы обучить модель, необходимо отправить задание. Тип задания, который вы отправите в этом руководстве , — это задание команды. Машинное обучение Azure предлагает несколько различных типов заданий для обучения моделей. Пользователи могут выбрать свой метод обучения на основе сложности модели, размера данных и требований к скорости обучения. В этом руководстве вы узнаете, как отправить задание команды для запуска скрипта обучения.

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

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

  • environment
  • .
  • задание команды
  • обучающий скрипт

В этом руководстве мы предоставим все эти элементы для нашего примера: создание классификатора для прогнозирования клиентов, которые имеют высокую вероятность по умолчанию по кредитным карта платежам.

Создание дескриптора в рабочей области

Прежде чем мы рассмотрим код, вам потребуется способ ссылаться на рабочую область. Вы создадите ml_client дескриптор для рабочей области. Затем вы будете использовать ml_client для управления ресурсами и заданиями.

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

  1. На панели инструментов в правом верхнем углу Студии машинного обучения Azure выберите имя рабочей области.
  2. Скопируйте значение для рабочей области, группы ресурсов и идентификатора подписки в код.
  3. Необходимо скопировать одно значение, закрыть область и вставить, а затем вернуться к следующей.
from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential

# authenticate
credential = DefaultAzureCredential()

SUBSCRIPTION="<SUBSCRIPTION_ID>"
RESOURCE_GROUP="<RESOURCE_GROUP>"
WS_NAME="<AML_WORKSPACE_NAME>"
# Get a handle to the workspace
ml_client = MLClient(
    credential=credential,
    subscription_id=SUBSCRIPTION,
    resource_group_name=RESOURCE_GROUP,
    workspace_name=WS_NAME,
)

Примечание.

При создании клиента ML не будет выполняться подключение к рабочей области. Инициализация клиента отложена, она ожидает первого вызова (это произойдет в следующей ячейке кода).

# Verify that the handle works correctly.  
# If you ge an error here, modify your SUBSCRIPTION, RESOURCE_GROUP, and WS_NAME in the previous cell.
ws = ml_client.workspaces.get(WS_NAME)
print(ws.location,":", ws.resource_group)

Создание среды задания

Чтобы запустить задание Машинное обучение Azure на вычислительном ресурсе, вам потребуется среда. Среда содержит список среды выполнения программного обеспечения и библиотек, которые необходимо установить на вычислительных ресурсах, где вы будете обучаться. Это похоже на среду Python на локальном компьютере.

Машинное обучение Azure предоставляет множество управляемых или готовых сред, которые полезны для распространенных сценариев обучения и вывода.

В этом примере вы создадите настраиваемую среду conda для заданий с помощью файла conda yaml.

Сначала создайте каталог для хранения файла.

import os

dependencies_dir = "./dependencies"
os.makedirs(dependencies_dir, exist_ok=True)

В приведенной ниже ячейке используется магическая функция IPython для записи файла conda в только что созданный каталог.

%%writefile {dependencies_dir}/conda.yaml
name: model-env
channels:
  - conda-forge
dependencies:
  - python=3.8
  - numpy=1.21.2
  - pip=21.2.4
  - scikit-learn=1.0.2
  - scipy=1.7.1
  - pandas>=1.1,<1.2
  - pip:
    - inference-schema[numpy-support]==1.3.0
    - mlflow==2.8.0
    - mlflow-skinny==2.8.0
    - azureml-mlflow==1.51.0
    - psutil>=5.8,<5.9
    - tqdm>=4.59,<4.60
    - ipykernel~=6.0
    - matplotlib

Спецификация содержит некоторые обычные пакеты, которые будут использоваться в задании (numpy, pip).

Обратитесь к этому yaml-файлу , чтобы создать и зарегистрировать эту настраиваемую среду в рабочей области:

from azure.ai.ml.entities import Environment

custom_env_name = "aml-scikit-learn"

custom_job_env = Environment(
    name=custom_env_name,
    description="Custom environment for Credit Card Defaults job",
    tags={"scikit-learn": "1.0.2"},
    conda_file=os.path.join(dependencies_dir, "conda.yaml"),
    image="mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest",
)
custom_job_env = ml_client.environments.create_or_update(custom_job_env)

print(
    f"Environment with name {custom_job_env.name} is registered to workspace, the environment version is {custom_job_env.version}"
)

Настройка задания обучения с помощью функции команды

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

Скрипт обучения обрабатывает подготовку данных, обучение и регистрацию обученной модели. Метод train_test_split обрабатывает разделение набора данных на тестовые и обучающие данные. В этом руководстве вы создадите скрипт обучения Python.

Задания команд можно запускать из интерфейса командной строки, пакета SDK для Python или интерфейса студии. В этом руководстве вы будете использовать пакет SDK для Python версии 2 Машинное обучение Azure для создания и запуска задания команды.

Создание скрипта обучения

Начнем с создания скрипта обучения — файла python main.py .

Сначала создайте исходную папку для скрипта:

import os

train_src_dir = "./src"
os.makedirs(train_src_dir, exist_ok=True)

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

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

%%writefile {train_src_dir}/main.py
import os
import argparse
import pandas as pd
import mlflow
import mlflow.sklearn
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.metrics import classification_report
from sklearn.model_selection import train_test_split

def main():
    """Main function of the script."""

    # input and output arguments
    parser = argparse.ArgumentParser()
    parser.add_argument("--data", type=str, help="path to input data")
    parser.add_argument("--test_train_ratio", type=float, required=False, default=0.25)
    parser.add_argument("--n_estimators", required=False, default=100, type=int)
    parser.add_argument("--learning_rate", required=False, default=0.1, type=float)
    parser.add_argument("--registered_model_name", type=str, help="model name")
    args = parser.parse_args()
   
    # Start Logging
    mlflow.start_run()

    # enable autologging
    mlflow.sklearn.autolog()

    ###################
    #<prepare the data>
    ###################
    print(" ".join(f"{k}={v}" for k, v in vars(args).items()))

    print("input data:", args.data)
    
    credit_df = pd.read_csv(args.data, header=1, index_col=0)

    mlflow.log_metric("num_samples", credit_df.shape[0])
    mlflow.log_metric("num_features", credit_df.shape[1] - 1)

    #Split train and test datasets
    train_df, test_df = train_test_split(
        credit_df,
        test_size=args.test_train_ratio,
    )
    ####################
    #</prepare the data>
    ####################

    ##################
    #<train the model>
    ##################
    # Extracting the label column
    y_train = train_df.pop("default payment next month")

    # convert the dataframe values to array
    X_train = train_df.values

    # Extracting the label column
    y_test = test_df.pop("default payment next month")

    # convert the dataframe values to array
    X_test = test_df.values

    print(f"Training with data of shape {X_train.shape}")

    clf = GradientBoostingClassifier(
        n_estimators=args.n_estimators, learning_rate=args.learning_rate
    )
    clf.fit(X_train, y_train)

    y_pred = clf.predict(X_test)

    print(classification_report(y_test, y_pred))
    ###################
    #</train the model>
    ###################

    ##########################
    #<save and register model>
    ##########################
    # Registering the model to the workspace
    print("Registering the model via MLFlow")
    mlflow.sklearn.log_model(
        sk_model=clf,
        registered_model_name=args.registered_model_name,
        artifact_path=args.registered_model_name,
    )

    # Saving the model to a file
    mlflow.sklearn.save_model(
        sk_model=clf,
        path=os.path.join(args.registered_model_name, "trained_model"),
    )
    ###########################
    #</save and register model>
    ###########################
    
    # Stop Logging
    mlflow.end_run()

if __name__ == "__main__":
    main()

В этом скрипте после обучения модели файл модели сохраняется и регистрируется в рабочей области. Регистрация модели позволяет хранить и версии моделей в облаке Azure в рабочей области. После регистрации модели можно найти все остальные зарегистрированные модели в одном месте в Azure Studio под названием реестра моделей. Реестр моделей позволяет организовывать и отслеживать обученные модели.

Настройка команды

Теперь, когда у вас есть скрипт, который может выполнять задачу классификации, используйте команду общего назначения, которая может выполнять действия командной строки. Это действие командной строки может быть непосредственно вызовом системных команд или выполнением скрипта.

Здесь создайте входные переменные для указания входных данных, разделения соотношения, скорости обучения и имени зарегистрированной модели. Сценарий команды:

  • Используйте среду, созданную ранее, используйте @latest нотацию, чтобы указать последнюю версию среды при выполнении команды.
  • Настройте само действие командной строки — python main.py в данном случае. Входные и выходные данные доступны в команде ${{ ... }} с помощью нотации.
  • Так как вычислительный ресурс не указан, скрипт будет выполняться в бессерверном вычислительном кластере , который создается автоматически.
from azure.ai.ml import command
from azure.ai.ml import Input

registered_model_name = "credit_defaults_model"

job = command(
    inputs=dict(
        data=Input(
            type="uri_file",
            path="https://azuremlexamples.blob.core.windows.net/datasets/credit_card/default_of_credit_card_clients.csv",
        ),
        test_train_ratio=0.2,
        learning_rate=0.25,
        registered_model_name=registered_model_name,
    ),
    code="./src/",  # location of source code
    command="python main.py --data ${{inputs.data}} --test_train_ratio ${{inputs.test_train_ratio}} --learning_rate ${{inputs.learning_rate}} --registered_model_name ${{inputs.registered_model_name}}",
    environment="aml-scikit-learn@latest",
    display_name="credit_default_prediction",
)

отправить задание.

Теперь пришло время отправить задание для запуска в Студия машинного обучения Azure. На этот раз вы будете использовать метод create_or_update в ml_client. ml_client— это клиентский класс, позволяющий подключаться к подписке Azure с помощью Python и взаимодействовать со службами Машинное обучение Azure. ml_client позволяет отправлять задания с помощью Python.

ml_client.create_or_update(job)

Просмотр выходных данных задания и ожидание завершения задания

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

Screenshot shows the overview page for the job.

Внимание

Дождитесь завершения состояния задания, прежде чем вернуться к этой записной книжке. Выполнение задания займет от 2 до 3 минут. Это может занять больше времени (до 10 минут), если вычислительный кластер был масштабирован до нуля узлов и настраиваемая среда по-прежнему строится.

При запуске ячейки выходные данные записной книжки отображают ссылку на страницу сведений о задании в Azure Studio. Кроме того, можно выбрать задания в меню навигации слева. Задание представляет собой совокупность нескольких запусков указанного скрипта или фрагмента кода. Сведения о запуске хранятся в соответствующем задании. Страница сведений содержит общие сведения о задании, время его выполнения, время его создания и т. д. На странице также есть вкладки для других сведений о задании, таких как метрики, выходные данные + журналы и код. Ниже перечислены вкладки, доступные на странице сведений о задании:

  • Обзор. В разделе обзора содержатся основные сведения о задании, включая его состояние, время начала и окончания, а также тип выполняемого задания.
  • Входные данные: в разделе входных данных перечислены данные и код, которые использовались в качестве входных данных для задания. Этот раздел может включать наборы данных, скрипты, конфигурации среды и другие ресурсы, которые использовались во время обучения.
  • Выходные данные и журналы: вкладка "Выходные данные + журналы" содержит журналы, созданные во время выполнения задания. Эта вкладка помогает устранить неполадки, если что-то не так с созданием скрипта обучения или модели.
  • Метрики. Вкладка метрик демонстрирует ключевые метрики производительности из модели, такие как оценка обучения, оценка f1 и оценка точности.

Очистка ресурсов

Если вы планируете перейти к другим руководствам, перейдите к следующим шагам.

Остановка вычислительного экземпляра

Если вы сейчас не планируете использовать вычислительный экземпляр, остановите его, выполнив следующие действия:

  1. В студии в левой области навигации выберите "Вычисления".
  2. Из вкладок вверху выберите Вычислительные экземпляры.
  3. Выберите вычислительный экземпляр из списка.
  4. В верхней панели инструментов выберите Остановить.

Удаление всех ресурсов

Внимание

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

Если вы не планируете использовать созданные вами ресурсы, удалите их, чтобы с вас не взималась плата:

  1. На портале Azure выберите Группы ресурсов в левой части окна.

  2. Выберите созданную группу ресурсов из списка.

  3. Выберите команду Удалить группу ресурсов.

    Screenshot of the selections to delete a resource group in the Azure portal.

  4. Введите имя группы ресурсов. Затем выберите Удалить.

Next Steps

Сведения о развертывании модели

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

Если вы хотите узнать больше о различных способах обучения моделей в Машинное обучение Azure, см. статью "Что такое автоматизированное машинное обучение (AutoML)?". Автоматизированное машинное обучение — это дополнительное средство, позволяющее сократить время, которое специалист по обработке и анализу данных тратит на поиск модели, которая лучше всего работает с данными.

Дополнительные примеры, аналогичные этому руководству, см . в разделе "Примеры " студии. Эти же примеры доступны на странице примеров GitHub. Примеры включают полные записные книжки Python, которые можно запустить код и научиться обучать модель. Можно изменить и запустить существующие скрипты из примеров, содержащих сценарии, включая классификацию, обработку естественного языка и обнаружение аномалий.