MLFlow — это библиотека Python, в которой есть функции для лучшего управления потоком проектов ML. Он поставляется с различными компонентами. И в этой статье мы рассмотрим один из компонентов под названием MLFlow Tracking.

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

Каждое действие модели распознается как «запуск» в MLFlow. Mlflow отслеживает несколько параметров, и ниже приводится сводка (1).

Установка

Мы можем установить MLFlow, используя репозитории pip и conda.

conda install -c conda-forge mlflow
pip install mlflow

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

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

Запустите приведенную ниже команду в командной строке.

mlflow ui

После этого вы увидите вывод, как показано ниже

Обслуживание на http://‹your-host-name›:5000

Откройте браузер, скопируйте и вставьте ссылку выше. Вы увидите некоторый пользовательский интерфейс, как показано ниже.

Эксперимент

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

Mlflow по умолчанию создает эксперимент под названием «По умолчанию», как мы видим в верхней левой части пользовательского интерфейса. Мы можем изменить имя с «По умолчанию» на другое или в левом верхнем углу есть символ «+», чтобы создать новый эксперимент. Ниже мы собираемся создать новый эксперимент с кодом Python.

import mlflow
mlflow.create_experiment(‘mnist_models’)

Это создаст новый эксперимент. Чтобы подтвердить, мы можем обновить пользовательский интерфейс MLFlow и проверить, отображается ли «mnist_models» под «По умолчанию» в верхнем левом углу.

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

mlflow.set_experiment(‘mnist_models’)

Пробеги

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

mlflow.start_run(run_name= <name_for_the_run>)
######
# Logging Code
#####
mlflow.end_run()

Загрузить набор данных

В демонстрационных целях мы собираемся создать простую модель, используя scikit-learn для набора данных MNIST, чтобы классифицировать изображения по числам. Я не буду вдаваться в подробности набора данных. Вы можете проверить ссылку (3) для получения более подробной информации о наборе данных.

Ниже приведен базовый код для загрузки данных.

from sklearn.datasets import load_digits
mnist = load_digits()
train_x, test_x, train_y, test_y = train_test_split(mnist.data, mnist.target, test_size=0.2, random_state=10)

Отслеживание модели Mlflow

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

  1. Параметры/гиперпараметры

Mlflow предоставляет две функции для регистрации параметров.

  • mlfow.log_param — эта функция принимает два аргумента (ключ и значение). Т.е. (ключ = «ядро» и значение = «rbf» в SVM, ключ = «n_estimators» и значение = «100» в случайном лесу и т. д.)
  • mlflow.log_params — эта функция полезна для регистрации нескольких параметров за один проход, для ввода используется словарь с несколькими параметрами в качестве ключа и значений.

2. Показатели

Для регистрации показателей производительности mlflow также предоставляет две функции.

  • mlflow.log_metric — также принимает два аргумента для журнала и одной метрики (key=’accuracy and value=’0,94’ и т. д.).
  • mlflow.log_metrics — в качестве входных данных используется словарь, куда можно добавить несколько пар имени и значения метрики.

3. Артефакты

Артефакты — это некоторые файлы, которые мы хотим регистрировать для каждого модельного эксперимента. Это могут быть файлы изображений, csv, excel, pickle и т. д. Это можно сделать различными способами.

  • log_artifact / log_artifacts — указан путь к локальному каталогу, все файлы загружаются в каталог артефактов по умолчанию, который можно изменить.
  • save_model / load_model — mlflow предоставляет интерфейсы для регистрации объектов модели из различных библиотек (например, sklearn, keras, tensorflow, pytorch, gluon, h2o и т. д. Мы будем искать sklearn на основе здесь.

Ниже функция создает единую функцию для регистрации параметров, метрик и артефактов для любой модели на основе sklearn.

def log_run(run_name, model, val_x, val_y):
## Start the run with the given name
mlflow.start_run(run_name=run_name)
## Get prediction on validation dataset
val_pred = model.predict(val_x)
## log all the hyperparameters
mlflow.log_params(model.get_params())
## Calculate the required metrics
precision, recall, fscore, support = precision_recall_fscore_support(val_y, val_pred, average=’micro’)
## log all the required paramters
mlflow.log_metrics(
{‘precision’: precision, ‘recall’: recall, ‘fscore’: fscore} )
## This logs sklearn based models by converting them to pickle
mlflow_sklearn.log_model(model, run_name)
mlflow.end_run()

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

Случайный лес с параметрами по умолчанию

rf_model = RandomForestClassifier()
rf_model.fit(train_x, train_y)
log_run(‘random_forest_default_param’, rf_model, test_x, test_y)

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

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

Теперь давайте зарегистрируем еще две модели

Случайный лес с некоторыми изменениями гиперпараметров

rf_model_2 = RandomForestClassifier(n_estimators=10)
rf_model_2.fit(train_x, train_y)
log_run(‘random_forest_e_est_10’, rf_model_2, test_x, test_y)

Логистическая регрессия с параметрами по умолчанию

lg_model = LogisticRegression()
lg_model.fit(train_x, train_y)
log_run(‘logistic_default_param’, lg_model, test_x, test_y)

Теперь это будет выглядеть примерно так, как показано ниже.

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

Сравнить функцию

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

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

Код, показанный в этом посте, можно найти в репозитории ниже. h ttps://github.com/rockerdata/model-tracking/blob/master/mlflow/ml_logger.ipynb

Заключение

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

Ссылки

  1. https://mlflow.org/docs/latest/tracking.html
  2. https://www.mlflow.org/docs/latest/quickstart.html
  3. https://scikit-learn.org/stable/auto_examples/classification/plot_digits_classification.html