Как MLOps помогает на всех этапах проекта машинного обучения
Распространено заблуждение, что MLOps — это исключительно инструменты, которые мы используем для развертывания моделей и подготовки инфраструктуры для этого. Отчасти так и есть, но это не вся история — есть гораздо больше. В этом посте я разобью проект машинного обучения на несколько этапов и объясню, как MLOps помогает на каждом из них.
MLOps — это новая тема, и нет единого мнения о том, что это такое, а что нет. В этом посте я поделюсь своим личным мнением об этом. Вы можете не соглашаться с этим, но я надеюсь, что это все еще будет полезно.
Итак, начнем!
млн операций в секунду
MLOps — это набор практик внедрения машинного обучения в производство. Давайте посмотрим, что они из себя представляют.
Для этого мы начнем с обзора типичного процесса для проектов машинного обучения с высоты птичьего полета. В самом простом виде он состоит из 3 этапов:
- Дизайн
- Тренироваться
- Работать
Все начинается со стадии проектирования: мы понимаем, в чем проблема, и решаем, подходит ли ML для нее.
Если мы думаем, что нам нужно ML, мы обучаем модель. Это состояние поезда.
Когда она будет готова, нам нужно регулярно применять модель к новым данным. Это этап работы.
Тренироваться
На этапе обучения мы экспериментируем с разными моделями и пытаемся найти лучший набор параметров и функций для модели.
Большинство специалистов по данным делают это в блокнотах Jupyter.
Типичный процесс экспериментирования: «изменить параметр → повторно выполнить ячейку → посмотреть, улучшатся ли результаты». После нескольких итераторов блокнот становится полным беспорядком: вы не можете легко отслеживать изменения, параметры и результаты. Кроме того, становится нетривиальным воспроизвести эти результаты позже.
Две вещи помогают нам справиться с этими проблемами:
- Отслеживание экспериментов
- Учебные пайплайны
Отслеживание экспериментов
В отслеживании экспериментов мы устанавливаем процесс сохранения результатов каждого эксперимента. Каждый раз, когда мы экспериментируем с новым набором параметров или с новой функцией, мы регистрируем параметры и результаты с помощью инструмента отслеживания экспериментов. Позже мы можем использовать его, чтобы увидеть, какие настройки привели к лучшей модели и как разные параметры сравниваются друг с другом.
Существует множество инструментов для отслеживания экспериментов. Самый популярный из них — MLFlow.
Учебные пайплайны
Отслеживание экспериментов не решает всех наших проблем с обучением. У нас все еще есть беспорядочные блокноты Jupyter с ячейками, которые нужно выполнять в определенном порядке, чтобы получить окончательное решение.
Чтобы ее решить, мы разбиваем блокнот на набор строительных блоков, выполняемых один за другим. Мы называем последовательность таких блоков «конвейером машинного обучения».
Как только мы представим процесс обучения в виде конвейера, мы можем выполнить его и переобучить модель на новых данных всего одним щелчком мыши. Или вообще без щелчков.
На практике вы делаете это, конвертируя блокнот в скрипт Python, а затем разбивая его на несколько функций. Для более продвинутых конвейеров вы можете использовать инструменты оркестрации рабочих процессов общего назначения, такие как Airflow. Существуют также специализированные инструменты, ориентированные на машинное обучение, такие как Kubeflow Pipelines.
Подводя итог, на этапе обучения MLOps помогает с воспроизводимостью и автоматизирует обучение и оценку модели.
Работать
Результатом конвейера машинного обучения является модель — часто файл рассола. Теперь нам нужно взять модель и начать применять ее к новым данным.
Этот процесс называется развертыванием модели.
Развертывание
В зависимости от варианта использования мы можем развернуть нашу модель двумя способами: пакетным и онлайн.
В пакетном режиме нам не нужно сразу реагировать на все новые данные. Вместо этого мы регулярно обрабатываем данные партиями. Например, мы можем выполнять его каждый час, каждый день или раз в неделю.
Мы также запускаем конвейеры обучения в пакетном режиме, поэтому пакетное развертывание обычно становится расширением конвейеров машинного обучения. Часто мы просто используем простые сценарии Python, которые можно выполнять как задания Kubernetes или задания пакетной службы AWS. Или иногда мы можем использовать для этого Spark.
Пакетный режим — наиболее распространенный способ использования моделей машинного обучения. Это просто и достаточно для многих случаев.
В отличие от пакетного, в онлайн-режиме нам нужно реагировать на новые данные, как только они появляются. Обычно это сложнее, чем пакетная обработка, потому что службы модели должны быть всегда запущены и готовы к обработке новых данных в любое время.
Мы можем далее разбить онлайн-кейс на два способа развертывания моделей машинного обучения: веб-сервисы и потоковая передача.
В первом мы развертываем модель как веб-сервис. Пользователи нашей модели отправляют HTTP-запросы с функциями (обычно в формате JSON) и возвращают прогнозы.
Для развертывания моделей в качестве веб-сервисов мы используем такие библиотеки, как Flask или FastAPI, и запускаем их в Kubernetes или аналогичной системе. Существуют и более специализированные решения, ориентированные на машинное обучение, такие как KServe.
В случае потоковой передачи наша модель становится потребителем потока событий.
Каждый раз, когда происходит новое событие, сервис реагирует на него и применяет модель. Прогнозы сохраняются в другом потоке. Теперь наши пользователи могут подписаться на выходной поток и принимать решения на основе этих прогнозов.
Обычно мы используем брокеры сообщений, такие как Kafka, для потоковой передачи и реализуем сервис модели в качестве потребителя Kafka. Вместо Kafka мы можем использовать другие потоковые платформы, такие как Kinesis.
Мониторинг модели
Наша работа не заканчивается, когда модель развернута. Когда он выйдет в эфир, нам нужно следить за ним и следить за тем, чтобы он оставался функциональным.
В первую очередь мы отслеживаем традиционные метрики DevOps:
- Юнитизация ЦП
- Память
- использование сети
- количество запросов в секунду
- и другие.
Если какая-то метрика превышает порог, мы отправляем оповещение в службу поддержки, которая быстро реагирует на эти проблемы и устраняет их.
Но этого недостаточно. Мы также должны убедиться, что предсказания нашей модели по-прежнему хороши, и модель не устареет. Вот почему нам нужен мониторинг моделей.
Если мы обнаружим, что производительность падает, мы можем запустить конвейер обучения и переобучить его на свежих данных.
Подводя итог, можно сказать, что на этапе эксплуатации MLOps помогает нам развернуть модель и отслеживать ее производительность.
Люди, процессы и лучшие практики
До сих пор мы обсуждали методы и инструменты для обучения и работы. Это уже хорошо, но недостаточно.
Прежде всего, нам нужно убедиться, что мы понимаем проблему, которую хотим решить, и убедиться, что машинное обучение является правильным решением. Нам нужно быть методичными в этом: начните с цели, придумайте базовый уровень, а затем постепенно улучшайте его. Нам не всегда нужен полноценный конвейер обучения в Kubeflow с моделью, развернутой в KServe, и современной системой мониторинга. Вместо этого нам часто нужно начать с простого и сначала показать ценность в проекте, а затем повторить.
В этом нам помогают процессы. Существуют такие инструменты и фреймворки, как CRISP-DM, ML Canvas и MLOps Canvas, которые помогают нам работать вместе и решать проблемы.
MLOps — это «DevOps для науки о данных». Это означает, что все практики DevOps по-прежнему применимы:
- Тестирование наших сервисов с помощью модульных и интеграционных тестов
- Автоматизация всего
- CI/CD
- Использование шаблонов для быстрого начала работы (например, cookie-cutter) и make-файлов
- Написание исчерпывающей документации
И процессы, и лучшие практики помогают нам во всех трех состояниях проекта.
Есть больше
В этой статье мы только коснулись поверхности. Есть еще несколько концепций, которые я здесь не рассмотрел:
- Магазины функций
- Модельные реестры
- Платформы для экспериментов
И, возможно, многое другое. Вы можете прочитать о них больше и посмотреть, какие проблемы они решают и к какому этапу относятся (подсказка: некоторые могут принадлежать нескольким).
Краткое содержание
Мы обсудили, что такое MLOps, и посмотрели на процесс с вертолета. Мы разбили процесс на 3 этапа: проектирование, обучение и эксплуатация.
Для каждого из этих этапов мы увидели, как помогает MLOps:
- Процессы помогают нам работать вместе и приносят пользу
- Отслеживание экспериментов помогает нам оставаться в здравом уме при тестировании различных параметров модели.
- Конвейеры обучения упрощают воспроизведение результатов и переобучение модели всего несколькими командами.
- Развертывание модели позаботится об использовании модели наилучшим образом — либо в пакетном режиме, либо в виде веб-службы, либо как часть потоковой передачи.
- Мониторинг модели предупреждает нас, когда модель устаревает и нам нужно ее переобучить.
- Лучшие инженерные практики делают наш код чистым и надежным
MLOps Zoomcamp
Вы заинтересованы в изучении MLOps? В DataTalks.Club мы запускаем бесплатный онлайн-курс. Мы рассмотрим все темы, обсуждаемые здесь, и научим вас применять все эти концепции на практике.
Больше информации здесь: https://github.com/DataTalksClub/mlops-zoomcamp.
До встречи на курсе!