Как стать автором
Обновить
291.36
Альфа-Банк
Лучший мобильный банк по версии Markswebb

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

Уровень сложностиСредний
Время на прочтение8 мин
Количество просмотров1.2K

Привет, Хабр! На связи команда ML-инженеров из Департамента продвинутой аналитики Альфа-Банка (Лазаричева Екатерина, Дмитрий Гончаров, Николай Рябков, Илья Мясников и Асадян Гевонд), а также наши замечательные коллеги из «ГлоуБайт» (Альфия Харламова, Ростислав Изимов, Александр Малиновский и Анастасия Кулакова). Сегодня мы расскажем вам о нашем способе достижения дзена в процессе приручения онлайн-каскадов.

Немного о задаче

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

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

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

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

Именно для успешного применения описанной выше стратегии внедрения моделей совместно с коллегами из «ГлоуБайт» мы реализовали пайплайн для внедрения каскадных онлайн-моделей. 

Что такое каскад

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

Схематично логика работы каскадной модели проиллюстрирована на рисунке ниже.

Рисунок 1: схематичное изображение каскадной онлайн-модели.
Рисунок 1: схематичное изображение каскадной онлайн-модели.

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

Разработанный пайплайн предназначен для конфигурации и запуска каскадов онлайн-ML-моделей любого уровня вложенности.

Каскад имеет уникальное название в системе (name), тип (chain/group) и ноды, которые являются контейнерами для нижестоящих сущностей в иерархии. Сущностями могут быть как отдельные модули, так и группы или последовательности модулей. Каждая нода содержит сущность, которая представляет собой модуль, группу или последовательность модулей.

Если тип каскада chain, то это значит, что все сущности в нём будут запускаться последовательно, а если group — параллельно. При этом внутри нод можно также произвольно создавать группы и последовательности. Иерархическая структура каскада допускает свободную конфигурацию сущностей разных типов в рамках нод одного уровня. То есть на одном уровне могут быть запущены параллельно сущности типа group, chain или module.

Иерархия каскада

Самый нижний объект в иерархии — всегда модуль.

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

  • В ноды первого уровня вложенности (chain) передается список сущностей типа group: [group_1, group_2].

  • В ноды каждой группы второго уровня передается список сущностей типа module: [groupmodule_1, group_1.module_2], [group_2.module_3].

  • В сущности-модули передается словарь с мета-информацией о вызываемых модулях. Модули формируют третий уровень вложенности.

Таким образом, сначала в цепочке запустятся параллельно module_1, module_2, а затем, после их завершения, запустятся module_3 и module_4. На рисунке ниже представлена схема каскада.

Пользователь в рамах каждой ноды может произвольно настроить:

  • Список параметров модуля.

  • Список источников данных во входящем JSON: ключи, по которым каскад понимает, что данные относятся к конкретному модулю.

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

  • Правило валидации данных для входящего JSON в запросе с данными по клиенту.

  • Правило валидации результатов модулей в ответе модели.

Инфраструктура использования

Технически использование такой функциональности возможно благодаря наличию в нашем Банке продвинутой MLOps-платформы — Системы исполнения моделей. В совокупности с Системой разработки моделей пайплайн позволяет осуществлять разработку и бесшовное внедрение моделей машинного обучения любого уровня сложности.

  • В Системе разработки моделей производится конфигурация каскадной онлайн-модели и запускается сборка образа модели для сохранения в Artifactory через компоненту Cascade-developer реализованного пайплайна. 

  • Техническая настройка каскада не требует больших трудозатрат. Всё, что требуется, — использовать кастомизированную функцию из разработанной библиотеки и прописать обращение к нужным модулям, указав последовательность их запуска. Внутри каскада пользователь может настроить обращение к модулю по названию. При этом функционал пайплайна автоматически произведёт запрос по необходимому адресу внутри системы и преобразует название в ссылку на модель (API).

  • В Системе исполнения моделей производится скачивание сохранённого образа каскадной онлайн-модели и производится установка модели в Kubernetes. Работа и вызов каскада осуществляются через компоненту Cascade API реализованного пайплайна.

  • Бизнес-метрики работы каскада и модулей логируются в S3 Minio через настройку Vector, откуда могут быть скачаны для дальнейшего анализа.

Разработанное решение использует небольшое количество требуемых инфраструктурных компонент. Архитектурно схему работы пайплайна можно представить следующим образом:

  1. Metastore (Kubernetes CRD): хранение каталога каскадов.

  2. API (FastAPI): управления API.

  3. CI/CD (Jenkins): сборка и деплой отдельного каскада.

  4. Git: хранение кода каждого отдельного каскада.

  5. Repository (Artifactory): хранение python packages, docker images.

  6. Kubernetes: среда для разворота каскадов.

  7. Message Broker (Redis): брокер сообщений для работы Celery.

  8. Pipeline Service. Состоит из двух компонент: Celery Worker — каждый worker запускается в отдельной очереди (один воркер на каскад); API (FastAPI) — отдельный API для работы с конкретным Pipeline.

  9. S3: хранилище артефактов работы Pipeline.

  10. Keycloak: сервис для аутентификации и авторизации.

  11. UI: интерфейс для работы с платформой с помощью Python SDK.

  12. Active Directory: протокол LDAP.

Архитектура пайплайна для внедрения каскадных-онлайн моделей на рисунке ниже.

Рисунок 3: архитектура пайплайна для внедрения каскадных-онлайн моделей.
Рисунок 3: архитектура пайплайна для внедрения каскадных-онлайн моделей.

Как настроить каскад пользователю

Пользователь авторизуется под своей учётной записью, проходит аутентификацию, и затем настраивает каскадную онлайн-модель. Настройка производится через Python-SDK — кастомную библиотеку, которая позволяет в режиме диалогового окна производить конфигурацию модулей.

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

В качестве базы данных, в которую записываются данные от модулей и задания к каскаду по запуску следующих модулей, используется Redis. Для запуска запроса к каждому модулю используются Celery worker и Fast API. В качестве хранилища логов отработки используется S3.

С точки зрения алгоритма внедрения, процесс можно описать следующими шагами: 

  1. Дата-инженер подготавливает данные для модели в промышленных системах, например, в Feature Store.

  2. Дата-сайентист обучает модули каскада на подготовленных данных и разрабатывает код на применение этих модулей. 

  3. ML-инженер проводит код-ревью разработанных модулей и разворачивает модули в Системе исполнения моделей.

  4. Дата-сайентист создаёт конфигурационный JSON каскада. В нём указаны: модули, из которых состоит каскад, источники данных для модулей, логика их последовательного или параллельного применения. Отмечу, что конфигурационный JSON формируется автоматически с помощью кастомной библиотеки на Python. Дата-сайентисту требуется указать лишь его параметры.

  5. Дата-сайентист запускает пайплайн по сборке каскадной модели, после чего система автоматически формирует образ каскадной модели в Artifactory и создаёт репозиторий с кодом каскада в Git.

  6. ML-инженер проводит код-ревью каскадной модели и разворачивает каскад в Системе исполнения моделей.

  7. Тестировщики проводят код-ревью каскадной модели и модулей, из которых она состоит.

  8. Модель по итогам прохождения тестирования выводится в пром.

Чем решение лучше других

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

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

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

В качестве примера использования разработанного пайплайна хотелось бы привести бизнес-кейс по разработке каскадной онлайн-модели скоринга клиентов среднего бизнеса. Раньше это было коробочное решение, теперь оно разделено на микросервисы и состоит из отдельных независимых модулей. С помощью данного пайплайна мы смогли внедрить модель для скоринга корпоративных клиентов среднего бизнеса в промышленную эксплуатацию за 12 дней с момента завершения обучения. Обращаю внимание, что это срок с учётом всех необходимых видов тестирования (нагрузочное, функциональное и интеграционное). Не менее радостным является тот факт, что процесс включал в себя внедрение не одной конфигурации моделей, а 11 каскадных моделей для различных риск-стратегий.

Заключение

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

Также в процессе внедрения модели достаточно один раз внедрить модули, из которых состоит каскад, и дальше создавать каскады из работающих модулей. Большим плюсом, безусловно, является то, что для доработки одного модуля не требуется внедрять всю модель заново. Достаточно только внести изменения в нужный модуль, а каскад начнёт использовать доработанный модуль автоматически.

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

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

До новых встреч!


В канале Alfa Advanced Analytics пишем о реализованных проектах, делимся интересными статьями, рассказываем о команде Центра продвинутой аналитики, рассказываем о вакансиях — присоединяйтесь.

Теги:
Хабы:
Всего голосов 5: ↑5 и ↓0+6
Комментарии1

Полезные ссылки

Опыт работы с библиотекой h3: гексы, геопризнаки и Geo Feature Store

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров1.8K
Всего голосов 11: ↑11 и ↓0+11
Комментарии0

Как я занял первое место в AI Journey Contest 2023 (трек Personal AI)

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров1.9K
Всего голосов 13: ↑13 и ↓0+16
Комментарии1

Фреймворк ARTEM(L): Как мы автоматизируем обучение и обновление моделей в Альфа-Банке

Уровень сложностиСредний
Время на прочтение13 мин
Количество просмотров1.5K
Всего голосов 16: ↑15 и ↓1+17
Комментарии2

Информация

Сайт
digital.alfabank.ru
Дата регистрации
Дата основания
1990
Численность
свыше 10 000 человек
Местоположение
Россия