Привет, я Андрей Качетов, Head of ML Operations в Альфа-Банке. Отвечаю за опромышливание всех ML-моделей в банке, строю новую платформу MLOps, а также формирую единый подход для работы с модельными данными (Feature Store).

В статье, без картинок с «бесконечностями» Ops’ов, расскажу, как может выглядеть полноценный конвейер MLOps, что может уметь и немного о том, как мы пришли к максимальной автоматизации процесса вывода моделей в промышленную эксплуатацию.

Зачем нам нужен MLOps?

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

Однако важна ещё и скорость «приземления» таких прогнозов и оценок на конкретные бизнес-процессы. Если компания может быстро обновлять модели, то она может быстрее реагировать на изменения рынка и поведения игроков, корректировать соответственно модели и стимулировать в итоге рост если не прибыли, то выручки. Time2Market сейчас во главе угла любой инновации. 

Здесь и появляется необходимость в конвейере. 

Автоматизация — традиционный способ повышать производительность команд разработки, а также оптимизировать издержки, снижать риски инцидентов и повышать устойчивость систем. Такой конвейер и есть MLOps — комплексное управление жизненным циклом моделей машинного обучения в промышленной эксплуатации (в продакшене).

Если брать совсем грубо, то MLOps — это использование и некоторая адаптация DevOps-подходов применительно к работе с ML — процесс непрерывной поставки или промышленного развертывания моделей.

DevOps — процесс непрерывной разработки ПО 

MLOps = Machine Learning (Машинное обучение) + DevOps

Процесс беспрерывной накатки кода в промышленную среду.

Автоматизированное управление жизненным циклом ПО.

Разработка (Development) + эксплуатационное сопровождение (Operations).

Стандартизация непрерывной поставки/разработка и промышленное развертывание моделей ML

 Результат в MLOps обеспечивается совокупностью факторов:

  • качество входных данных (зависит от Дата-Инженеров – Data Engineers, DE);

  • разработка ML-модели (зависит от «моделистов» — Data Scientists и DS);

  • разработка и развертывание ML-решения (за это отвечают ML-инженеры);

  • управление инфраструктурой (здесь «правят» DevOps-инженеры).

Другими словами, в фокусе MLOps сразу и модели, и инструменты машинного обучения, и инфраструктура для их применения, и инструменты деплоя (как в обычном DevOps) — версионирования, хранения конфигураций, автотестирования. В MLOps мы быстро накатываем изменения в модели с помощью нескольких разных идентичных сред.

Схематично платформа для автоматизированной разработки ML может выглядеть так. 

Вместо картинки с «восьмёрками/бесконечностями»
Вместо картинки с «восьмёрками/бесконечностями»

 С такими платформами работают DS, DE и MLE «в комплексе».

  • Data Scientist занимается поиском закономерностей в больших массивах данных, анализирует их и прогнозирует будущие значения.

  • Data Engineer разрабатывает, тестирует и поддерживает инфраструктуру данных, занимается очисткой, обработкой и трансформацией данных для DS.

  • ML Engineer разворачивает модели машинного обучения в промышленной среде.

Как организован процесс от разработки до вывода моделей и кто в нем участвует
Как организован процесс от разработки до вывода моделей и кто в нем участвует

Отчасти ML-инженеры – это специалисты на стыке между моделистами (DS) и разработчиками. У нас в команде MLOps их сегодня 6. Но так было не всегда.

Как было до экосистемы?

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

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

Такой процесс требовал вовлечения нескольких разработчиков и существенных временных затрат, в том числе, на постановку задачи, аналитику и тестирование. Также он накладывал свои требования на архитектуру систем и состав их компонент. А некоторые модели (например, нейросетевые) вообще не могли исполняться в существовавшей на тот момент инфраструктуре — для их работы требовалась непрерывная поставка больших данных или специфичная среда исполнения кода.

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

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

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

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

Как строилась экосистема ML в банке

Ускорить разработку и развертывание ML-моделей помогла созданная с нуля платформа, на которой можно:

  • вести трекинг ML-экспериментов;

  • оптимизировать параметры ML-моделей;

  • создавать и запускать пайплайны;

  • и организовывать инференс (код исполнения).

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

Для этого у нас сейчас есть:

  • СРМ или MDP (Model Development Platform — Среда Разработки Моделей): новый флагман модельной разработки в банке, база для модельной разработки в банке.

  • СИМ (Система Исполнения Моделей): оптимизирует и ускоряет процессы вывода моделей в промышленную эксплуатацию, включая их тестирование (в проме сейчас уже 60 моделей).

  • Feature Store (в едином хранилище Hadoop — более 100 ТБ данных), как настоящий маркетплейс фичей, которые используется моделями машинного обучения и аналитиками банка.

Это наша экосистема ML в банке.

Все три системы разрабатывались параллельно. СИМ разрабатывали с участием команды вендора, а MDP и FS – силами внутренних команд.

СИМ: Система Исполнения Моделей

Началось всё с нее. СИМ разрабатывалась примерно год, из которых примерно полгода заняли дискуссии, на которых мы стремились прийти к единому пониманию необходимого инструментария и функциональности системы. 

Обсуждались все детали: 

  • что будет делать подрядчик (решили, что берёт на себя всю разработку системы);

  • каким должно быть архитектурное решение;

  • что использовать из лучших практик с рынка с минимальными издержками (какие фреймворки, какие подходы, какой софт);

  • какие функциональные области необходимы;

  • как и кем будут настраиваться стенды (подрядчик или внутреннее ИТ, на ком лидерство) и пр. 

Параллельно шёл тендер на выбор поставщика услуг. 

Ещё важно учесть, что сама по себе СИМ никому не нужна, если с ней не могут работать. Поэтому чуть больше квартала ушло на то, чтобы встроить СИМ в IT-процессы банка. Зато сейчас, когда СИМ уже в проме, любой пользователь внутри банка может запросить результат вычисления ML-модели и применить его в своем процессе. Доступ к разработанным моделям предоставляется по API-сервису: запрос к модели идет через определенный URL (в него включено имя приложения и версия API), и она даёт на него ответ. 

Процесс выведения любой ML-модели в промышленную эксплуатацию автоматизирован — весь процесс прозрачный, быстрый и защищенный. Деплой разработанных моделей идёт по стандартному циклу: от получения, валидации и подготовки данных до разработки кода модели, её обучения и деплоя. 

После запуска СИМ скорость внедрения моделей теперь составляет 3-4 недели. Новая цель — ускориться еще больше и дойти до показателя в 4-5 рабочих дня.

СРМ: Среда Разработки Моделей

Среда разработки моделей (MDP) — программно-аппаратный комплекс для разработки и обучения моделей ML. В СРМ есть всё для разработки: Kubernetes, фреймворки, библиотеки, хранилка, Jupiter Notebook, VS-код, пайплайны CI/CD через Jenkins, Cassandra для горячего хранения. В этой среде можно подключиться к единому хранилищу данных (КХД), разработать, запустить и протестить код, который будет работать в бою также — ведь среды разработки и исполнения полностью идентичные.

СРМ начала разрабатываться параллельно с СИМ. Ситуация тогда сложилось несколько курьезная — сосредоточившись на дискуссиях вокруг СИМ, почти упустили из вида тот факт, что единой среды, где все DS готовили бы код, вообще-то тоже нет. По сути каждый работал на своих вычислительных мощностях. Но раз уж начали автоматизировать и унифицировать — то и здесь решили создать единую среду для исследований и разработки. 

Платформа разрабатывалась внутренней командой. Решение было построено примерно за 8 месяцев — на базе единого JupiterHub и MLflow. Ещё несколько месяцев занял процесс выстраивания сквозного технологического единения систем с СРМ. Наша среда разработки просто космолет, и чтобы он полетел надо его тонко настроить. 

Feature Store

Feature Store — это и система, и новая парадигма непрерывной доставки данных для разработки моделей. В неё входят 3 компонента:

  • FS ETL — единый процесс создания фичей.

  • FS Registry — визуализация метаинформации о фичах.

  • FS Datamart — единый интерфейс получения фичей (здесь реализован поиск и есть «витрина» доступных фичей).

Её разработка заняла чуть больше года, и ей полностью занималась внутренняя команда MLOps. На сентябрь 2021 года это всего 3 человека: два разработчика и техлид (которые начали продвижение проектов СИМ и СРМ). Сейчас «МЛОпсов» уже 21: это и ML-инженеры, и DevOps’ы, и QA, и тимлиды. 

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

На платформе Feature Store DS’ы могут просматривать все имеющиеся признаки «в одном окне» и подбирать для себя нужные, а не создавать повторно дубли. 

Пример витрины Feature Store  
Пример витрины Feature Store  

Такое переиспользование существенно ускоряет работу с данными, их качество теперь проверено (и по сути гарантировано). Ну, и общий time-to-market разработки ML-моделей улучшается — пока до 3-4 недель, но есть потенциал ускориться вообще до одной.

Благодаря тому, что все фичи и датасеты хранятся централизованно, можно собирать большое количество различных метаданных, анализировать «популярность» переменных, вести мониторинг и статистику применения — какие фичи сколько раз, кем и где использовались. Вся информация о фичах, старте расчетов, статусе работы сохраняется автоматически. 

Основные потребители Feature Store в банке: 

  • Дата-инженеры — выполняют расчёт фичей и создают широкую выборку фичей для моделей.

  • DS-специалисты — работают с данными и подбирают фичи для моделей. Если нужной им фичи нет — «заказывают» её появление в хранилище.

  • ML-инженеры — используют фичи для упрощения вывода ML-моделей в пром.

  • Аналитики — используют эталонные данные для целей бизнес-аналитики и оптимизации процессов.

Ключевые вехи разработки экосистемы ML кратко.

Сентябрь 2021 — старт разработки СИМ выбранным вендором

Ноябрь 2021 — обсуждение концепции Feature Store. Выбирая из разных вариантов (от Open Source решений до полностью кастомной разработки), сначала решили пропилотировать решение Feast с открытым кодом. 

Декабрь 2021 — старт эксперимента с Open Source решением Feast — предшественником Feature Store. Неудачных экспериментов, как известно, не бывает, любой результат засчитывается — здесь мы столкнулись  с некоторыми сложностями с приземлением готового решения под свои потребности и бизнес-задачи. 

Январь 2022 — запуск собственной разработки СРМ (будущей MDP).

Февраль 2022 — проектирование необходимой инфраструктуры, закупка «железа» — bare-metal серверы с GPU. Закупка проходила не без проблем, удалось в итоге, как и всем, получить и запустить его только к сентябрю 2022. На серверах стоит Kubernetes, Jupiter, Grafana и т.д., которые настроены так, чтобы они могли работать с серверами, с GPU, с видеокартами, со средой для DS, как для разработки, так и для внедрения.

Март 2022 — по итогам того самого декабрьского эксперимента решили отказаться от рыночных решений и вендорской разработки в пользу создания собственной платформы Feature Store. Чтобы точно соответствовать всем выявленным потребностям бизнес-пользователей. 

Июль 2022 — СИМ выходит в опытно-промышленную эксплуатацию (ОПЭ), на dev среду начинают заезжать первые модели, выявлены и дорабатываются недочеты системы. 

Октябрь 2022 — миграция команд DS на новую инфраструктуру ML.

Ноябрь 2022 — СИМ переходит в промышленную эксплуатацию.

Декабрь 2022-январь 2023 — СРМ и Feature Store выходят в ОПЭ и готовятся к эксплуатации.

Как это всё работает, или Сценарии использования СИМ, СРМ и Feature Store

  • Допустим, DS понял, какая модель нужна и для каких бизнес-задач, посетил Feature Store и выбрал для себя нужные данные. 

  • Если чего-то не хватило — дозапросил их у DE, чтобы тот собрал недостающие данные и поместил их также в Feature Store. 

  • Дальше DS провёл исследование в MDP, подобрал алгоритм и подготовил код модели. 

  • Если с кодом всё ок, то в этот момент DS ставит задачу на ML-инженера по выводу готовой модели в СИМ, на постоянный расчет.

  • ML-инженер проводит код ревью, и если с моделью все ок, DS отправляет её к тестировщикам и деплой. 

  • Модель проходит функциональное, интеграционное и нагрузочное тестирование, и если на всех этапах отрабатывает корректно, выходит в прод.

  • А если обнаруживаются какие-либо ошибки — отправляется на корректировки и доработки, после чего ещё раз тестируется.

Участие людей в этом процессе, благодаря новой платформе, стало минимальным. В целом, конвейер работает отлично, с его помощью выводится 50 моделей в квартал.

Что будет дальше?

Следующие наши шаги и планы на ближайшее будущее:

Подключение все большего числа пользователей к СИМ. Будет наращен объём данных, используемый моделями для работы, чтобы повысить точность их вычислений. А увеличение ресурсных мощностей системы позволит получать ответы за доли секунды, что значительно сократит время на принятие решений.

Создание контура тестирования моделей с промышленными данными. Здесь необходимы, помимо технологических, и определённые организационные шаги, с внесением изменений в существующие производственные процессы банка. А значит, вопрос — какая часть на деле займет больше времени.

Автоматизировать процессы обучения, дообучения и внедрения в пром новой версии модели на базе AutoML (тоже наша собственная разработка).

И, сделать мир ML лучше, конечно же :)

Как связаться со мной и узнать больше деталей:


Рекомендованные статьи:

Также подписывайтесь на Телеграм-канал Alfa Digital — там мы постим новости, опросы, видео с митапов, краткие выжимки из статей, иногда шутим.

Комментарии (2)


  1. Daddyz
    07.06.2023 05:33

    Отличное описание основных вех MLOps в банке, но могли бы рассказать на чей опыт вы смотрели и чем не подошёл фист?


    1. kachetov Автор
      07.06.2023 05:33
      +1

      Привет, опыт смотрели разный - и российских банков (включая самый крупный зеленый), и зарубежных. Опыта, надо сказать, тогда было совсем немного.

      По feast:
      Главная причина - в невозможности выполнить произвольный код для расчёта признаков.
      В feast-репозиториях можно было всего лишь задать список таблиц и колонок, которые мы хотим получать из уже существующих витрин данных.
      А вот задать функцию или класс, которые будут вызываться для расчёта витрины данных, уже оказалось невозможно.
      Кроме того, feast не умел работать с PySpark - по крайней мере, в те времена.
      Вот и получилось, что свои потребности проще и быстрее было реализовать самим.