Привет! На связи команда рекомендаций AI VK.
Фактически в каждом продукте есть и рекомендации и поиск, и чтобы каждой команде не приходилось изобретать свой «велосипед», мы разработали единую Discovery-платформу. С ней команды могут «по кнопке» запускать рекомендации, тестировать модели, а также делиться лучшими решениями.
Какие результаты уже заметны:
сократился time-to-market для рекомендательных алгоритмов;
возросла скорость итераций в апгрейде рекомендательных алгоритмов;
снизился порог входа для инженеров, что позволило вырастить команду рекомендаций в 3 раза.
Цикл «идея-эксперимент-вывод» сократился в 5 раз при внедрении Discovery-платформы, а новую рекомендательную систему в продукте можно запустить в среднем за месяц. В итоге в плюсе не только разработчики, но и все остальные: пользователи получают интересный контент, авторы и рекламодатели — свою целевую аудиторию.
Discovery-платформа уже дает заметный рост продуктовых метрик. Так, за первый год работы платформы:
время просмотра VK Клипов выросло на 17,4%;
количество сохраненных треков в VK Музыке — на 40%;
релевантность рекомендуемых роликов в VK Видео — на 70%;
количество подписок на авторов из ленты VK — на 43%;
загрузки в RuStore из ленты рекомендаций — на 41%.
Discovery-платформа объединяет рекомендации, поиск и рекламу и состоит из шести компонентов: Stream Flow, Profile Stream, Cloud Training, Discovery Runtime, Feature Flow, Inference Platform. Каждый из них решает отдельную задачу и интегрируется с остальными, создавая единую инфраструктуру.
Stream Flow — это low-code фреймворк, который обрабатывает потоки данных в реальном времени. Он решает следующие задачи:
построение контентной базы для рекомендаций;
расчет счетчиков вовлеченности и глубины просмотра;
мгновенная реакция на действия: клики, лайки и просмотры.
Работа с микробатчами позволяет StreamFlow обрабатывать данные за считанные секунды, в отличие от классического батчевого подхода с задержкой в часы.
Архитектура Stream Flow состоит из двух ключевых компонентов: решардера и воркера.
Решардер делит входной поток на шардированные части и направляет данные в промежуточные партиции, обеспечивая отказоустойчивость и масштабирование.
Воркер обрабатывает эти данные, применяя бизнес-логику в двух режимах:
stateless — обработка без фиксации состояния;
stateful — хранение и обновление состояния при каждом событии.
Такая архитектура позволяет горизонтально масштабировать процесс и достигать высокой производительности, поддерживая обработку порядка миллиона событий в секунду.
Stream Flow работает поверх YTsaurus как для входных, так и для выходных данных. На вход поступают потоки событий, k-value данные и статические данные. Все промежуточные и финальные результаты также хранятся в YT и интегрируются с другими компонентами Discovery-платформы через DataTransfer.
Так команды получают готовые данные «из коробки», а инженерам не нужно думать об инфраструктуре, что также уменьшает time-to-market для алгоритмов.
Profile Stream агрегирует взаимодействия пользователей со всеми продуктами VK и формирует ML-профили, которые описывают персональные предпочтения каждого пользователя. Эти профили используются одновременно для рекомендаций, поиска и рекламы.
В ML-профиле содержатся эмбеддинги и агрегаты, например, счетчики просмотров, лайков, комментариев – в сумме около 500 килобайт данных на пользователя.
Технически Profile Stream реализован на Java. Обновление профилей происходит в реальном времени. Система обрабатывает порядка 100 миллиардов событий в сутки от 200 миллионов пользователей.
Для построения ML-профилей применяются ALS-модели, нейросетевые трансформеры и классические счетчики. Контроль корректности осуществляется через мониторинг статистических отклонений и проверку стабильности данных.
Profile Stream позволяет ML-инженерам сразу использовать готовые профили в моделях рекомендаций, рекламы и поиска. Это ускоряет эксперименты и уменьшает задержки в адаптации алгоритмов к новым данным.
Cloud Training предоставляет ML-инженерам и Data-специалистам доступ к GPU-ресурсам, необходимым для обучения моделей. Платформа унифицирует обучение классических моделей градиентного бустинга и нейросетевых моделей в распределенном режиме.
Мы развиваем Cloud Training как платформу, которая закрывает ключевые инфраструктурные потребности и должна полностью решать следующие задачи:
освобождать от рутины настройки окружения и железа, поддерживать распределенное обучение;
вести реестр экспериментов и результатов обучения, метрик, артефактов с удобной визуализацией;
разделять пайплайн обучения на GPU и CPU intensive-операции и выделять соответствующее железо для оптимальности использования ресурсов;
автоматизировать запуск обучения (auto ML).
Discovery Runtime — центральный компонент Discovery-платформы. Он отвечает за многостадийный отбор и ранжирование контента под каждого пользователя. Использует данные из Profile Stream и Stream Flow, а также контентные признаки из Feature Flow.
Архитектура Discovery Runtime разработана с учетом высоких требований надежности (99,99% доступности) и очень устойчива к различным проблемам: от ошибки конфигурации до взрывного роста нагрузки.
Discovery Runtime состоит из двух ключевых этапов: Retrieval и Ranking. На этапе Retrieval система отбирает кандидатов из миллионов объектов, применяя разные алгоритмы, такие как векторный поиск и большие индексы похожести контента. В процессе Ranking выбранные объекты сортируются с помощью CatBoost или нейросетевых моделей, формируя итоговую выдачу для пользователя. В итоге из миллионов единиц контента остаются десятки, которые показываются пользователю.
Discovery Runtime легко масштабируется горизонтально: при росте нагрузки добавляются инстансы. Модели отбора кандидатов (Retrieval) адаптируются в реальном времени, что позволяет мгновенно реагировать на изменения интересов пользователей.
Архитектура спроектирована для ранжирования большого количества контента в реальном времени. Система анализирует десятки тысяч объектов на один запрос, сохраняя для пользователя ощущение мгновенного отклика. Качество отбора оценивается офлайн-метриками (например, NDCG) и онлайн-показателями (вовлеченность, просмотры, лайки и т.д.).
Сейчас Discovery Runtime позволяет решать до 90% ML-задач без написания кода. Инженерам достаточно изменить конфигурацию, чтобы:
подключить новые алгоритмы retrieval-a, такие как ANN или списочные индексы;
добавить факторы в модель ранжирования «на лету»;
настроить фильтрацию уже просмотренного или нерелевантного контента;
И конечно, все эти изменения можно отправить в A/B одной кнопкой.
Feature Flow — компонент, который считает любые контентные признаки для систем рекомендаций, поиска и рекламы. Feature Flow работает поверх инфраструктуры потоковой обработки данных (Stream Flow) и использует Inference Platform для сервинга своих контентных ML-моделей.
Пример такого признака — контентные эмбеддинги. Их нужно регулярно пересчитывать для каждой новой контентной единицы, например, видео, поста или рекламного объявления, а затем оперативно доставлять в систему Discovery Runtime.
Feature Flow переводит этот процесс в режим self-service: ML-команды могут самостоятельно подключать новые модели через UI.
Для управления расчетами Feature Flow использует кодогенерацию Stream Flow пайплайнов и самописный terraform-like механизм контроля состояния ресурсов во внешних системах.
Процессы полностью асинхронны и работают в режиме near real-time. Расчет признаков запускается автоматически при появлении нового контента. Свежие контентные признаки доезжают в систему ранжирования по мере готовности (eventually).
Feature Flow позволяет масштабировать решения на новые продукты и ML-модели без пересборки пайплайнов.
Inference Platform — инфраструктурный компонент Discovery-платформы, отвечающий за применение ML-моделей на GPU и CPU.
Inference Platform выступает связующим звеном между ML-разработкой и другими компонентами Discovery-платформы. Инженеры загружают готовые модели, а сервисы получают к ним стандартизированный доступ без необходимости разбираться в их внутреннем устройстве.
Каждая модель разворачивается в нескольких инстансах и дата-центрах на базе единого облака VK One-Cloud. Можно параллельно запускать несколько версий одной модели — это позволяет проводить A/B-тесты и делать бесшовное поэтапное обновление моделей.
Платформа разрабатывалась с нуля для эффективной работы с GPU. Она поддерживает разделение GPU между несколькими моделями, утилизацию простаивающих GPU-ресурсов низкоприоритетными батч-задачами и авто-скейлинг под рост нагрузки.
Inference Platform упрощает процесс релиза новых ML-моделей, будь то классические или нейросетевые, включая LLM:
ML-команды самостоятельно деплоят модели в платформу;
сервисы/продукты обращаются к моделям через единый интерфейс;
новые модели можно подключать с минимальными доработками продуктового кода.
1. Сокращение time-to-market
Discovery-платформа радикально ускорила эксперименты с новыми признаками и ML-моделями, минимизируя ручную настройку и отладку новых пайплайнов.
На практике это означает, что новые гипотезы можно итерационно проверять за считанные дни – цикл «идея-эксперимент-вывод» сократился в 5 раз, а новую рекомендательную систему в продукте можно запустить в среднем за месяц.
2. Ускоренный онбординг
Discovery-платформа дает инженеру готовые блоки: поток данных, готовый ML-профиль, инфраструктуру деплоя и шаблоны пайплайнов. Новичку не нужно собирать стек с нуля: он получает стандартизированный интерфейс и набор готовых артефактов.
Команды, которые перешли на платформу, отмечают ускорение адаптации и сокращение времени выхода новичка на продуктивную работу.
3. Тиражирование лучших практик
Раньше одна хорошая идея могла иметь сразу несколько реализаций. Сейчас же наработки переиспользуются между разными командами.
Если команда однажды подружила нейроранк с мультимодальными эмбеддингами, остальные могут переиспользовать это с минимальными доработками. Интеграция сводится к конфигурации существующих библиотек вместо разработки с нуля.
Discovery-платформа изменила подход к рекомендациям, поиску и рекламе в VK, создав прочный инфраструктурный фундамент. Это позволило кратно ускорить работу, вырастить команду и освободить ресурсы для новых разработок. В следующих материалах поделимся кейсами и расскажем подробнее о компонентах платформы.
Материал подготовили: Андрей Зимовнов, Дмитрий Погорелов, Михаил Томилов, Андрей Иванов, Евгений Зуев, Антон Галишников, Никита Александров, Дмитрий Слободецкий.
Источник


