Обзор MLOps с MLflow и Delta Lake на Databricks

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

Одна из замечательных особенностей этой индустрии заключается в том, что всегда есть инструменты, которые могут нам помочь. Поэтому мне пришлось вмешаться в надежде решить эти проблемы для будущих проектов. Сегодня я представляю вам свой опыт использования MLflow и Delta lake для обработки MLOps. Почему именно эти фреймворки? это потому, что они являются частью Databricks, которые я использую ежедневно.

Пойдем!

Обзор этого обзора

Я не планировал это, просто рифмуется. В этой записи мы рассмотрим:

  1. Хранение данных и управление версиями с Дельта-таблицами.
  2. Структурированный стандартный способ проведения и регистрации экспериментов и сохранения моделей после каждой итерации обучения с помощью MLflow Tracker.
  3. Регистрация моделей и управление этапами жизненного цикла с помощью Реестр моделей MLflow.
  4. Развертывание моделей в производство с помощью Обслуживание моделей MLflow.

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

0. Настройте среду Databricks.

Этот шаг не является обязательным. Мы собираемся создать рабочую область Databricks Community Edition, поскольку она по умолчанию включает в себя все инструменты, которые будут рассмотрены.

Для начала перейдите по этой ссылке. Вам нужно будет ввести необходимую информацию, чтобы создать учетную запись Databricks и использовать рабочую область Community Edition. После этого вы войдете в Databricks, что приведет вас к следующему экрану:

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

Щелкните Create Cluster a gain и дождитесь запуска кластера. Вот и все, мы все настроены на самое интересное.

В качестве примечания, вы также можете установить их в своих собственных средах, но это требует дополнительных усилий. Прочтите об установке

1. Хранение данных и управление версиями с помощью Дельта-таблиц. Прекратите использовать файлы CSV.

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

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

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

Подробнее про Delta Lake вы можете прочитать в следующей документации.

2. Проведение и регистрация экспериментов с помощью MLFlow Tracker.

MLFlow - отличный инструмент для экспериментов с машинным обучением. Это позволяет нам регистрировать гиперпараметры, показатели производительности, схемы ввода для конкретной модели машинного обучения и артефакты, такие как кривая ROC, с минимальными изменениями кода. Это экономит нам много времени и усилий, связанных с разработкой и реализацией нашей собственной политики регистрации экспериментов машинного обучения. Кроме того, модель сохраняется как файл pickle и доступна для загрузки.

Сначала вам нужно перейти на боковую панель, выбрать W orkspace, щелкнуть правой кнопкой мыши, выбрать C reate, а затем выбрать эксперимент MLflow.

У каждого эксперимента будет идентификатор, который вы можете передать контексту MLflow внутри записной книжки прямо перед выполнением обучения и тестирования. Код будет очень похож на этот, если вы используете модель scikit-learn:

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

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

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

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

3. Регистрация моделей и управление этапами с помощью Реестра моделей MLflow.

Теперь мы можем лучше управлять нашими данными и нашими экспериментами, но как насчет различных этапов разработки наших моделей? Реестр моделей MLflow - отличный инструмент для этой цели. Согласно документации, это централизованный репозиторий моделей, пользовательский интерфейс и набор API, которые позволяют управлять полным жизненным циклом моделей MLflow. Он обеспечивает хронологическое происхождение, управление версиями и переходы между этапами: нет, постановка, производство или архивирование.

Есть два варианта регистрации модели. Первый - это использование пользовательского интерфейса. Выберите эксперимент. Затем при желаемом запуске в разделе артефактов нажмите кнопку Зарегистрировать модель.

Второй вариант - использование API. Во-первых, вам нужно объявить идентификатор запуска и путь, по которому была сохранена ваша модель. Затем вы вводите следующее:

После регистрации моделей они появятся в пользовательском интерфейсе в разделе модели на левой боковой панели.

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

и API:

Использование API должно позволить вам автоматически выполнять более сложные проверки, например обеспечивать соответствие ваших моделей определенным критериям производительности на тестовом наборе. Есть еще кое-что, что вы можете сделать с реестром моделей, ознакомьтесь с ними в документации.

4. Развертывание моделей в производственной среде с помощью обслуживания моделей MLflow.

Итак, с реестром моделей мы теперь точно знаем, каковы этапы наших моделей, когда они были обучены, использовались гиперпараметры и сообщались метрики, вместо того, чтобы просто иметь кучу файлов pickle в каталоге. Отлично! Но когда модель наконец достигает стадии производства, нам нужен инструмент для обслуживания логических выводов. Опять же, на помощь приходит MLflow. Мы можем размещать наши зарегистрированные модели с помощью MLflow Model Serving as REST API, которые автоматически обновляются в зависимости от версий и этапов конкретной модели. Из документации Databricks автоматически создает уникальный кластер для модели и развертывает все неархивированные версии модели в этом кластере.

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

Теперь мы можем делать запросы с помощью python для вывода:

Подробнее об этой функции вы можете прочитать в документации.

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

Увидимся!