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

Идея этой статьи состоит не в том, чтобы построить идеальную модель для варианта использования, в котором я собираюсь построить модель машинного обучения, а в том, чтобы погрузиться в функциональность mlflow и посмотреть, как ее можно интегрировать в конвейер машинного обучения для повышения эффективности. в повседневной работе для специалиста по данным / инженера по машинному обучению.

mlflow kezako ?!

Mlflow - это пакет Python, разработанный databricks, который определяется как платформа с открытым исходным кодом для жизненного цикла машинного обучения. Вокруг mlflow () есть три столпа.

Их документация действительно великолепна, и у них есть хороший учебник, объясняющий компоненты mlflow. В этой статье я собираюсь сосредоточить свой тест на частях отслеживания и моделей mlflow, потому что буду честен с вами, я не видел смысла в части проекта (похоже, экспорт conda и файл конфигурации для запуска скрипта python в определенном порядке), но я уверен, что это может помочь некоторым людям в репродуктивном аспекте трубопровода мл.

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

Описание варианта использования

Чтобы протестировать mlflow, я собираюсь использовать тот же вариант использования, который я использовал для получения наноразмерной степени инженера Udacity ML в 2017 году:

Создайте систему прогноза потребления электроэнергии во Франции

Вы можете найти все ресурсы, которые я создал на данный момент, в этой папке моего репозитория Github о наностепени.

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

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

Что еще важнее об этом анализе, чтобы повторить его в 2019 году, я вернулся на веб-сайт opendata RTE и был приятно удивлен, увидев, что веб-сайт эволюционировал за счет добавления дополнительных данных на платформу (они связали себя с другими системами управления энергопотреблением). компании), так что теперь есть данные о потреблении энергии и некоторая дополнительная информация, например, региональная погода.

В этом проекте я просто собираюсь использовать следующие функции для обучения модели:

  • Информация о дне, такая как день недели, месяц, номер недели и если во Франции выходной день с пакетом праздники)
  • Информация о дневной температуре наружного воздуха (минимальная, средняя и максимальная) во Франции, одна - это просто глобальная средняя температура наружного воздуха в каждом регионе (средн.), А другая - это средневзвешенное значение, основанное на количестве людей в каждом регионе.

Вы можете найти блокнот, который обрабатывает необработанные данные из открытых в этом репозитории.

Что касается части моделирования, как я сказал, идея состоит не в том, чтобы построить супер-модель, которая будет прогнозировать потребление энергии, например, с точностью 99,999%, а в том, чтобы увидеть, как интегрировать mlflow в конвейер, который я построил год назад для моей наностепени.

Я собираюсь протестировать следующие модели:

  • Регрессор KNN из scikit learn (с различными параметрами и функциями)
  • регрессор MLP из scikit learn (с различными параметрами и функциями)
  • созданная вручную кусочно-линейная регрессия под названием PTG

Идея будет заключаться в использовании данных с 2016 по 2019 год (без учета) для обучения и тестирования алгоритма на данных 2019 года.

Описание конвейера машинного обучения

На следующем рисунке представлено мое видение простого конвейера потока мл, отвечающего такому варианту использования.

В этом конвейере машинного обучения есть 4 основных этапа:

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

Так где же mlflow в этом конвейере?

Для меня библиотека четко подходит для шагов 2, 3 и немного - для 4, и это действительно здорово, чтобы охватить всю эту область.

Давайте теперь подробнее рассмотрим использование mlflow.

Протестируйте и соберите модели (отслеживание mlflow)

Как мы уже говорили ранее, нам нужно будет найти правильные модели, соответствующие этой задаче прогноза. Для инициализации конвейера нам нужно будет определить эксперимент, которым будет прогноз потребления электроэнергии, который также будет иметь эксперимент (В данном случае 1).

Каждый тест модели (модели или параметров) будет определен как запуск в mlflow (и отмечен идентификатором runid) и сохранен в папке mlruns, которая появится в текущей папке.

Чтобы организовать свой код, я сохраняю ту же структуру, что и в учебнике mlflow. Вот пример фрагмента моего кода для обучения регрессора KNN.

При таком подходе каждая модель помечается типом модели и функциями, использованными для ее создания. Что касается показателей оценки, я сосредотачиваю свою оценку на:

Я применяю этот подход ко всем моделям, и все данные хранятся в папке mlruns.

Чтобы использовать пользовательский интерфейс mlflow, просто нужно выполнить следующую команду в вашем рабочем каталоге.

Вы должны получить доступ к пользовательскому интерфейсу со страницы localhost: 5000 и выбрать правильный эксперимент. Вот скриншот главной страницы эксперимента.

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

На странице пробега есть:

  • раздел параметров, где вы можете найти параметр, примененный в модели
  • метрики, вычисленные во время прогона
  • теги, связанные с моделью

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

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

А есть еще одна панель для визуализации с помощью Plotly и сравнения модели между ними. Я быстро анимировал эту панель визуализации.

Я обнаружил, что эта последняя функция довольно ограничена для сравнения моделей разных категорий (например, KNN и MLP), кажется, более приспособленной для сравнения моделей семейства.

Но этот пользовательский интерфейс - не единственный способ выполнять анализ журналов, все журналы могут быть собраны в фрейм данных с помощью команды на Python.

mlflow.search_runs(experiment_ids="1")

И вы можете провести более глубокий анализ вашей среды Python, например, получить лучшую модель на основе оценки RMSE. Существует простой анализ журналов в Python.

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

Обслуживание модели (модели mlflow)

С помощью mlflow вы можете быстро развернуть локальную модель с помощью следующей команды:

mlflow serve 
-m path_to_the_model_stored_with_the_logfuction_of_mlflow 
-p 1234

Просто нужно направить команду mlflow serve в папку модели с параметром -m и назначить новый порт (по умолчанию тот же, что и для пользовательского интерфейса mlflow, и это может раздражать)

Чтобы выполнить прогнозирующий вызов, вам необходимо отправить запрос POST в конечную точку / invocation этого API с этим параметром фрейм данных, который был преобразован в json с разделением ориентации (будет более понятным с кодом для преобразования 👇)

toscore = df_testing.to_json(orient = "split")

И после этого вы можете легко вызвать API с помощью POST-запроса от Postman или Python

import requests 
import json 
endpoint = "http://localhost:1234/invocations" 
headers = {"Content-type": "application/json; format=pandas-split"} response = requests.post(endpoint, json = json.loads(toscore) , headers=headers)

Но теперь главный вопрос: Как развернуть его в Интернете?

mlflow сделан довольно хорошо, у вас есть встроенные функции для быстрого развертывания модели на Microsoft AzureML или на AWS Sagemaker. Поскольку я больше работаю с AWS, я собираюсь сосредоточить развертывание на AWS Sagemaker.

Развертывание состоит из двух этапов:

mlflow sagemaker build-and-push-container

Конечно, команда должна запускаться на машине с установленным Docker и пользователем AWS с правильными правами для развертывания чего-либо на AWS, например, у меня, поскольку доступ администратора может быть не лучшим, но YOLO.

mlflow sagemaker deploy

Но даже в Windows или Linux это не сработало. Поэтому я пробую другой подход из этого сообщения в блоге. В этом суть кода есть завершение.

Развертывание выполняется довольно быстро (около 10 минут), и после того, как вы можете вызвать API-интерфейс развертывания на AWS с помощью этого фрагмента кода (из блога databricks)

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

Мне очень нравится экспериментировать с mlfow, версионирование машинного обучения - это большая тема в целом, но в моей нынешней компании Ubisoft (если вы хотите присоединиться к семье Ubi, возможно, вам найдется работа здесь), это начинает быть действительно большое дело.

С моей точки зрения, mlflow действительно хорош, чтобы проводить автономные эксперименты, находить подходящую модель и быстро создавать прототип.

У меня все еще есть некоторые опасения по некоторым очень конкретным темам:

  • В модели ml есть алгоритм, но данные тоже очень важны, поэтому функцию тегов можно использовать для предоставления информации об используемых данных, но, на мой взгляд, этого может быть недостаточно.
  • Класс модели должен сделать прогноз на основе фрейма данных Pandas, что хорошо, но, возможно, также является небольшим ограничением.
  • Отсутствие возможности автоматически задокументировать модель по функциям / данным, которые использовались для вызова модели, развернутой за API.
  • Модель управления из Tensorflow выглядит сверхсложной (pytorch выглядит проще), но этот последний пункт, возможно, исходит из того факта, что я не очень хорошо знаком с этими фреймворками (нет позиции в войне Tensorflow VS Pytorch 😀).

Но, честно говоря, отличная работа @databricks: вы сделали действительно отличный инструмент, чтобы помочь специалистам по данным в их экспериментах.

Первоначально опубликовано на сайте the-odd-dataguy.com 13 ноября 2019 г.