Усовершенствуйте свой рабочий процесс машинного обучения: как использовать MLflow для отслеживания экспериментов и управления моделями
Будьте в курсе рабочего процесса машинного обучения с помощью мощных инструментов отслеживания экспериментов и управления моделями MLflow.
Введение — млфлоу
Машинное обучение — это постоянно развивающаяся область, в которой часто появляются новые алгоритмы, модели и платформы. Это делает важным отслеживать и воспроизводить эксперименты для проверки и повышения точности моделей. MLflow — это платформа с открытым исходным кодом, упрощающая управление жизненным циклом машинного обучения, от экспериментов до развертывания. Он предлагает единый интерфейс для отслеживания экспериментов, упаковки и развертывания моделей, а также для управления всем рабочим процессом машинного обучения.
С помощью MLflow специалисты по данным могут организовывать и сравнивать свои эксперименты, воспроизводить результаты и делиться ими со своими командами. В этой записи блога мы рассмотрим, как MLflow можно использовать для отслеживания экспериментов и управления моделями, а также как он может сделать рабочий процесс машинного обучения более управляемым и эффективным.
В этом блоге мы рассмотрим, как использовать MLflow для отслеживания экспериментов и управления моделями на примере прогнозирования диабета. Но перед этим давайте рассмотрим некоторые важные концепции mlflow.
Компоненты млфлота
MLflow — это комплексная платформа, состоящая из нескольких компонентов, каждый из которых предназначен для разных этапов жизненного цикла машинного обучения. Здесь мы более подробно рассмотрим каждый компонент и обсудим, какую пользу он приносит рабочему процессу машинного обучения.
Отслеживание MLflow. Этот компонент позволяет специалистам по данным выполнять track
, compare experiments
, store artifacts
и results
, и visualize metrics
в пользовательском веб-интерфейсе. Благодаря отслеживанию MLflow пользователи могут воспроизводить результаты и делиться ими со своей командой, что помогает оптимизировать совместную работу и принимать решения на основе данных.
Модели MLflow: Компонент Модели MLflow предоставляет стандартизированный способ упаковки моделей машинного обучения в нескольких форматах, включая функции Python, образы Docker и многое другое. Это позволяет специалистам по данным легко развертывать модели в различных средах и делиться ими с другими. С помощью моделей MLflow пользователи также могут отслеживать родословную модели, которая показывает полную историю разработки модели, что упрощает воспроизведение и проверку результатов.
Реестр моделей. Реестр моделей — еще один важный компонент платформы, который позволяет специалистам по данным управлять моделями и развертывать их в производственной среде. Реестр моделей представляет собой центральное место для хранения, организации и управления версиями моделей, а также позволяет легко обмениваться моделями и сотрудничать между членами команды. С помощью Model Registry специалисты по данным могут также отслеживать производительность модели и управлять контролем доступа для обеспечения безопасности данных.
Проекты MLflow.Компонент Проекты MLflow предоставляет простой способ упаковки кода, данных и зависимостей в повторно используемый и воспроизводимый формат. С MLflow Projects пользователи могут легко делиться своим кодом и воспроизводить результаты даже на разных машинах и в разных средах. Этот компонент особенно полезен для управления крупномасштабными проектами и совместными исследованиями.
Используя MLflow, специалисты по данным могут сосредоточиться на том, что у них получается лучше всего: на разработке и улучшении моделей машинного обучения, не беспокоясь о сложностях управления всем жизненным циклом машинного обучения.
Установка млфлов
Чтобы начать работу с MLflow, первым шагом будет его установка. Перед установкой пакета рекомендуется создать виртуальную среду, чтобы избежать конфликтов с другими пакетами. Вы можете создать виртуальную среду с помощью команды:
$ python3 -m venv venv
Активируйте виртуальную среду, используя:
$ . venv/bin/activate
После активации виртуальной среды вы можете установить MLflow с помощью следующей команды:
$ pip install mlflow
После установки вы можете убедиться, что она прошла успешно, проверив версию MLflow с помощью команды
$ mlflow --version // output: // mlflow, version 2.2.2
Вы должны увидеть отображаемый номер версии MLflow, который указывает на то, что установка прошла успешно. Теперь вы готовы начать использовать MLflow для управления жизненным циклом машинного обучения!
Отслеживание экспериментов
Отслеживание экспериментов — важная часть рабочего процесса машинного обучения, позволяющая специалистам по обработке и анализу данных отслеживать эксперименты, которые они проводят, и полученные ими результаты.
Вот несколько примеров того, как отслеживание экспериментов можно использовать с MLflow:
Отслеживание гиперпараметров модели. Одной из основных задач машинного обучения является настройка гиперпараметров модели для достижения максимальной производительности. С помощью MLflow исследователи данных могут отслеживать значения гиперпараметров, используемых во время обучения, что упрощает сравнение результатов различных экспериментов и определение наиболее эффективной модели.
Визуализация результатов экспериментов. MLflow предоставляет пользовательский веб-интерфейс для визуализации результатов экспериментов, что позволяет специалистам по обработке и анализу данных легко сравнивать и сопоставлять производительность различных моделей. Пользовательский интерфейс обеспечивает визуализацию таких показателей, как точность, потери и проверка, что упрощает выявление тенденций и быстрое выявление проблем.
Запись артефактов. Специалисты по данным могут использовать Artifact API в MLflow для записи и хранения артефактов, таких как обученные модели, входные и выходные данные. Это помогает отслеживать данные, используемые во время экспериментов, и обеспечивает воспроизводимость результатов.
Сотрудничество с членами команды. Отслеживание экспериментов в MLflow предоставляет специалистам по данным централизованное место для совместной работы над проектами. Несколько пользователей могут получить доступ к одному и тому же эксперименту, записывать свои результаты и обсуждать результаты, что упрощает работу в команде.
Модуль отслеживания экспериментов MLflow — это мощный инструмент, который позволяет специалистам по данным организовывать свои эксперименты в прогоны и отслеживать различные параметры, метрики, метаданные, артефакты и модели. В дополнение к этим сведениям MLflow автоматически регистрирует дополнительную информацию о запуске, включая исходный код, версию кода (git commit), время начала и окончания, а также автора.
Эта автоматическая регистрация информации особенно полезна для обеспечения воспроизводимости результатов и отслеживания различных экспериментов, проводимых в процессе машинного обучения. Обладая этой информацией, специалисты по данным могут легко сравнивать и сопоставлять различные эксперименты и определять наиболее эффективные модели, обеспечивая при этом полную запись проведенных экспериментов.
Например, специалист по данным, работающий над проектом обработки естественного языка, может использовать модуль отслеживания экспериментов MLflow для отслеживания таких параметров, как скорость обучения и количество эпох, используемых во время обучения. Они также могут записывать такие показатели, как точность и оценка F1, и хранить артефакты, такие как предварительно обработанные данные и обученные модели. Благодаря автоматической регистрации информации MLflow специалист по данным может легко воспроизвести эксперимент и отслеживать его ход с течением времени, что позволяет лучше понять разработку модели машинного обучения.
Теперь, когда у нас есть понимание того, что влечет за собой отслеживание экспериментов, давайте продолжим наш пример.
Импорт всех необходимых библиотек
Во-первых, нам нужно импортировать необходимые библиотеки
import pandas as pd import numpy as np
Импорт данных
Затем мы можем загрузить наш набор данных, используя функцию read_csv
панд. Мы загрузим файл 'diabetes.csv' в кадр данных pandas с именем df
. Мы можем загрузить данные, используя следующий код:
df = pd.read_csv("diabetes.csv")
Чтобы лучше понять наши данные, мы можем использовать метод info
для отображения информации о фрейме данных, такой как количество строк, столбцов и типов данных. Мы можем отобразить эту информацию, используя следующий код:
df.info() #output """ # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Pregnancies 768 non-null int64 1 Glucose 768 non-null int64 2 BloodPressure 768 non-null int64 3 SkinThickness 768 non-null int64 4 Insulin 768 non-null int64 5 BMI 768 non-null float64 6 DiabetesPedigreeFunction 768 non-null float64 7 Age 768 non-null int64 8 Outcome 768 non-null int64 dtypes: float64(2), int64(7) memory usage: 54.1 KB """
Подготовка данных для обучения и тестирования
После загрузки и изучения данных мы можем подготовить их для обучения и тестирования. Мы будем рассматривать столбец Результат как нашу целевую переменную. Мы разделим наши данные на функции (X) и метки (y), используя следующий код:
X = df.drop(columns=["Outcome"]).values y = df["Outcome"].values
Далее мы разделим наши данные на наборы данных для обучения и тестирования, используя функцию train_test_split
из библиотеки sklearn. Мы будем использовать 70% данных для обучения и 30% для тестирования, а для воспроизводимости зададим случайное состояние. Мы можем разделить наши данные, используя следующий код:
from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X,y, test_size=0.3, random_state=10) print("X train shape: {} and y train shape: {}".format(X_train.shape, y_train.shape)) print("X test shape: {} and y test shape: {}".format(X_test.shape, y_test.shape)) # output """ X train shape: (537, 8) and y train shape: (537,) X test shape: (231, 8) and y test shape: (231,) """
Наконец, мы заменим все нулевые значения в наших данных средним значением ненулевых значений, используя функцию SimpleImputer
из библиотеки sklearn. Мы подгоним импутер к нашим обучающим данным и преобразуем как наши обучающие, так и тестовые данные, используя подобранный импьютер. Мы можем заменить нулевые значения, используя следующий код:
from sklearn.impute import SimpleImputer values_fill = SimpleImputer(missing_values=0, strategy="mean") X_train = values_fill.fit_transform(X_train) X_test = values_fill.fit_transform(X_test)
Выполнив эти шаги, мы подготовили данные для обучения и тестирования нашей модели машинного обучения.
Обучение модели — используйте mlflow для отслеживания экспериментов
Во-первых, мы начнем с настройки внутреннего сервера mlflow с использованием базы данных SQLite для отслеживания всех изменений, внесенных в ходе наших экспериментов. Мы также установим название эксперимента «diabetes-prediction-exp-1», используя mlflow.
mlflow ui --backend-store-uri sqlite:///mlflow.db
Это позволит настроить SQLite базу данных на серверной части для отслеживания всех изменений, сделанных во время экспериментов.
Далее импортируем необходимые библиотеки и запускаем процесс обучения. Мы будем использовать модель Классификатор случайного леса и записывать в mlflow различные параметры, такие как случайное состояние, показатель точности и среднеквадратичную ошибку (RMSE).
import mlflow mlflow.set_tracking_uri("sqlite:///mlflow.db") mlflow.set_experiment("diabetes-prediction-exp-1") from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import accuracy_score, mean_squared_error, confusion_matrix
Мы также сохраним обученную модель, используя pickle
, и зарегистрируем ее как артефакт в mlflow.
import pickle with mlflow.start_run(run_name="diabetes-1.1"): random_state = 8 mlflow.set_tag("developer", "dev-name") mlflow.log_param("random_state", random_state) # hyperparameters of models or other parameters that changes during experimentation rfm = RandomForestClassifier(random_state=random_state) rfm.fit(X_train, y_train) y_pred = rfm.predict(X_test) rmse = mean_squared_error(y_test, y_pred, squared=False) accuracy = accuracy_score(y_test, y_pred) mlflow.log_param("rmse", rmse) mlflow.log_param("accuracy score", accuracy) print("RandomForest accuracy: {}".format(accuracy_score(y_test, y_pred))) # save model pickle.dump(rfm, open('models/model.pkl', 'wb')) mlflow.log_artifact(local_path="/models", artifact_path="models_pickle")
Будет создан цикл, который можно просмотреть на localhost:5000
, на вкладке diabetes-prediction-exp-1
.
Если мы нажмем на самый последний запуск, то есть на первый, мы увидим журналы как параметры, метрики, артефакты и т. д.
В поисках лучшей модели
После обучения нашей исходной модели мы будем использовать hyperopt
для поиска лучших параметров для обучения нашей модели.
from hyperopt import fmin, tpe, hp, STATUS_OK, Trials from hyperopt.pyll import scope
Мы определим целевую функцию, которая принимает проверяемые параметры и регистрирует RMSE и показатель точности в mlflow.
def objective(params): with mlflow.start_run(): mlflow.set_tag("model", "randomforest") mlflow.log_params(params) rfm = RandomForestClassifier(random_state=random_state) rfm.fit(X_train, y_train) y_pred = rfm.predict(X_test) rmse = mean_squared_error(y_test, y_pred, squared=False) accuracy = accuracy_score(y_test, y_pred) mlflow.log_param("rmse", rmse) mlflow.log_param("accuracy score", accuracy) y_pred = rfm.predict(X_test) rmse = mean_squared_error(y_test, y_pred, squared=False) mlflow.log_metric("rmse", rmse) return {'loss': rmse, 'status': STATUS_OK}
Затем мы будем использовать hyperopt
для поиска лучших параметров, указав пространство поиска, алгоритм и максимальное количество оценок. На выходе будут лучшие параметры, найденные hyperopt
.
search_space = { "n_estimators": hp.choice("n_estimators", [100, 200, 300, 400,500,600]), "max_depth": hp.quniform("max_depth", 1, 15,1), "criterion": hp.choice("criterion", ["gini", "entropy"]), } best_result = fmin( fn=objective, space=search_space, algo=tpe.suggest, max_evals=50, trials=Trials() ) print(f"Best: {best_result}") # output # Best: {'criterion': 0, 'max_depth': 1.0, 'n_estimators': 5}
Наконец, мы снова обучим модель с лучшими параметрами, полученными на предыдущем шаге, и воспользуемся функцией Mlflow autolog
, чтобы записать все параметры и показатели по умолчанию на нашу панель инструментов.
best_params = { 'criterion': 0, 'max_depth': 1.0, 'n_estimators': 5 } mlflow.sklearn.autolog() best = fmin( fn=objective, space=best_params, algo=tpe.suggest, max_evals=1, trials=Trials() )
Пример панели
Несколько примеров скриншотов панели управления mlflow.
Заключение
В заключение, MLflow предлагает комплексную платформу для улучшения вашего рабочего процесса машинного обучения. Благодаря мощным инструментам отслеживания экспериментов и управления моделями специалисты по данным могут эффективно организовывать, сравнивать и воспроизводить эксперименты для проверки и повышения точности моделей.
Используя MLflow, специалисты по данным могут сосредоточиться на разработке и улучшении моделей, не обременяя себя управлением всем жизненным циклом. Благодаря удобному интерфейсу и возможностям автоматического ведения журналов MLflow позволяет специалистам по данным принимать решения на основе данных, обеспечивать воспроизводимость и управлять эффективными и успешными проектами машинного обучения. Усовершенствуйте свой рабочий процесс машинного обучения с помощью MLflow уже сегодня!