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
Как упоминалось ранее, есть три основные части, которые мы хотим зарегистрировать для каждого модельного эксперимента.
- Параметры/гиперпараметры
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, она также поставляется с серверным вариантом, который можно разместить на сервере. Различные члены команды могут регистрировать результаты своих экспериментов на сервере.
Ссылки