Проблема:

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

Решение: Млфлов

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

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

Пример использования: рекомендация фильма

Мы можем закрепить наше понимание основных компонентов MLFlow на игрушечном примере.

Учтите, что мы создаем систему рекомендаций фильмов. Мы используем Conda для создания виртуальной среды. Я собрал данные из потока Kafka и сохранил их в CSV. Ссылка на CSV находится в конце блога. Для этой задачи мы будем использовать Singular Value Decomposition (SVD) из библиотеки scikit Learn’s Surprise, и весь наш код можно записать в 10 строк следующим образом:

Компоненты Млфлов:

MLFlow состоит из четырех основных компонентов: отслеживания, проектов, моделей и реестра.

Отслеживание

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

В нашем случае мы регистрируем следующие параметры:

  1. Количество пользователей и фильмов (мы ожидаем, что со временем оно будет расти, поэтому будет интересно посмотреть, насколько лучше будет работать наш алгоритм с увеличением объема данных)
  2. Количество обученных эпох

Для наших показателей мы регистрируем RMSE и MAE. Для сравнения моделей мы будем использовать RMSE.

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

Мы можем визуализировать всю нашу историю запусков и детали каждого запуска с помощью команды:mlflow ui

Эти показатели упрощают сравнение различных экспериментов и отслеживание прогресса с течением времени.

Реестр

Компонент реестра MLFlow используется для управления жизненным циклом моделей машинного обучения. Пользователи могут отслеживать версии моделей и метаданные и развертывать их в различных средах по мере необходимости. Эту функцию невозможно настроить без внутренней базы данных, в которой хранятся наши модели. Я использовал базу данных MySQL для этой задачи.

В моем терминале MySQL я создал базу данных, в которой будет храниться информация о реестре этой модели.

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

mlflow.set_tracking_uri("http://localhost:5011")

Чтобы зарегистрировать нашу модель, мы можем сделать это, просто добавив следующий аргумент в наш метод log_model:

mlflow.sklearn.log_model(SVD, "model", registered_model_name="RecSys_SVD")

Также важно установить URI отслеживания перед запуском запуска, т. е. до с помощью mlflow.start_run():

Затем мы можем запустить сервер mlflow, чтобы настроить нашу внутреннюю базу данных как MySQL и установить для нее порт 5011 следующим образом. «--default-artifact-root» является обязательным параметром.

mlflow server --backend-store-uri mysql+pymysql://root@localhost/mlflow --default-artifact-root ./mlruns -h 0.0.0.0 -p 5011

Это настраивает запуск mlflow на http://localhost:5011/, связанном с нашей базой данных MySQL myflow.

Примечание. В случае, если pymysql использует пароль по умолчанию и выдает следующую ошибку: «Доступ запрещен для пользователя 'root'@'localhost' (с использованием пароля: NO)"), быстрое решение этой проблемы заключается в явной установке пароль MySQL в нашем URL-адресе базы данных как mysql+pymysql://root:yourpassword@localhost/mlflow

Теперь мы можем запускать разные версии моделей системы рекомендаций и легко их сравнивать. Как видно на картинке, у нас есть 6 различных версий зарегистрированной модели «RecSys».

Теперь мы можем легко сравнить различные версии этой зарегистрированной модели:

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

Весь код показан ниже:

import pandas as pd
from surprise.reader import Reader
from surprise import Dataset, dump, accuracy, SVD
from surprise.model_selection import train_test_split
from urllib.parse import urlparse

import mlflow.sklearn
import sys

RATINGS_FILE_PATH = "ratings.csv"

mlflow.set_tracking_uri("http://localhost:5011")

with mlflow.start_run():
 
 df = pd.read_csv(RATINGS_FILE_PATH, skiprows=1500, names=["userId", "movieId", "rating"])
 reader = Reader(rating_scale=(1, 5))
 data = Dataset.load_from_df(df[["userId", "movieId", "rating"]], reader=reader)
 trainset = data.build_full_trainset()
 testset = trainset.build_anti_testset()
 n_epoch = int(sys.argv[1]) if len(sys.argv) > 1 else 25
 print("Number of users in trainset: ", trainset.n_users)
 print("Number of movies in trainset: ", trainset.n_items)
 print("Number of epochs: ", n_epoch)
 mlflow.log_param("number_of_users", trainset.n_users)
 mlflow.log_param("number_of_movies", trainset.n_items)
 mlflow.log_param("number_of_ratings", trainset.n_ratings)
 mlflow.log_param("number_of_epochs", n_epoch)
 
 mlflow.log_artifact(RATINGS_FILE_PATH)
 trainset, testset = train_test_split(data, test_size=0.25, random_state = 121)
 SVD = SVD(n_epochs=n_epoch)
 SVD.fit(trainset)
 # Predict ratings for all pairs (i,j) that are NOT in the training set.
 predictions = SVD.test(testset)
 
 RMSE = accuracy.rmse(predictions, verbose=False)
 MAE = accuracy.mae(predictions, verbose=False)
 
 mlflow.log_metric("RMSE", RMSE)
 mlflow.log_metric("MAE", MAE)

 tracking_url_type_store = urlparse(mlflow.get_tracking_uri()).scheme
 mlflow.sklearn.log_model(SVD, "model", registered_model_name="RecSys_SVD")
 mlflow.end_run()

Проекты

Компонент проектов MLFlow предоставляет способ упаковки кода машинного обучения и зависимостей в воспроизводимый формат. Это позволяет пользователям легко делиться своей работой с другими, а также воспроизводить эксперименты и результаты в различных средах. Пожалуйста, обратитесь к этому отличному руководству для получения дополнительных ресурсов по этой теме: https://medium.com/@kevin.n.lu123/mlflow-managing-your-ml-pipeline-from-training-to-deployment-7e0d87df9d

Модели

Компонент моделей MLFlow предоставляет инструменты для развертывания и обслуживания моделей машинного обучения. Пользователи могут упаковывать обученные модели в виде REST API или контейнера Docker и развертывать их на различных облачных платформах. Фактически, запуск в пользовательском интерфейсе MLFlow (как показано ниже) также предоставляет информацию о том, как запустить модель, даже если у нас не установлена ​​​​инфраструктура базовой модели (например, pytorch, tensorflow и т. д.):

Пожалуйста, обратитесь к этому отличному руководству для получения дополнительных ресурсов по этой теме: https://medium.com/@kevin.n.lu123/mlflow-managing-your-ml-pipeline-from-training-to-deployment-7e0d87df9d

Преимущества и ограничения MLFlow

MLFlow предоставляет несколько преимуществ для специалистов по машинному обучению, в том числе:

  1. Воспроизводимость: MLFlow упрощает отслеживание и воспроизведение экспериментов, позволяя пользователям опираться на предыдущую работу и более эффективно сотрудничать.
  2. Гибкость: MLFlow поддерживает широкий спектр библиотек и платформ машинного обучения, что упрощает интеграцию с существующими рабочими процессами и инструментами.
  3. Масштабируемость: MLFlow можно использовать для управления проектами машинного обучения любого размера, от небольших экспериментов до крупномасштабных производственных развертываний.

Хотя MLFlow предлагает множество преимуществ, следует учитывать и некоторые потенциальные недостатки:

  1. Ограниченная интеграция с определенными инструментами и платформами: хотя MLFlow спроектирован так, чтобы быть гибким и адаптируемым, он может быть не полностью совместим со всеми инструментами и платформами, используемыми в рабочем процессе машинного обучения данной организации.
  2. Требуется дополнительная инфраструктура: как мы видели с реестрами, нам нужно было явно настроить базу данных для хранения наших зарегистрированных моделей MLFlow. В целом MLflow требует инфраструктуры для управления отслеживанием и хранением экспериментов, что может потребовать дополнительных ресурсов и обслуживания. Организациям может потребоваться инвестировать в дополнительное оборудование или облачные сервисы для поддержки MLFlow.
  3. Исправление ошибок: я также чувствовал, что информация часто была немного разрозненной, и некоторые ошибки, которые я исправил, требовали времени для исправления из-за этого.

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

Заключение

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

Использованная литература:



https://towardsdatascience.com/managing-machine-learning-development-cycle-with-mlflow-part-1-2-7a3f5871c708