Отслеживание экспериментов машинного обучения с использованием MLflow

Отслеживание экспериментов MLflow

Введение

Область машинного обучения (ML) быстро расширяется и имеет применение во многих различных отраслях. Следить за экспериментами по машинному обучению с использованием MLflow и управлять необходимыми для их проведения испытаниями становится все сложнее по мере их усложнения. Это может привести к множеству проблем для ученых-исследователей данных, таких как:

  • Потеря или дублирование экспериментов: Следить за всеми проведенными экспериментами может быть сложно, что увеличивает риск потери или дублирования экспериментов.
  • Воспроизводимость результатов: Может быть сложно воспроизвести результаты эксперимента, что затрудняет устранение неполадок и улучшение модели.
  • Недостаток прозрачности: Может быть сложно доверять прогнозам модели, поскольку не всегда понятно, как она была создана.
Фото от CHUTTERSNAP на Unsplash

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

Цели обучения

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

Что такое MLflow?

Логотип MLflow (источник: официальный сайт)

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

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

# импорт библиотеки mlflow
import mlflow

# начать отслеживание mlflow
mlflow.start_run()
mlflow.log_param("learning_rate", 0.01)
mlflow.log_metric("accuracy", 0.85)
mlflow.end_run()

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

import mlflow.sklearn

# Обучить и сохранить модель
model = train_model()
mlflow.sklearn.save_model(model, "model")

# Загрузить конкретную версию модели
loaded_model = mlflow.sklearn.load_model("model", version="1")

# Обслуживать загруженную модель для предсказаний
predictions = loaded_model.predict(data)

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

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

MLflow – Отслеживание экспериментов

У MLflow есть множество функций, включая отслеживание экспериментов для отслеживания экспериментов по машинному обучению для любого проекта по машинному обучению. Отслеживание экспериментов – это уникальный набор API и пользовательский интерфейс для регистрации параметров, метрик, версий кода и выходных файлов для диагностики. MLflow отслеживание экспериментов имеет API для Python, Java, REST и R.

Теперь давайте рассмотрим пример кода отслеживания экспериментов MLflow с использованием языка программирования Python.

import mlflow
import mlflow.sklearn
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
from mlflow.models.signature import infer_signature

# Загрузка и предварительная обработка набора данных
data = load_dataset()
X_train, X_test, y_train, y_test = train_test_split(data["features"], data["labels"], test_size=0.2)

# Начать эксперимент MLflow
mlflow.set_experiment("Мой эксперимент")
mlflow.start_run():
      # Запись параметров
      mlflow.log_param("n_estimators", 100)
      mlflow.log_param("max_depth", 5)

      # Создание и обучение модели
      model = RandomForestClassifier(n_estimators=100, max_depth=5)
      model.fit(X_train, y_train)

      # Прогнозирование на тестовом наборе данных
      y_pred = model.predict(X_test)
      signature = infer_signature(X_test, y_pred)

      # Запись метрик
      accuracy = accuracy_score(y_test, y_pred)
      mlflow.log_metric("accuracy", accuracy)

      # Сохранение модели
      mlflow.sklearn.save_model(model, "model")

# Завершение запуска MLflow
mlflow.end_run()

В приведенном выше коде мы импортируем модули из MLflow и библиотеки sklearn для отслеживания экспериментов с моделями. Затем мы загружаем образец набора данных, чтобы продолжить работу с API экспериментов MLflow. Мы используем классы start_run (), log_param (), log_metric () и save_model () для запуска экспериментов и сохранения их в эксперименте под названием “Мой эксперимент”.

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

MLflow – Реестр моделей

Иллюстрация реестра моделей (источник: Databricks)

Реестр моделей – это централизованный реестр моделей, в котором хранятся артефакты моделей с использованием набора API и пользовательского интерфейса для эффективного сотрудничества в рамках полного рабочего процесса MLOps.

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

Давайте посмотрим на пользовательский интерфейс реестра моделей MLflow на следующем скриншоте.

Скриншот пользовательского интерфейса MLflow

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

Пользовательский интерфейс реестра моделей MLflow

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

# Записываем модель sklearn и регистрируем как версию 1
mlflow.sklearn.log_model(
        sk_model=model,
        artifact_path="sklearn-model",
        signature=signature,
        registered_model_name="sk-learn-random-forest-reg-model",
   )

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

MLflow – Проекты

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

Код проекта состоит из имени проекта, точки входа и информации об окружении, которая указывает зависимости и другие конфигурации кода проекта для выполнения проекта. MLflow поддерживает такие среды, как Conda, виртуальные среды и образы Docker.

Вкратце, файл проекта MLflow содержит следующие элементы:

  • Имя проекта
  • Файл окружения
  • Точки входа

Давайте рассмотрим пример файла проекта MLflow.

# имя проекта
name: My Project

python_env: python_env.yaml
# или
# conda_env: my_env.yaml
# или
# docker_env:
#    image:  mlflow-docker-example

# записываем точки входа
entry_points:
  main:
    parameters:
      data_file: path
      regularization: {type: float, default: 0.1}
    command: "python train.py -r {regularization} {data_file}"
  validate:
    parameters:
      data_file: path
    command: "python validate.py {data_file}"

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

Вот пример файла окружения python_env.yaml на языке Python:

# Версия Python, необходимая для запуска проекта.
python: "3.8.15"
# Зависимости, необходимые для сборки пакетов. Это поле является необязательным.
build_dependencies:
  - pip
  - setuptools
  - wheel==0.37.1
# Зависимости, необходимые для запуска проекта.
dependencies:
  - mlflow==2.3
  - scikit-learn==1.0.2

MLflow — Отслеживание LLM

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

Что такое LLM-модели?

Большие языковые модели – это тип моделей нейронных сетей, разработанных с использованием архитектуры трансформеров с миллиардами обучаемых параметров. Такие модели могут выполнять широкий спектр задач обработки естественного языка, таких как генерация текста, перевод и вопросно-ответная система, с высоким уровнем гладкости и связности.

Зачем нам нужно отслеживание LLM?

В отличие от классических моделей машинного обучения, LLM-модели должны отслеживать подсказки для оценки производительности и поиска лучшей модели для внедрения в производство. У LLM-моделей есть множество параметров, таких как top_k, temperature и др., а также несколько метрик оценки. Различные модели с разными параметрами дают разные результаты для определенных запросов. Поэтому важно отслеживать их, чтобы определить наилучшую производительность LLM-модели.

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

Заключение

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

Основные выводы

Давайте рассмотрим основные уроки из этой статьи.

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

Часто задаваемые вопросы

Показанные в этой статье материалы не являются собственностью Analytics Vidhya и используются по усмотрению автора.