Краткий обзор управления жизненным циклом машинного обучения
Вы когда-нибудь обнаруживали, что тренируете модели, настраиваете гиперпараметры и часами выбираете функции только для того, чтобы понять, что у вас уже есть хороший набор параметров, но вы забыли отследить их или сохранить модель? Я знаю, что сталкивался, может быть, чаще, чем мне хотелось бы признать. Прежде чем вы откроете электронную таблицу и начнете записывать, какие альфа-значения или n соседей использует ваша модель, я хотел бы познакомить вас с MLflow.
MLflow — это универсальная платформа с открытым исходным кодом, разработанная Databricks для управления сквозным жизненным циклом машинного обучения. Он предлагает множество преимуществ для специалистов по машинному обучению, специалистов по данным и разработчиков, позволяя оптимизировать эксперименты, воспроизводимость и развертывание моделей машинного обучения. Итак, давайте посмотрим, что он может сделать для вас!
Основные компоненты MLflow
Прежде чем мы углубимся в основы использования MLflow, важно понять, что такое MLflow и почему он является важным инструментом в сегодняшней среде машинного обучения.
MLflow помогает управлять жизненным циклом машинного обучения, включая экспериментирование, воспроизводимость и развертывание. Он вмещает любую (Python) библиотеку машинного обучения. Он предоставляет готовые к использованию интерфейсы для наиболее распространенных, что обеспечивает высокую степень универсальности для удовлетворения всех ваших потребностей в разработке.
MLflow состоит из четырех основных компонентов:
- Отслеживание MLflow. Основной API регистрирует и организует эксперименты по машинному обучению. Он записывает параметры, метрики и артефакты (например, модели, записные книжки и сценарии), позволяя вам отслеживать запуски экспериментов и их результаты. Он поставляется с пользовательским интерфейсом, к которому вы можете получить доступ через локальный хост для просмотра, визуализации и управления вашими экспериментами.
- Проекты MLflow: формат упаковки кода для воспроизводимости и совместного использования. Он определяет стандартную структуру кода машинного обучения, упрощая его понимание, повторное использование и совместную работу с другими.
- Модели MLflow: стандартный формат для упаковки моделей ML в нескольких вариантах (платформы ML), а также репозиторий для хранения и совместного использования моделей. Это упрощает развертывание модели на разных платформах.
- Реестр моделей MLflow. Централизованный репозиторий моделей с информацией о происхождении модели, управлении версиями, переходах между этапами и аннотациях. Это особенно полезно в среде совместной работы, когда вам нужно сравнить и объединить свои модели с моделями членов вашей команды.
Сила MLflow заключается в его способности упростить и оптимизировать жизненный цикл машинного обучения, упрощая отслеживание и сравнение экспериментов, воспроизведение кода, управление моделями и относительно простое развертывание решений.
Погружение в отслеживание MLflow: управляйте экспериментами ML
Давайте начнем практическую часть этого тура с отслеживания MLflow. API и пользовательский интерфейс для регистрации и управления всем, что связано с вашими экспериментами машинного обучения.
Вы можете использовать его в простом скрипте или масштабировать для крупномасштабных учебных сред. Позвольте мне проиллюстрировать базовое использование с помощью простого фрагмента кода, использующего регрессию ElasticNet из Scikit-learn.
import mlflow import mlflow.sklearn from sklearn.linear_model import ElasticNet from sklearn.metrics import mean_squared_error import numpy as np # Initiate a new MLflow run with mlflow.start_run(): # Train and fit the model model = ElasticNet(alpha=0.5, l1_ratio=0.5) model.fit(X_train, y_train) # Make predictions and calculate the RMSE predictions = model.predict(X_test) rmse = np.sqrt(mean_squared_error(y_test, predictions)) # Log parameters mlflow.log_param("alpha", 0.5) mlflow.log_param("l1_ratio", 0.5) # Log metric mlflow.log_metric("rmse", rmse) # Log model (artifact) mlflow.sklearn.log_model(model, "model")
После запуска этого скрипта вы можете просмотреть зарегистрированные сведения о выполнении в пользовательском интерфейсе отслеживания MLflow. Удобный интерфейс позволяет фильтровать и сортировать прогоны по различным параметрам и показателям, что позволяет проводить сравнительный анализ различных прогонов.
Реестр моделей MLflow: оптимизируйте управление моделями
После начала работы с отслеживанием MLflow вы также можете начать организовывать свои модели. Здесь на помощь приходит Реестр моделей MLflow, централизованный репозиторий моделей, который тесно интегрируется с MLflow Tracking. Это отличный инструмент для отдельных лиц и групп, позволяющий просматривать, совместно использовать и совместно работать над моделями ML.
Реестр моделей упрощает переход моделей от экспериментов к производству. Это достигается за счет отслеживания происхождения модели, управления версиями модели, переходов между этапами и аннотаций модели.
Вы можете использовать реестр моделей следующим образом:
- Зарегистрируйте модель из отслеживания MLflow:
mlflow.sklearn.log_model(lr_model, "model")
2. Зарегистрируйте зарегистрированную модель в реестре:
result = mlflow.register_model( "runs:/d16076a3ec534311817565e6527539c0/model", "ElasticNetWineModel" )
Модель регистрируется с использованием идентификатора запуска (в примере d16076a3ec534311817565e6527539c0
).
3. Список всех зарегистрированных моделей:
Вы можете проверить, успешно ли зарегистрирована ваша модель, перечислив все зарегистрированные модели:
mlflow.search_runs()
4. Загрузите модель из реестра:
Вы можете загрузить модель из реестра для прогнозирования или оценки:
model_uri = "models:/ElasticNetWineModel/1" model = mlflow.pyfunc.load_model(model_uri)
5. Перенесите версии модели между этапами:
Реестр моделей позволяет выполнять переходы между этапами модели. Вы можете перевести модель из стадии «Нет» в «Постановка», «Производство» или «Архив»:
client = mlflow.tracking.MlflowClient() client.transition_model_version_stage( name="ElasticNetWineModel", version=1, stage="Production", )
В этом примере мы перевели версию 1 нашей модели на этап «Производство» для последующего использования.
Понимание моделей MLflow
Как именно MLflow сохраняет ваши модели?
Модели MLflow предлагают стандартный формат для упаковки моделей машинного обучения, который можно использовать в различных последующих инструментах. Например, обслуживание в режиме реального времени через REST API, пакетный вывод в кластере Spark и многое другое.
Модели MLflow используют простое соглашение для упаковки моделей, где каждая модель сохраняется в виде каталога, содержащего все необходимые файлы и файл дескриптора, в котором перечислены несколько «разновидностей», в которых может использоваться модель.
Разновидность определяет конкретный формат модели или библиотеку, с которой модель может работать. Есть ароматы для самых важных библиотек. Например, модель TensorFlow можно загрузить как формат TensorFlow SavedModel или как функцию Python для применения к входным данным.
Если у вас есть модель из пользовательской библиотеки или модель, которая не является встроенной, вы все равно можете использовать ее в универсальной функции Python:
import mlflow.pyfunc class ModelWrapper(mlflow.pyfunc.PythonModel): def load_context(self, context): # Initialization logic pass def predict(self, context, model_input): # Prediction logic pass # Saving the model mlflow.pyfunc.save_model(path="model_path", python_model=ModelWrapper())
Когда вы будете готовы обслуживать свою модель (например, для API), вы можете использовать команду mlflow models serve
:
mlflow models serve -m models:/ElasticNetWineModel/1 -p 1234
Эта команда будет обслуживать указанную версию модели (в данном случае 1
) на локальном хосте через порт 1234
.
Изучение проектов MLflow: упростите упаковку кода
Как указано выше, MLflow Projects — это формат для упаковки вашего кода повторно используемым и воспроизводимым способом. Это в основном помогает вам делиться проектами между командами и позволяет запускать их на разных платформах. Каждый проект — это просто каталог или репозиторий, содержащий ваш код и файл дескриптора с именем MLproject
.
Файл MLproject
определяет структуру проекта, включая его зависимости, точки входа и параметры для вашего кода. Ваш файл MLproject
может выглядеть так:
name: My_Project conda_env: conda.yaml entry_points: main: parameters: alpha: float # no default value l1_ratio: {type: float, default: 0.5} # default value command: "python main.py {alpha} {l1_ratio}" # run script with params
В этом примере main.py
— это точка входа в проект. alpha
и l1_ratio
— параметры этого скрипта. В файле conda.yaml
перечислены зависимости проекта Python.
Вы можете запустить точку входа в проекты с помощью команды mlflow run
:
mlflow run . -P alpha=0.42
Команда извлекает необходимые зависимости, запускает ваш код с заданными параметрами и/или параметрами по умолчанию и записывает результаты на сервер отслеживания.
Подведение итогов
На этом мы завершаем нашу экскурсию по MLflow.
Мы рассмотрели все четыре компонента MLflow: отслеживание MLflow, проекты MLflow, модели MLflow и реестр моделей MLflow. Эти инструменты объединяются, чтобы предоставить вам комплексную платформу для управления жизненным циклом машинного обучения, облегчения совместной работы, повторного использования кода и отслеживания экспериментов.
Независимо от того, работаете ли вы в одиночку или в нескольких командах, имеете дело с простыми моделями или сложными конвейерами машинного обучения, я надеюсь, что вы найдете MLflow достойным инструментом для интеграции в свой рабочий процесс.
Помните, что здесь я лишь коснулся поверхности возможностей MLflow. Для более глубокого изучения расширенных функций, примеров и использования ознакомьтесь с официальной документацией по MLflow или возможными последующими публикациями.
Как всегда, я также надеюсь, что вы узнали что-то, что поможет вам на этом пути. Наслаждайтесь изучением и использованием возможностей MLflow в своих проектах машинного обучения!
-Мерлин
Источники: