Как организовывать пайплайны и деплой моделей в продакшн
архитектурадеплоймоделипайплайныпродакшн
Что проверяют
Доводили ли вы модель дальше ноутбука и понимаете ли, что в проде чаще ломается не код модели, а данные вокруг неё. Следом обычно спрашивают, как вы откатите неудачную версию и как узнаете о деградации, если разметка приходит через месяц.
Как отвечать
Разложите ответ на контуры и называйте инструменты, с которыми работали сами:
- данные и признаки: пайплайн в Airflow, Dagster или Prefect, проверка входа через Great Expectations или pandera. Код признаков один для обучения и инференса, иначе они разойдутся. Если признаки общие для нескольких моделей, поможет feature store вроде Feast;
- обучение: воспроизводимый запуск из скрипта, а не из ноутбука, с зафиксированными версией данных (DVC или снимок по дате), кодом и параметрами. Эксперименты и артефакты в MLflow;
- реестр моделей: каждая версия с метриками и ссылкой на данные. В актуальных версиях MLflow вместо стадий Staging и Production используют алиасы вроде
champion, и откат сводится к переносу алиаса; - способ отдачи: пакетный скоринг по расписанию с записью в таблицу, онлайн-сервис на FastAPI, BentoML или Triton за REST или gRPC, либо потоковая обработка. Пакетный вариант проще и дешевле, если ответ не нужен за миллисекунды;
- CI/CD: тесты кода, проверка данных, сравнение новой модели с текущей на одном отложенном наборе, выкатка только если новая не хуже. Образ Docker с зафиксированной версией модели;
- раскатка: теневой режим, канареечный релиз, A/B-тест на части трафика;
- мониторинг: задержка и ошибки в Prometheus и Grafana плюс дрейф признаков и распределения прогнозов, например через Evidently. Реальное качество считается, когда приходит разметка.
Где спотыкаются
Считают признаки в проде другим кодом, чем при обучении. На тесте модель хороша, а в проде тихо ошибается.
Мониторят только то, что сервис отвечает 200. Сервис жив, а прогнозы давно испортились из-за дрейфа.
Не продумывают откат. Когда новая версия проседает, выясняется, что старый артефакт никто не сохранил, а воспроизвести обучение на тех же данных уже нельзя.