К обычному разбору
Тренировка по собеседованиюТехническое собеседованиеOzon2025-01-25

Ozon: RecSys-собеседование про распределенное обучение, трансформеры и ранжирование

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

Шагов
6
Вопросов
6
Задач
0
1Вопрос9 мин

Что делать, если модель и данные не помещаются на одну GPU

Какие подходы есть для обучения большой нейросети на нескольких GPU и чем они отличаются?

Ответьте без подсказки

Сначала проговорите ответ вслух или тезисами.

Запишите черновик

Формулы, план решения, риски и примеры.

Сравните с разбором

Откройте разбор только после своей попытки.

Показать разбор

Короткий ответ

Data parallelism делит batch между GPU и синхронизирует градиенты. Model/tensor parallelism режет саму модель. Pipeline parallelism раскладывает слои по устройствам. FSDP/ZeRO шардуют параметры, градиенты и optimizer state, чтобы снизить память.

Подробный разбор

Если не хватает только throughput, обычно начинают с DDP: каждая GPU держит копию модели, считает градиенты на своей части batch, затем градиенты синхронизируются через all-reduce. Это просто и хорошо масштабируется, пока модель помещается на каждую GPU.

Если модель не помещается, нужны model parallel подходы. Tensor parallelism режет отдельные матричные операции, pipeline parallelism кладет разные блоки модели на разные GPU и прогоняет micro-batches конвейером. FSDP и ZeRO уменьшают память, шардуя параметры, градиенты и optimizer state между устройствами.

Дополнительно почти всегда включают mixed precision, gradient checkpointing, accumulation и аккуратную настройку batch size. Выбор зависит от узкого места: память параметров, память активаций, коммуникации или скорость загрузки данных.

Типичные ошибки

  • Путать data parallelism и model parallelism.
  • Забывать про optimizer state, который может занимать больше памяти, чем веса.
  • Считать, что больше GPU автоматически ускорят обучение без коммуникационных потерь.
2Вопрос8 мин

Как работает self-attention в трансформере

Объясните self-attention и основные блоки трансформера так, чтобы было понятно без формального вывода.

Ответьте без подсказки

Сначала проговорите ответ вслух или тезисами.

Запишите черновик

Формулы, план решения, риски и примеры.

Сравните с разбором

Откройте разбор только после своей попытки.

Показать разбор

Короткий ответ

Из каждого токена строятся query, key и value. Query сравнивается с key других токенов, веса проходят через softmax, а итоговое представление получается как взвешенная сумма value. Multi-head attention делает несколько таких сравнений параллельно.

Подробный разбор

Self-attention отвечает на вопрос: на какие элементы последовательности должен смотреть текущий элемент. Для каждого токена линейными слоями строятся Q, K и V. Скалярные произведения Q с K дают scores близости, softmax превращает их в веса, затем веса применяются к V.

Multi-head attention делает это несколько раз в разных подпространствах, поэтому разные головы могут ловить разные связи. После attention обычно идут residual connection, normalization и feed-forward блок. Позиционная информация нужна отдельно, потому что сам attention без нее не знает порядок токенов.

В RecSys или табличных задачах идея та же: элементы могут быть действиями пользователя, товарами или признаками, а attention учит, какие связи между ними важны для итогового представления.

Типичные ошибки

  • Говорить только “токены смотрят друг на друга”, не объясняя Q/K/V.
  • Забывать про positional encoding.
  • Не отличать attention block от всего transformer layer.
3Вопрос8 мин

Метрики ранжирования: NDCG, MRR, Precision@K и online-метрики

Какие метрики использовать для оценки ранжирования в рекомендациях или поиске?

Ответьте без подсказки

Сначала проговорите ответ вслух или тезисами.

Запишите черновик

Формулы, план решения, риски и примеры.

Сравните с разбором

Откройте разбор только после своей попытки.

Показать разбор

Короткий ответ

Offline: Precision@K/Recall@K для попадания релевантных объектов, MRR для ранга первого релевантного, NDCG@K для качества порядка с учетом позиции. Online: CTR, conversion, GMV, retention и guardrails по latency, diversity и пустым выдачам.

Подробный разбор

Precision@K отвечает, какая доля top-K релевантна. Recall@K отвечает, какую долю релевантных объектов удалось найти в top-K. MRR полезен, когда важно как можно раньше показать первый правильный результат. NDCG@K лучше подходит для ранжирования с graded relevance: релевантность дисконтируется по позиции, поэтому ошибка наверху выдачи дороже ошибки внизу.

Offline-метрики нужно считать на честном candidate set и проверять по срезам: новые пользователи, популярные/редкие товары, категории, регионы. Иначе модель может улучшить средний NDCG за счет популярных объектов и ухудшить coverage.

Online-метрики зависят от продукта: CTR, add-to-cart, purchase conversion, GMV, watch/listen time, retention. Guardrails: latency, empty results, complaints, diversity, novelty, share of repeated items and fallback rate.

Типичные ошибки

  • Оптимизировать только CTR и убить diversity или long tail.
  • Считать NDCG на слишком простом candidate set.
  • Не разделять метрики retrieval и метрики реранжирования.
4Вопрос10 мин

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

Какие нейросетевые подходы можно использовать в RecSys и где они стоят в пайплайне?

Ответьте без подсказки

Сначала проговорите ответ вслух или тезисами.

Запишите черновик

Формулы, план решения, риски и примеры.

Сравните с разбором

Откройте разбор только после своей попытки.

Показать разбор

Короткий ответ

Для retrieval часто используют two-tower и sequential models вроде SASRec/next-item prediction. Для реранжирования - MLP/DeepFM/DCN/transformer-ranker поверх user/item/context features. Обычно пайплайн делят на генерацию кандидатов и реранжирование.

Подробный разбор

В рекомендациях нейросети чаще всего появляются в двух местах. Первое - генерация кандидатов: two-tower модель отдельно кодирует пользователя и item, затем быстрый ANN-поиск находит близкие item embeddings. Для истории действий подходят sequential models: GRU4Rec, SASRec, BERT4Rec и похожие next-item подходы.

Второе - реранжирование: когда кандидатов уже сотни, можно использовать более тяжелую модель с user features, item features, cross features, контекстом сессии, ценой, категорией и бизнес-ограничениями. Это может быть MLP, DeepFM/DCN, transformer over sequence/context или ансамбль с бустингом.

Главный trade-off: retrieval должен быть быстрым и иметь высокий recall, реранкер может быть точнее, но работает на ограниченном наборе кандидатов. Для production еще нужны freshness embeddings, fallback, мониторинг coverage и online A/B.

Типичные ошибки

  • Пытаться ранжировать весь каталог одной тяжелой моделью online.
  • Не отделять задачу next-item prediction от финального бизнес-ранжирования.
  • Забывать про ANN/index refresh для retrieval-моделей.
5Кейс12 мин

Как подавать разнотипные признаки в трансформер для RecSys

Есть числовые, категориальные и поведенческие признаки пользователя и товара. Как превратить их во вход трансформера?

Ответьте без подсказки

Сначала проговорите ответ вслух или тезисами.

Запишите черновик

Формулы, план решения, риски и примеры.

Сравните с разбором

Откройте разбор только после своей попытки.

Показать разбор

Короткий ответ

Категории кодируются embedding table, числовые признаки нормализуются и проецируются через MLP, тип признака тоже можно дать отдельным embedding. Для пользователя действия идут последовательностью, для товара атрибуты можно подать как set/sequence tokens и агрегировать pooling/CLS.

Подробный разбор

Разнотипные признаки нужно привести к общей размерности. Категориальный признак получает embedding по id значения и, часто, embedding типа признака. Числовой признак нормализуется и проходит через маленький MLP или linear projection; вместе с ним можно подавать embedding имени признака. Так модель понимает не только значение, но и что это за поле.

Для товара набор атрибутов можно рассматривать как множество токенов: категория, бренд, цена, текстовые/image embeddings, статистики. Transformer или attention-блок агрегирует их в item embedding через CLS token, pooling или attention pooling. Для пользователя естественнее последовательность действий: item embedding, тип события, timestamp/позиция, давность, контекст.

После получения user и item embeddings есть два частых пути: dot product в общем пространстве для retrieval или MLP/cross network для реранжирования. Важно заранее решить, какие признаки доступны online, а какие можно считать только offline.

Типичные ошибки

  • Смешивать сырые числовые и категориальные признаки без нормализации и type embeddings.
  • Забывать, что item id огромного каталога плохо масштабируется как обычный словарь.
  • Не различать item representation для retrieval и feature-rich reranking.
6Вопрос10 мин

Как оптимизировать инференс RecSys-модели

Большая нейросетевая RecSys-модель дает хороший offline quality, но ее нужно держать в рантайме. Что оптимизировать?

Ответьте без подсказки

Сначала проговорите ответ вслух или тезисами.

Запишите черновик

Формулы, план решения, риски и примеры.

Сравните с разбором

Откройте разбор только после своей попытки.

Показать разбор

Короткий ответ

Начать с архитектуры: precompute item embeddings, cache user state/top-K, ограничить число кандидатов. Затем оптимизировать модель: FP16/INT8, ONNX/TensorRT/Triton, dynamic batching, autoscaling и fallback при timeout.

Подробный разбор

Первый слой оптимизации - не технический формат модели, а сокращение работы. Item embeddings и статические признаки надо считать заранее. User embeddings можно обновлять по событию, по расписанию или при входе пользователя, но желательно не строить всю историю заново на каждый запрос. Реранкер должен работать по top-N кандидатам, а не по всему каталогу.

Второй слой - inference stack. Конвертация в ONNX/TensorRT, FP16 или INT8 quantization, kernel fusion, Triton/dynamic batching и правильные batch size помогают увеличить throughput. Но batching нельзя включать без учета latency SLA: иногда он улучшает throughput и ухудшает p95.

Третий слой - надежность: cache hit rate, timeout, fallback на старый top-K или популярное, мониторинг пустых выдач, деградации качества и resource saturation. RecSys должен уметь отвечать приемлемо даже когда тяжелая модель недоступна.

Типичные ошибки

  • Начинать с TensorRT, не убрав лишний online compute.
  • Не измерять p95/p99 latency после dynamic batching.
  • Не иметь fallback при ошибке модели или индекса.