Краткий обзор управления жизненным циклом машинного обучения

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

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

Основные компоненты MLflow

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

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

MLflow состоит из четырех основных компонентов:

  1. Отслеживание MLflow. Основной API регистрирует и организует эксперименты по машинному обучению. Он записывает параметры, метрики и артефакты (например, модели, записные книжки и сценарии), позволяя вам отслеживать запуски экспериментов и их результаты. Он поставляется с пользовательским интерфейсом, к которому вы можете получить доступ через локальный хост для просмотра, визуализации и управления вашими экспериментами.
  2. Проекты MLflow: формат упаковки кода для воспроизводимости и совместного использования. Он определяет стандартную структуру кода машинного обучения, упрощая его понимание, повторное использование и совместную работу с другими.
  3. Модели MLflow: стандартный формат для упаковки моделей ML в нескольких вариантах (платформы ML), а также репозиторий для хранения и совместного использования моделей. Это упрощает развертывание модели на разных платформах.
  4. Реестр моделей MLflow. Централизованный репозиторий моделей с информацией о происхождении модели, управлении версиями, переходах между этапами и аннотациях. Это особенно полезно в среде совместной работы, когда вам нужно сравнить и объединить свои модели с моделями членов вашей команды.

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

Погружение в отслеживание MLflow: управляйте экспериментами ML

Давайте начнем практическую часть этого тура с отслеживания MLflow. API и пользовательский интерфейс для регистрации и управления всем, что связано с вашими экспериментами машинного обучения.

Вы можете использовать его в простом скрипте или масштабировать для крупномасштабных учебных сред. Позвольте мне проиллюстрировать базовое использование с помощью простого фрагмента кода, использующего регрессию ElasticNet из Scikit-learn.

import mlflow
import mlflow.sklearn
from sklearn.linear_model import ElasticNet
from sklearn.metrics import mean_squared_error
import numpy as np
# Initiate a new MLflow run
with mlflow.start_run():
    # Train and fit the model
    model = ElasticNet(alpha=0.5, l1_ratio=0.5)
    model.fit(X_train, y_train)
    
    # Make predictions and calculate the RMSE
    predictions = model.predict(X_test)
    rmse = np.sqrt(mean_squared_error(y_test, predictions))
    
    # Log parameters
    mlflow.log_param("alpha", 0.5)
    mlflow.log_param("l1_ratio", 0.5)
    
    # Log metric
    mlflow.log_metric("rmse", rmse)
    
    # Log model (artifact)
    mlflow.sklearn.log_model(model, "model")

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

Реестр моделей MLflow: оптимизируйте управление моделями

После начала работы с отслеживанием MLflow вы также можете начать организовывать свои модели. Здесь на помощь приходит Реестр моделей MLflow, централизованный репозиторий моделей, который тесно интегрируется с MLflow Tracking. Это отличный инструмент для отдельных лиц и групп, позволяющий просматривать, совместно использовать и совместно работать над моделями ML.

Реестр моделей упрощает переход моделей от экспериментов к производству. Это достигается за счет отслеживания происхождения модели, управления версиями модели, переходов между этапами и аннотаций модели.

Вы можете использовать реестр моделей следующим образом:

  1. Зарегистрируйте модель из отслеживания MLflow:
mlflow.sklearn.log_model(lr_model, "model")

2. Зарегистрируйте зарегистрированную модель в реестре:

result = mlflow.register_model(
    "runs:/d16076a3ec534311817565e6527539c0/model",
    "ElasticNetWineModel"
)

Модель регистрируется с использованием идентификатора запуска (в примере d16076a3ec534311817565e6527539c0).

3. Список всех зарегистрированных моделей:

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

mlflow.search_runs()

4. Загрузите модель из реестра:

Вы можете загрузить модель из реестра для прогнозирования или оценки:

model_uri = "models:/ElasticNetWineModel/1"
model = mlflow.pyfunc.load_model(model_uri)

5. Перенесите версии модели между этапами:

Реестр моделей позволяет выполнять переходы между этапами модели. Вы можете перевести модель из стадии «Нет» в «Постановка», «Производство» или «Архив»:

client = mlflow.tracking.MlflowClient()
client.transition_model_version_stage(
    name="ElasticNetWineModel",
    version=1,
    stage="Production",
)

В этом примере мы перевели версию 1 нашей модели на этап «Производство» для последующего использования.

Понимание моделей MLflow

Как именно MLflow сохраняет ваши модели?

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

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

Разновидность определяет конкретный формат модели или библиотеку, с которой модель может работать. Есть ароматы для самых важных библиотек. Например, модель TensorFlow можно загрузить как формат TensorFlow SavedModel или как функцию Python для применения к входным данным.
Если у вас есть модель из пользовательской библиотеки или модель, которая не является встроенной, вы все равно можете использовать ее в универсальной функции Python:

import mlflow.pyfunc
class ModelWrapper(mlflow.pyfunc.PythonModel):
    def load_context(self, context):
        # Initialization logic
        pass
    def predict(self, context, model_input):
        # Prediction logic
        pass
# Saving the model
mlflow.pyfunc.save_model(path="model_path", python_model=ModelWrapper())

Когда вы будете готовы обслуживать свою модель (например, для API), вы можете использовать команду mlflow models serve:

mlflow models serve -m models:/ElasticNetWineModel/1 -p 1234

Эта команда будет обслуживать указанную версию модели (в данном случае 1) на локальном хосте через порт 1234.

Изучение проектов MLflow: упростите упаковку кода

Как указано выше, MLflow Projects — это формат для упаковки вашего кода повторно используемым и воспроизводимым способом. Это в основном помогает вам делиться проектами между командами и позволяет запускать их на разных платформах. Каждый проект — это просто каталог или репозиторий, содержащий ваш код и файл дескриптора с именем MLproject.

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

name: My_Project
conda_env: conda.yaml
entry_points:
  main:
    parameters:
      alpha: float # no default value
      l1_ratio: {type: float, default: 0.5} # default value
    command: "python main.py {alpha} {l1_ratio}" # run script with params

В этом примере main.py — это точка входа в проект. alpha и l1_ratio — параметры этого скрипта. В файле conda.yaml перечислены зависимости проекта Python.

Вы можете запустить точку входа в проекты с помощью команды mlflow run:

mlflow run . -P alpha=0.42

Команда извлекает необходимые зависимости, запускает ваш код с заданными параметрами и/или параметрами по умолчанию и записывает результаты на сервер отслеживания.

Подведение итогов

На этом мы завершаем нашу экскурсию по MLflow.

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

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

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

-Мерлин



Источники:

[1] https://mlflow.org/docs/latest/index.html