Отслеживание моделей ML с помощью MLflow и Машинного обучения Azure

ОБЛАСТЬ ПРИМЕНЕНИЯ:Пакет SDK для Python Azure MLверсии 1

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

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

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

Совет

Если вы хотите отслеживать эксперименты, выполняемые в Azure Databricks или Azure Synapse Analytics, ознакомьтесь с посвященными этому вопросу статьями Отслеживайте эксперименты ML Azure Databricks с помощью MLflow и Машинного обучения Azure и Отслеживание экспериментов машинного обучения Azure Synapse Analytics с помощью MLflow и Машинного обучения Azure.

Примечание

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

Предварительные требования

Отслеживание запусков с локального компьютера или из удаленной вычислительной среды

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

Настройка среды отслеживания

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

Примечание

При работе в службе "Вычисления Azure" (Записные книжки Azure, Jupyter Notebook, размещенных в вычислительных экземплярах или кластерах Azure) вам не нужно настраивать URI отслеживания. Он настраивается автоматически.

ОБЛАСТЬ ПРИМЕНЕНИЯ:Пакет SDK для Python azureml версии 1

URI отслеживания MLflow машинного обучения Azure можно получить с помощью пакета SDK машинного обучения Azure версии 1 для Python. Убедитесь, что в используемом кластере установлена библиотека azureml-sdk. В следующем примере возвращается уникальный URI отслеживания MLFLow, связанный с рабочей областью. Затем метод set_tracking_uri() указывает этот URI в качестве URI отслеживания MLFLow.

  1. Используя файл конфигурации рабочей области:

    from azureml.core import Workspace
    import mlflow
    
    ws = Workspace.from_config()
    mlflow.set_tracking_uri(ws.get_mlflow_tracking_uri())
    

    Совет

    Вы можете скачать файл конфигурации рабочей области следующим способом:

    1. Перейдите к Студия машинного обучения Azure
    2. Щелкните правый верхний угол страницы -> скачайте файл конфигурации.
    3. Сохраните файл config.json в том же каталоге, с которым вы работаете.
  2. Используя идентификатор подписки, имя группы ресурсов и имя рабочей области:

    from azureml.core import Workspace
    import mlflow
    
    #Enter details of your Azure Machine Learning workspace
    subscription_id = '<SUBSCRIPTION_ID>'
    resource_group = '<RESOURCE_GROUP>'
    workspace_name = '<AZUREML_WORKSPACE_NAME>'
    
    ws = Workspace.get(name=workspace_name,
                       subscription_id=subscription_id,
                       resource_group=resource_group)
    
    mlflow.set_tracking_uri(ws.get_mlflow_tracking_uri())
    

Настройка имени эксперимента

Все запуски (циклы) MLflow регистрируются в активном эксперименте. По умолчанию запуски записываются в эксперимент с именем Default, который создается автоматически. Чтобы настроить эксперимент, нужно поработать с командой MLflow mlflow.set_experiment().

experiment_name = 'experiment_with_mlflow'
mlflow.set_experiment(experiment_name)

Совет

При отправке заданий с помощью пакета SDK для Машинного обучения Azure можно задать имя эксперимента с помощью свойства experiment_name при его отправке. Не обязательно настраивать его в скрипте обучения.

Начните выполнение обучения

После того, как вы задали имя эксперимента MLflow, вы можете запустить обучение с помощью start_run(). Затем используйте log_metric(), чтобы активировать API ведения журнала MLflow и начать запись в журнал метрик выполнения обучения.

import os
from random import random

with mlflow.start_run() as mlflow_run:
    mlflow.log_param("hello_param", "world")
    mlflow.log_metric("hello_metric", random())
    os.system(f"echo 'hello world' > helloworld.txt")
    mlflow.log_artifact("helloworld.txt")

Дополнительные сведения о ведении журнала метрик, параметров и артефактов в запуске с помощью MLflow см. в статье о регистрации и просмотре метрик.

Отслеживание запусков в Машинном обучении Azure

ОБЛАСТЬ ПРИМЕНЕНИЯ:Пакет SDK для Python azureml версии 1

Удаленные запуски (задания) позволяют обучать модели более надежным и воспроизводимым способом. Они также могут использовать более мощные вычислительные ресурсы, например кластеры Вычислительной среды Машинного обучения. Чтобы узнать больше о различных вариантах вычислений, ознакомьтесь со статьей Использование целевых объектов вычислений для обучения моделей.

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

Важно!

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

Создание подпрограммы обучения

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

Обучающий код берется из этого примера MLflow в репозитории примера Машинного обучения Azure.

Скопируйте следующий код в файл:

# imports
import os
import mlflow

from random import random

# define functions
def main():
    mlflow.log_param("hello_param", "world")
    mlflow.log_metric("hello_metric", random())
    os.system(f"echo 'hello world' > helloworld.txt")
    mlflow.log_artifact("helloworld.txt")


# run functions
if __name__ == "__main__":
    # run main function
    main()

Настройка эксперимента

Для отправки эксперимента в Машинное обучение Azure необходимо использовать Python. Настройте среду вычислений и обучения в записной книжке или файле Python с помощью класса Environment.

from azureml.core import Environment
from azureml.core.conda_dependencies import CondaDependencies

env = Environment(name="mlflow-env")

# Specify conda dependencies with scikit-learn and temporary pointers to mlflow extensions
cd = CondaDependencies.create(
    conda_packages=["scikit-learn", "matplotlib"],
    pip_packages=["azureml-mlflow", "pandas", "numpy"]
    )

env.python.conda_dependencies = cd

Затем создайте ScriptRunConfig, указав удаленный объект вычислений в качестве целевого объекта вычислений.

from azureml.core import ScriptRunConfig

src = ScriptRunConfig(source_directory="src",
                      script=training_script,
                      compute_target="<COMPUTE_NAME>",
                      environment=env)

При данной конфигурации выполнения вычислений и обучения для отправки выполнения используется метод Experiment.submit(). Этот метод автоматически задает URI отслеживания MLflow и направляет данные ведения журнала из MLflow в рабочую область.

from azureml.core import Experiment
from azureml.core import Workspace
ws = Workspace.from_config()

experiment_name = "experiment_with_mlflow"
exp = Experiment(workspace=ws, name=experiment_name)

run = exp.submit(src)

Просмотр метрик и артефактов в рабочей области

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

Получите метрику запуска с помощью get_run() MLflow.

from mlflow.tracking import MlflowClient

# Use MlFlow to retrieve the run that was just completed
client = MlflowClient()
run_id = mlflow_run.info.run_id
finished_mlflow_run = MlflowClient().get_run(run_id)

metrics = finished_mlflow_run.data.metrics
tags = finished_mlflow_run.data.tags
params = finished_mlflow_run.data.params

print(metrics,tags,params)

Для просмотра артефактов запуска, можно использовать MlFlowClient.list_artifacts()

client.list_artifacts(run_id)

Чтобы скачать артефакт в текущий каталог, можно использовать MLFlowClient.download_artifacts()

client.download_artifacts(run_id, "helloworld.txt", ".")

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

Сравнение и запрос

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

from mlflow.entities import ViewType

all_experiments = [exp.experiment_id for exp in MlflowClient().list_experiments()]
query = "metrics.hello_metric > 0"
runs = mlflow.search_runs(experiment_ids=all_experiments, filter_string=query, run_view_type=ViewType.ALL)

runs.head(10)

Автоматическое ведение журнала

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

Чтобы включить Автоматическое ведение журнала, вставьте следующий код перед обучающим кодом:

mlflow.autolog()

Дополнительные сведения об автоматическом ведении журнала с MLflow.

Модели (управление)

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

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

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

  1. После завершения выполнения вызовите метод register_model().

    # the model folder produced from a run is registered. This includes the MLmodel file, model.pkl and the conda.yaml.
    model_path = "model"
    model_uri = 'runs:/{}/{}'.format(run_id, model_path) 
    mlflow.register_model(model_uri,"registered_model_name")
    
  2. Просмотрите зарегистрированную модель в рабочей области с помощью Студии машинного обучения Azure.

    В следующем примере для зарегистрированной модели, my-model, помечены метаданные отслеживания MLflow.

    register-mlflow-model

  3. Перейдите на вкладку Артефакты, чтобы просмотреть все файлы модели, которые соответствуют схеме модели MLflow (conda.yaml, MLmodel, model.pkl).

    model-schema

  4. Выберите MLmodel, чтобы просмотреть файл MLmodel, созданный при запуске.

    MLmodel-schema

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

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

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

    Удаление ресурсов на портале Azure

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

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

  4. Введите имя группы ресурсов. Теперь щелкните Удалить.

Примеры записных книжек

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

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