Rocket Money x Hugging Face Масштабирование изменчивых моделей машинного обучения в производстве

Rocket Money x Hugging Face Scaling variable machine learning models in production

“Мы обнаружили, что они не только поставщики услуг, но и партнеры, которые вкладывались в наши цели и результаты” – Николяс Кузак, старший инженер машинного обучения в Rocket Money.

Масштабирование и поддержка моделей машинного обучения в производстве без команды MLOps

Мы создали Rocket Money (приложение для личных финансов, ранее известное как Truebill), чтобы помочь пользователям улучшить свое финансовое благополучие. Пользователи связывают свои банковские счета с приложением, которое затем классифицирует и категоризирует их транзакции, определяя повторяющиеся шаблоны, чтобы предоставить объединенный и всесторонний обзор их личной финансовой жизни. Критическим этапом обработки транзакций является обнаружение известных продавцов и услуг, некоторые из которых Rocket Money может отменить и переговорить о стоимости для участников. Это обнаружение начинается с преобразования коротких, часто сокращенных и криптографически форматированных строк транзакций в классы, которые мы можем использовать для обогащения нашего продуктового опыта.

Путь к новой системе

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

Мы решили начать с чистого листа, собрав новую команду и новое поручение. Нашей первоочередной задачей было накопление тренировочных данных и создание системы внутри компании с нуля. Мы использовали Retool для создания очередей разметки, валидационных наборов данных стандарта Gold и инструментов для мониторинга обнаружения дрейфа. Мы исследовали несколько различных топологий моделей, но в конечном итоге выбрали семейство моделей BERT для решения нашей задачи классификации текста. Большая часть начального тестирования и оценки модели проводилась в автономном режиме в нашем хранилище GCP. Здесь мы разработали и построили телеметрию и систему, которую мы использовали для измерения производительности модели с более чем 4000 классами.

Решение проблем и ограничений домена путем сотрудничества с Hugging Face

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

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

В начале мы протестировали самостоятельное решение для размещения моделей, которое мы использовали для прототипирования, сравнивая его с AWS Sagemaker и новым решением по размещению моделей Inference API от Hugging Face. Учитывая, что мы используем GCP для хранения данных и Google Vertex Pipelines для обучения моделей, экспорт моделей в AWS Sagemaker был неудобным и подверженным ошибкам. К счастью, настройка Hugging Face была быстрой и простой, и она смогла обрабатывать небольшую долю трафика в течение недели. Hugging Face просто работал сразу после установки, и это снизило трение, заставив нас продолжить выбранный путь.

После обширного трехмесячного периода оценки мы выбрали Hugging Face для размещения наших моделей. В этот период мы постепенно увеличивали объем транзакций для их размещенных моделей и проводили множество симулированных нагрузочных тестов на основе наших объемов в худшем случае. Этот процесс позволил нам настроить нашу систему и контролировать производительность, в конечном итоге дав нам уверенность в возможности Inference API обрабатывать наши нагрузки по обогащению транзакций.

Помимо технических возможностей, мы также установили прочные отношения с командой Hugging Face. Мы обнаружили, что они не только поставщики услуг, но и партнеры, которые заинтересованы в наших целях и результатах. С самого начала сотрудничества мы создали общий канал в Slack, который оказался бесценным. Особенно нас впечатлил их оперативный ответ на проблемы и превентивный подход к решению проблем. Их инженеры и менеджеры по работе с клиентами постоянно демонстрировали свое стремление к успеху и преданность правильному подходу. Это дало нам дополнительный уровень уверенности при принятии окончательного решения.

Интеграция, оценка и окончательный выбор

“В целом, опыт работы в тесном сотрудничестве с Hugging Face при развертывании модели был обогащающим для нашей команды и внушил нам уверенность в стремлении к большей масштабируемости” – Николас Кузак, старший инженер по машинному обучению в Rocket Money.

После подписания контракта мы начали миграцию с нашей системы на основе регулярных выражений на прямую передачу все большего количества трафика критического пути в модель-трансформер. Внутренне нам пришлось создать новую телеметрию для мониторинга модели и производственных данных. Учитывая, что эта система находится на таком раннем этапе опыта использования продукта, любые неточности в результатах модели могут значительно влиять на бизнес-метрики. Мы провели обширный эксперимент, в котором новые пользователи были разделены поровну между старой системой и новой моделью. Мы оценили производительность модели в сочетании с более широкими бизнес-метриками, такими как удержание платных пользователей и вовлеченность. Модель машинного обучения явно превзошла ожидания по удержанию, что позволило нам с уверенностью принять решение масштабировать систему – сначала для новых пользователей, а затем для существующих – наращивая до 100% в течение двух месяцев.

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

Первый год сотрудничества между Rocket Money и Hugging Face не прошел без проблем. Однако обе команды проявили замечательную устойчивость и общее стремление разрешать возникающие проблемы. Одним из таких случаев было расширение числа классов в нашей второй производственной модели, что, к сожалению, привело к сбою. Несмотря на это, команды не сдавались, и нам удалось избежать повторения этой проблемы. Еще одна неприятность произошла при переходе на новую модель, но мы все равно получали результаты от предыдущей из-за проблем с кэшированием со стороны Hugging Face. Эта проблема была быстро устранена и не повторялась. В целом, опыт совместной работы с Hugging Face при развертывании модели был обогащающим для нашей команды и внушил нам уверенность в стремлении к большей масштабируемости.

Говоря о масштабировании, мы стали свидетелями значительного увеличения трафика к нашей модели, и стало очевидно, что затраты на вывод будут превышать наш запланированный бюджет. Мы использовали кэширующий слой перед вызовами вывода, который значительно сокращает кардинальность транзакций и пытается использовать предыдущий вывод. Технически наша проблема могла достичь кэш-попадания на 93%, но в реальной среде мы достигали только 85%. При полном обслуживании модели мы достигли нескольких важных показателей на стороне Rocket Money – наша модель смогла масштабироваться до уровня более миллиарда транзакций в месяц и справляться с всплеском трафика при занятии первого места в финансовом приложении и 7-го места в общем рейтинге в магазине приложений, при этом поддерживая низкую задержку.

Сотрудничество и планы на будущее

“Время работы и уверенность, которые мы имеем в HuggingFace Inference API, позволили нам сосредоточить свою энергию на создании ценности моделей и меньше заботиться о технических аспектах и повседневной работе” – Николас Кузак, старший инженер по машинному обучению в Rocket Money.

После запуска внутренняя команда Rocket Money сейчас сосредоточена на настройке классификации и производительности модели, а также на автоматизации мониторинга и систем маркировки обучения. Мы добавляем новые метки ежедневно и сталкиваемся с интересными задачами управления жизненным циклом модели, включая такие уникальные вещи, как переименование компании и появление новых компаний и продуктов после приобретения Rocket Companies Truebill в конце 2021 года.

Мы постоянно анализируем, имеем ли мы правильную топологию модели для нашей проблемы. Хотя недавно в новостях были LLM-модели, мы столкнулись с трудностями в поиске реализации, которая может превзойти наши специализированные трансформерные классификаторы как по скорости, так и по стоимости. Мы видим потенциал в начальных результатах использования их в долгом хвосте услуг (т.е. маленьких магазинах) – будьте внимательны к этому в будущих версиях Rocket Money! Время работы и уверенность, которые мы имеем в HuggingFace Inference API, позволили нам сосредоточить свою энергию на создаваемой моделями ценности и меньше заботиться о технических моментах и повседневной работе. С помощью Hugging Face мы справились с большим масштабом и сложностью нашей модели и типами создаваемой ею ценности. Их обслуживание клиентов и поддержка превзошли наши ожидания, и они действительно являются отличным партнером в нашем пути.

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