Пайплайн каскадных онлайн-моделей: как не запутаться в модулях и обрести дзен при внедрении многомодульных моделей. celery worker.. celery worker. ml.. celery worker. ml. mlflow.. celery worker. ml. mlflow. mlops.. celery worker. ml. mlflow. mlops. pipelines.. celery worker. ml. mlflow. mlops. pipelines. redis.. celery worker. ml. mlflow. mlops. pipelines. redis. rest.. celery worker. ml. mlflow. mlops. pipelines. redis. rest. каскады.. celery worker. ml. mlflow. mlops. pipelines. redis. rest. каскады. модели.. celery worker. ml. mlflow. mlops. pipelines. redis. rest. каскады. модели. скоринг.

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

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

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

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

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

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

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

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

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

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

Каскадная модель (каскад) — совокупность 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. На рисунке ниже представлена схема каскада.

Пайплайн каскадных онлайн-моделей: как не запутаться в модулях и обрести дзен при внедрении многомодульных моделей - 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 пишем о реализованных проектах, делимся интересными статьями, рассказываем о команде Центра продвинутой аналитики, рассказываем о вакансиях — присоединяйтесь.

Автор: Gevond

Источник

Рейтинг@Mail.ru
Rambler's Top100