Мозг промышленного масштаба или как воплотить мечту в реальность?
При работе над сложными проектами обычно вовлечена команда разработчиков и специалистов по обработке данных, у которых сразу возникают вопросы: как управлять проектом, совместно разрабатывать модель машинного обучения (Machine Learning model), проводить ее тестирование, каким образом синхронизировать код и результаты экспериментов? После разработки и оптимизации ML-модели возникает необходимость ее развертывания в промышленной среде. Все эти проблемы могут казаться менее увлекательными, чем решение самой задачи машинного обучения, но они имеют критическое значение для успешной реализации ML-проектов.
В этой статье мы подробно рассмотрим жизненный цикл ML-сервиса от идеи до разработки и внедрения, а также инструменты и принципы, используемые на каждом этапе.
План статьи
- Жизненный цикл и участники ML-проекта
- Оценка, анализ и подготовка данных
- Автоматизация процесса разработки и тестирования ML-моделей
- Схемы развертывания ML-моделей в промышленную эксплуатацию
Жизненный цикл и участники ML-проекта
Проекты искусственного интеллекта могут казаться новым миром, но на практике они следуют стандартным этапам IT-проекта. На этапах, связанных с машинным обучением, необходимо использовать специализированные инструменты, которые на сегодняшний день являются достаточно продвинутыми. На схеме представлены основные этапы IT-проекта, зеленым выделена ML-специфика:
На этом этапе происходит постановка бизнес целей.
Это ключевая специфика ML-проектов. Результаты этого этапа влияют на жизнеспособность всего проекта, поэтому он стоит в начале проекта, к нему сразу привлекаются специалисты по анализу данных и выделяется специальное время на изучение данных.
- Инициирование проекта, с принятием решения Go / No-Go также стандартный этап в проектном управлении.
- Формализация требований и критериев приемки работы. На этом этапе происходит:
- Выработка и согласование с заказчиком функциональных и нефункциональных требований в виде документов: ТЗ, ПМИ, требования по производительность и т.д.
- Определение бюджета и необходимого оборудования.
- Этап разработки и тестирования ML-моделей и кода является самым объемным по ресурсам и времени.
- Если результаты предыдущих этапов выполняют поставленные бизнес требования, то принимается решение о промышленном развертывании решения.
- Далее следует эксплуатация, мониторинг и обновление решения и ML-модели.
На разных этапах проекта привлекаются специалисты по машинному обучению с разными ролями. В рамках ML-проектов выделяют несколько ключевых ролей, которые могут выполняться как разными, таки и одними и теми же людьми или иметь пересекающиеся обязанности:
- Business Stakeholder / Data Science Managers - наблюдают за процессом в целом и контролируют всю деятельность.
- Machine Learning Engineer / MLOps Professionals
- Обеспечивают техническую реализацию обучения моделей.
- Развертывают их в промышленную эксплуатацию с помощью средств CI / CD.
- Мониторят и переобучают ML-модели на новых данных.
- Data Scientists занимаются анализом данных и построением моделей с научной точки зрения. Такие сотрудники называются по-разному в зависимости от области, в которой работают:
- Deep Learning Engineer - инженер глубокого обучения.
- Computer Vision Researcher - исследователь компьютерного зрения.
- NLP Scientist - ученый по обработке естественного языка.
- Data Engineers занимаются сбором и подготовкой данных с технической точки зрения:
Далее подробно рассмотрим ключевые этапы ML-проекта.
Оценка, анализ и подготовка данных
В общем виде анализ и подготовка данных состоит из следующих этапов:
- Получение и обогащение данных из разных источников.
- Анонимизация данных - очистка от персональных и чувствительных для бизнеса данных.
- Разделение данных (Data Splitting) на данные для обучения, проверки и тестирования.
Хорошая практика на данном этапе - всегда сохранять исходные данные без изменений, а эксперименты проводить с копиями данных.
Исследование и проверка (Exploration and Validation)
- Исследование структуры данных - min, max, среднее, статистическое распределение.
- Проверка данных на корректность типов и форматов.
- Визуализация данных.
- Определение зависимостей между атрибутами (attribute correlation).
На этом этапе необходимо определить нужны ли какие-нибудь дополнительные данные или можно двигаться дальше.
Очистка данных (Data Cleaning)
- Трансформация данных.
- Заполнение пропусков.
- Удаление выбросов в данных.
- Удаление данных, которые не имеют отношения к решаемой задаче.
После подготовки данных начинается этап разработки кода и ML-модели.
Разработка и тестирование ML-моделей
Разработка ML-моделей
Разработка ML-моделей обычно состоит из следующих шагов:
- Выбор подходящей ML-модели или комбинации моделей;
- Разработка, ревью, версионирование кода ML-модели;
- Оценка качества и выбор лучшей модели;
- Оптимизация гиперпараметров модели.
Автоматизация процесса разработки и тестирования ML-моделей (MLOps)
Для выполнения задач в рамках ML проектов необходимо использовать специализированные инструменты. Использование таких средств позволяет обеспечить воспроизводимость результатов на всех этапах жизненного цикла ML-модели:
- Repeatability - воспроизводимость экспериментов во время разработки
- Reproducibility - прозрачный перенос ML-модели на промышленную площадку
- Replicability - тиражирование общего решения
Для автоматизации анализа данных используются средства для построения конвейеров (pipelines), которые позволяют версионировать данные и модели, автоматически выполнять необходимые шаги. Примером такой системы является Data Version Control (DVC), которую называют Git для данных.
Для автоматизации разработки и развертывания ML-моделей появилось понятие MLOps. Средства MLOps используется для сохранения результатов ML-экспериментов, версий моделей, для тестирования и развертывания моделей. Сейчас существует несколько средств, реализующих основную функциональность MLOps:
- MLflow
- Neptune AI
- Kubeflow - для развертывания в Kubernetes
- Weights & Biases (W&B)
- ClearML
Платформа MLflow
Рассмотрим подробнее платформу MLflow. Она состоит из следующих основных компонент, предназначенных для работы с ML-проектами:
- MLflow Tracking - отслеживает и логирует процесс обучения модели. Сохраняет результаты экспериментов, конфигурационные данные и гиперпараметры модели. Позволяет визуализировать метрики, сравнивать результаты и выбирать наилучший вариант модели.
- MLflow Projects - модуль предназначен для сохранения данных, кода и всех зависимостей для возможности повторить эксперименты на разных платформах.
- MLflow Models - позволяет сохранять ML-модели в стандартных форматах для дальнейшего разворота в различных окружениях. Наиболее распространенные форматы:
- MLflow Registry - хранит и управляет версиями ML-моделей в центральном хранилище.
- MLflow deployment toolset - позволяет разворачивать модели на облачных и локальных платформах.
Схемы развертывания MLflow
Существуют различные схемы для развертывания и использования MLflow. Приведу наиболее общую схему с выделенным сервером MLflow Server:
При такой схеме процесс разработки и деплоя ML-модели выглядит следующим образом:
- ML-модель разрабатывается и тестируется на локальном оборудовании, которое интегрировано с сервером MLflow Tracking.
- Исходные коды и данные для построения ML-модели хранятся в Git-е.
- Реализованные ML-модели сохраняются в MLflow Registry.
- MLflow Models переносит модель в виртуальное окружение (virtual environment) для локального развертывания или docker контейнер для развертывания в облачных платформах и Kubernetes.
- С помощью MLflow Deployment toolset осуществляется развертывание модели в промышленную среду.
Мониторинг работы ML-модели осуществляется с помощью специальных платформ, например, Evidently.
Развертывание ML-моделей
Схемы развертывания в зависимости от типа обучения и предсказания
Различают следующие типы обучения и предсказания:
- ML-model Training:
- Offline Training - модели тренируются на уже собранных (исторических) данных, при работе модель остается валидной какое-то время, но потом необходим процесс переобучения на актуальных данных.
- Online Training - постоянное переобучение модели на вновь поступающих данных.
- ML-model Prediction:
Используя эти типы можно построить следующую матрицу:
В ее клетках помещены названия схем, реализующих требуемую функциональность:
Также в клетках приведены шаблоны встраивания ML-моделей в промышленные системы, с помощью которых возможно реализовать перечисленные схемы:
Далее кратко опишу схемы и шаблоны:
Forecast - для построения модели обычно используются статические данные в виде файлов. Предсказание также осуществляется на статических данных. В таком режиме работают BI системы и научные исследования данных. Схема не предназначена для работы в промышленных системах.
Web service - наиболее популярная схема использования. В ней ML-модель строится на исторических данных, но информация для предсказания берется из запроса в реальном времени. Переобучение модели на актуальных данных можно запускать периодически или же сам запрос может запускать процесс обучения на актуальных данных (batch run).
Online learning - наиболее динамичная схема. Обычно используется на потоковых данных, когда модель должна постоянно изменяться. Переобучение может происходить не на промышленной системе, а параллельно и тогда для этой схемы больше подходит наименование “инкрементальное обучение”. В таких системах есть риски, что пришедшие некачественные данные ухудшат качество модели.
Automated machine learning - в этой схеме происходит автоматическое обучение, оптимизация результатов и выбор ML-модели. Реализация таких систем зачастую более сложная задача, чем online learning, т.к.требует от пользователя только предоставление данных, а ML-модель автоматически подбирается самой системой. Обычно реализуется крупными провайдерами ИИ, такими как Google или Microsoft.
Шаблоны встраивания ML-моделей (Model Serving Patterns)
Каждая схема предсказания и обучения может быть реализована разными техническими шаблонами:
Model-as-Service - наиболее простой шаблон. ML-модель работает как сервис, к которому приложение делает запросы с помощью REST API:
Model-as-Dependency - наиболее прямолинейный способ использования ML-модели. При реализации этого шаблона модель встраивается в приложение:
Precompute serving - при реализации шаблона используются заранее подготовленные предсказания:
Model-on-Demand - шаблон похож на Model-as-Dependency, в котором используется архитектура message broker с двумя компонентами:
Заключение
В статье мы рассмотрели этапы реализации проектов машинного обучения и отметили важность всех этапов для достижения успеха. Выяснили, что мир искусственного интеллекта состоит не только из ученых Data Sciences, но и из ML-инженеров, которые воплощают идеи в жизнь. Были подробно рассмотрены этапы анализа и подготовки данных, разработки и тестирования ML-моделей, а также схемы развертывания в промышленной среде.
Без грамотной технической реализации и организации процесса прекрасная идея так и останется лишь абстракцией!