MLOps: выкат и мониторинг
Выкатка и мониторинг - где решается, будет ли инцидент. «Как безопасно выкатить модель» - вопрос с готовым каркасом ответа: shadow → canary → раскат, горячий rollback, метрики выбраны заранее.
// Выкатка не заканчивается деплоем - она заканчивается, когда подтянулись лейблы и метрика подтверждена.
Стратегии выкатки и откат
Blue-green - мгновенное переключение и откат; canary - доля трафика с наблюдением; shadow - полный трафик без влияния на ответы (сравнение офлайн). Выбор - по цене ошибки.
Rollback - первоклассная операция: прошлая версия остаётся горячей, переключение - минуты. «Пофиксим вперёд» - не план отката.
// Классика невозможного отката: старый образ удалили, а фичи новой версии несовместимы со старой. Обратную совместимость фичей проверяют до раската.
- blue-green / canary / shadow
- переключение / доля / без влияния - по цене ошибки
Мониторинг: одна страница на модель
Метрики сравнения canary против контроля выбираются до выкатки: системные (латентность, ошибки), скоровые (распределение предсказаний), бизнесовые. После - поздно: под руками окажутся те метрики, что случайно росли.
Дашборд модели: RPS (requests per second), p95/p99, доля ошибок и таймаутов, распределение скоров, свежесть фичей, дрейф топ-фичей. Одна страница - один взгляд.
// Алерты - по симптомам, на которые есть действие, и с runbook'ом: сдвиг скоров, рост fallback, протухшие фичи. Алерт без runbook - шум, который отключат.
- runbook
- что делать по алерту; алерт без действия - шум
Разбор инцидентов и пост-деплой петля
Инцидент разбирается, если логировались вход (фичи), выход (скор), версия модели и трейс запроса. Тогда «модель стала хуже» превращается в конкретный diff между версиями на конкретных запросах.
Пост-деплой петля: подтянулись лейблы → фактическая метрика новой версии → решение оставить/откатить/ретрейнить.
// Эффекты приходят с лагом: смотреть на canary через пять минут и объявлять успех - самообман; сколько ждать - решают заранее, из скорости накопления событий.
Как отвечать: «Как безопасно выкатить новую версию модели?»
Лестницей. Сначала shadow: полный трафик на новую версию без влияния на ответы - сравниваю распределения скоров и латентность с текущей. Затем canary на нескольких процентах с заранее выбранными метриками сравнения: системные, скоровые, бизнесовые, и заранее оговорённой длительностью, потому что эффекты приходят с лагом. Прошлая версия остаётся горячей - откат за минуты, и я заранее проверил совместимость фичей для отката. Полный раскат - после стабильного canary. И выкатка не закончена деплоем: когда подтянутся лейблы, сверяю фактическую метрику и только тогда закрываю релиз.
Полная лестница с горячим откатом, метриками до выкатки и закрытием петли лейблами - операционная зрелость, которую и спрашивают.
На чём валят
- −Выкатить в пятницу вечером без canary - классика ночных инцидентов.
- −Мониторить только инфраструктуру - сервис зелёный, модель месяц предсказывает константу.
- −Откат невозможен: старый образ удалён, фичи несовместимы.
- −Судить canary через пять минут - эффекты приходят с лагом.
Проверьте себя
Пять вопросов из банка по этой подтеме. Всего их 14, остальные разбираются в тренажёре.
- Зачем мониторить распределение входных фич в проде, если можно просто следить за accuracy?A)Метки приходят с задержкой или не приходят вовсе; дрифт фич — ранний сигнал до падения качестваB)Распределение входных признаков не способно меняться после выката модели в продакшен вообщеC)Accuracy в проде считается мгновенно по каждому запросу, поэтому дополнительный мониторинг фич не нужен совсемD)Мониторинг фич заменяет собой необходимость считать метрики качества самой модели
показать ответ и разбор
+A)Метки приходят с задержкой или не приходят вовсе; дрифт фич — ранний сигнал до падения качества// разбор: Чтобы посчитать accuracy, нужны истинные метки, а они приходят с лагом (кредит «созреет» месяцами) или не приходят совсем — тогда падение качества заметишь слишком поздно. Распределения входных фич и предсказаний доступны сразу: их дрифт (PSI, KS) сигналит о проблеме заранее, ещё до того как метрика формально просядет. Это дополнение к метрике, а не замена.
- Истинные метки приходят с лагом в две недели. На что смотреть, чтобы поймать деградацию модели раньше?A)Ни на что: остаётся ждать полные две недели до появления настоящих меток и считать метрикуB)На среднюю загрузку CPU и объём потребляемой сервисом оперативной памяти на серверахC)На суммарное число запросов к сервису в секунду без анализа их содержимого и предсказанийD)На дрифт входных фич и распределение предсказаний (PSI) плюс бизнес-прокси — они доступны сразу
показать ответ и разбор
+D)На дрифт входных фич и распределение предсказаний (PSI) плюс бизнес-прокси — они доступны сразу// разбор: Когда метки запаздывают, качество напрямую не посчитать, поэтому опираются на доступные немедленно прокси: дрифт распределений входных фич и самих предсказаний (доля класса, средний скор), ранние бизнес-сигналы (конверсия, жалобы). Резкий сдвиг PSI по ключевым фичам или скачок доли предсказанного класса — повод бить тревогу, не дожидаясь меток. CPU и RPS про здоровье сервиса, а не модели.
- PSI по всем входным фичам в норме, но модель в проде явно поехала. Что могло произойти?A)Concept drift: сместилась зависимость y|x при тех же распределениях x — мониторинг входов слеп к этомуB)Ничего не могло произойти: если PSI по фичам в норме, модель работает корректноC)Возможная причина — в продакшене закончилось свободное место на диске под логи предсказанийD)Обязательно выросло среднее время ответа сервиса, и якобы именно поэтому упало качество предсказаний модели
показать ответ и разбор
+A)Concept drift: сместилась зависимость y|x при тех же распределениях x — мониторинг входов слеп к этому// разбор: PSI по входам ловит только смену распределения x (covariate shift). Но качество зависит и от P(y|x): связь фичи→таргет могла измениться при тех же распределениях фич (concept drift) — например, поменялось поведение пользователей. Мониторинг входов это не видит. Ещё варианты: битый маппинг категорий в фича-пайплайне, утечка, сместившийся порог. Нужен мониторинг предсказаний и, как метки подъедут, самой метрики.
- Что в первую очередь мониторят на ВХОДЕ модели в проде, помимо самих предсказаний?A)Загрузку CPU и памяти сервера — качество входных данных на работу самой модели не влияетB)Число запросов в секунду; содержимое и корректность самих входных данных проверять не нужноC)Версию библиотеки, которой была сериализована модель, — этого достаточно для здоровья сервисаD)Качество входных данных: соответствие схемы, доля пропусков и аномалий, диапазоны и распределения фичей
показать ответ и разбор
+D)Качество входных данных: соответствие схемы, доля пропусков и аномалий, диапазоны и распределения фичей// разбор: Модель молча выдаёт мусор, если на вход пришли битые данные: сменилась схема, подскочила доля NULL, значение вышло за исторический диапазон, распределение фичи уплыло. Поэтому мониторят качество входа — схему и типы, долю пропусков/аномалий, диапазоны и распределения (PSI/KS) — и алертят до того, как это ударит по метрике. Нагрузка сервера и RPS важны для инфраструктуры, но не заменяют контроль данных.
- Как различают data drift, prediction drift и concept drift, и зачем это на практике?A)Это три разных названия одного явления — деградации модели; разделять их на практике совершенно незачемB)Уплыл вход, уплыло распределение предсказаний, изменилась связь X→Y — каждый ловится и лечится по-разномуC)Все три означают рост задержки инференса и лечатся добавлением новых серверов в кластерD)Различаются лишь тем, на каком именно сервере они замечены, но на выбор действий по починке это никак не влияет
показать ответ и разбор
+B)Уплыл вход, уплыло распределение предсказаний, изменилась связь X→Y — каждый ловится и лечится по-разному// разбор: Data drift — уплыло распределение ВХОДНЫХ фичей; prediction drift — сместилось распределение ВЫХОДОВ модели (ранний косвенный сигнал); concept drift — изменилась сама зависимость таргета от фичей P(Y|X), при этом вход мог не меняться. Различать важно: data drift виден по входу и иногда переживаем, concept drift заметен только по меткам и обычно требует переобучения. Это не про латентность и не про «где замечено».
дальше
Теорию прочитали. Навык ставится повторением
В Сеньорчике эта подтема идёт в ежедневных сессиях: движок возвращает её, пока ответы не станут уверенными, и ведёт прогресс отдельно по каждой подтеме. Теория внутри тоже бесплатна, лимит только на количество вопросов в день.