Как был организован релизный цикл
Что проверяют
Как вы жили внутри процесса поставки: с какой частотой выходили изменения, кто за что отвечал и что делали, если релиз ломал продакшн. Для ML важно, различаете ли вы релиз кода и релиз модели. Следом обычно спрашивают, как откатывали неудачную модель и кто принимал решение о выкатке.
Как отвечать
Опирайтесь на свой проект и свои цифры, а каркас такой:
- ритм и ветки: как часто выкатывались (по готовности, раз в спринт, по расписанию), trunk-based или релизные ветки, как ставили теги версий;
- код: CI на каждый merge request с линтером, юнит-тестами и прогоном пайплайна на маленьком срезе данных, сборка образа Docker, выкатка через GitLab CI, GitHub Actions или Argo CD;
- модель: отдельный цикл. Версии данных и экспериментов в DVC или MLflow, модель регистрируется в реестре с метриками, перед выкаткой её сравнивают с текущей на зафиксированной отложенной выборке. Дальше shadow-режим или A/B-тест, и только потом весь трафик;
- после релиза: мониторинг качества предсказаний и дрейфа входных данных, алерты, откат на предыдущую версию модели из реестра без пересборки сервиса;
- ваша роль: что именно делали вы, от написания проверок до дежурства во время выкатки.
Один конкретный эпизод работает лучше описания схемы: модель прошла офлайн-метрики, но в A/B просела конверсия, и её откатили. Такой рассказ показывает, что процесс был живой.
Если процесс был хаотичным, не приукрашивайте. Скажите, как было («модель выкладывали вручную из ноутбука раз в квартал»), какие проблемы это давало и что вы бы изменили. Если участвовали частично, опишите свой кусок и честно обозначьте границы.
Где спотыкаются
Приводят круглые цифры вроде «сократили время выкатки на 40%», а на вопрос, как это измеряли, ответа нет. Лучше без процентов, чем с придуманными.
Описывают только CI для кода и молчат про модели, хотя вопрос задан в ML-команде. Интервьюер ждёт услышать про версионирование данных, сравнение с текущей моделью и откат.
Не могут объяснить, как откатывались. Процесс без отката считается неполным, даже если за всё время откат ни разу не понадобился.