https://lab.karpov.courses/certificate/e08e65d8-f97f-41dc-a892-faff6a01a8e0/en/
В качестве ML-задачи мы будем использовать уже знакомую задачу по предсказанию частоты паролей. Поскольку в данном курсе мы изучаем не ML, а MLOps, вам не нужно фокусироваться на тюнинге модели или исследовании данных (они будут синтетические).
Ваша задача — написать http обертку для этой модели, которая будет автоматически обновляться MLOps пайплайном при поступлении новых данных. Новые данные будут генерироваться автоматически проверочным скриптом. При появлении новых данных ваш сервис получит уведомление, после чего должен запуститься ваш пайплайн, который обучит модель, положит ее в mlflow и обновит ваш сервис. Вы свободны в выборе инструментов и архитектуры для построения пайплайна и можете использовать любую комбинацию изученных решений. В последнем степе можно найти описание одного из возможных вариантов решения.
В качестве решения вам нужно предоставить два url, один — к эндпоинту с предсказаниями (predictions_url), другой — для того, чтобы уведомлять о появлении новых данных (trigger_url). Они могут быть в одном и том же сервисе или в разных, это остается на ваше усмотрение.
Проверочный скрипт будет генерировать данные и отправлять ссылку на них в trigger_url. После этого должен автоматически запуститься ваш пайплайн, состоящий из следующих шагов:
Скачать данные по url Проверить качество данных Обучить новую версию модели (используя только новые данные) Загрузить версию модели в MLflow, зарегистрировать ее под именем {ваш юзернейм}-mlops-project-model и повесить на новую версию alias prod Обновить модель в вашем сервисе на новую версию Далее проверочный скрипт убедится, что модель обновилась, сравнив предсказания с ожидаемыми.
Такой цикл будет запущен несколько раз в течение проверки с разными наборами данных, в том числе невалидными — в этом случае модель обучать не нужно.
Запросы в predictions_url будут иметь такой формат:
{"Password": ["pass1", "pass2", ...]}
В ответ ожидается такой формат:
{"Times": [0.1, 0.2, ...]}
В trigger_url будут прилетать запросы такого формата:
{"data_url": "https://....."}
В ответ ничего не ожидается. Эндпоинт должен работать асинхронно, то есть завершаться как только запустил ваш пайплайн.