Как оптимизировать инференс 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 должен уметь отвечать приемлемо даже когда тяжелая модель недоступна.
Теория
Production RecSys оптимизируется каскадом: меньше считать, быстрее считать, безопасно деградировать.
Типичные ошибки
- Начинать с TensorRT, не убрав лишний online compute.
- Не измерять p95/p99 latency после dynamic batching.
- Не иметь fallback при ошибке модели или индекса.