Ozon перешёл от приближённого к точному поиску соседей на GPU в рекомендациях
Команда рекомендательной системы Ozon объявила о переходе от приближённого поиска ближайших соседей (ANN) к точному KNN на GPU. Новый подход позволил повысить качество выдачи за счёт полного перебора векторных представлений и упростить пайплайн обработки данных. Решение уже прошло A/B-тесты в промышленной среде на десятках миллионов пользователей.
Команда рекомендательной системы Ozon сообщила о переходе от приближённого поиска ближайших соседей (ANN) к точному KNN на графических процессорах. Причиной стали ограничения масштабирования и качества выдачи при использовании классических ANN-индексов, таких как HNSW. Новый пайплайн основан на полном переборе векторных представлений через матричное умножение на GPU, что даёт стопроцентный recall и гибкость в настройке бизнес-логики. Разработка уже внедрена в ключевой сценарий user2item, где для каждого пользователя из десятков миллионов подбираются товары из каталога, насчитывающего сотни миллионов позиций.
Масштаб задачи Ozon впечатляет: ежедневно система обрабатывает десятки миллионов пользователей и сотни миллионов товаров в каталоге. Ранее пайплайн требовал до 9–10 часов на постпроцессинг после ANN-поиска, а на «хвостах» распределения recall проседал, что снижало качество для редких товаров и нестандартных пользователей. A/B-тесты нового GPU-решения показали улучшение ключевых метрик без увеличения затрат на оборудование, причём особенно заметным стал рост конверсии в сегменте длинного хвоста. Команда отмечает, что каждый процент recall и каждый час работы пайплайна имеют прямую экономическую ценность для бизнеса.
Технически новый подход сводит задачу поиска ближайших соседей к одному большому матричному умножению, которое выполняется на GPU с высокой пропускной способностью. Это позволяет не только гарантированно найти всех истинно ближайших соседей, но и на лету применять фильтры по доступности товаров, штрафы за дизлайки и уже купленное, а также учитывать правила разнообразия. Пайплайн стал проще и быстрее за счёт того, что вся постобработка интегрирована в этап скоринга на GPU, что устранило необходимость в трудоёмких Spark-джобах для объединения пар и фич. В результате отбор кандидатов теперь выполняется точнее и за меньшее время, а сама архитектура стала более гибкой для экспериментов с метриками близости и эмбеддингами.
Исторически Ozon использовал ANN-индекс HNSW поверх Spark для первого этапа отбора кандидатов, а затем применял CatBoost для ранжирования. С ростом каталога и усложнением продуктовых требований накопились проблемы: приближённость выдачи, сложность встраивания бизнес-логики до ранжирования и дороговизна пересборки индекса при изменении векторного пространства. Это сковывало эксперименты и не позволяло быстро проверять гипотезы по изменению метрик близости. В итоге команда задалась вопросом, не эффективнее ли выполнить полный перебор на современном GPU, ведь матричное умножение — именно та операция, для которой графические процессоры оптимизированы, и это сделало бы пайплайн более простым и точным.
Переход Ozon на точный KNN на GPU — значимый шаг для российского e-commerce, демонстрирующий, что полный перебор может быть эффективнее приближённых методов при наличии специализированного железа. Это также показывает, что российские компании могут разрабатывать собственные высокопроизводительные решения, не полагаясь исключительно на западные ANN-библиотеки, что особенно актуально в условиях импортозамещения критической инфраструктуры. Другие игроки рынка, работающие с миллиардами векторов, могут взять этот опыт на вооружение для повышения качества персонализации и снижения зависимости от внешних технологий. При этом важно понимать, что подход Ozon не универсален: для некоторых задач ANN остаётся более экономичным, особенно когда допустима небольшая потеря точности ради снижения вычислительных затрат.
Ozon отмечает, что альтернативы вроде pgvector не подходят для их задачи, поскольку генерация кандидатов — лишь малая часть ценности, а основная сложность лежит в постпроцессинге. Именно ради интеграции бизнес-логики и гибкости компания разработала собственное GPU-решение, которое позволяет комбинировать эмбеддинги и применять сложные правила без потери производительности. В то время как типовые ANN-индексы требуют внешней обработки и перестройки, точный KNN на GPU даёт возможность управлять всем процессом в рамках одного пайплайна, что существенно сокращает время доставки новых алгоритмов до пользователей. Это также упрощает A/B-тестирование различных метрик близости и архитектур эмбеддингов.
В ближайших планах команды — расширение GPU-пайплайна на сценарий item2item и дальнейшая оптимизация под новые типы эмбеддингов. Открытым остаётся вопрос о внедрении динамического обновления индекса в реальном времени, но уже сейчас решение даёт значительный прирост в качестве рекомендаций. Команда намерена делиться деталями реализации с сообществом, что может стимулировать развитие аналогичных подходов в отрасли, а также поиск компромиссов между точностью и ресурсами в крупных распределённых системах. Дополнительные вызовы связаны с ростом размерности эмбеддингов и необходимостью балансировать нагрузку на GPU при пиковых запросах, однако полученные результаты вселяют уверенность в дальнейшей эволюции рекомендательных систем на основе полного перебора.