
В предыдущей статье мы рассмотрели различные типы нейросетей и обсудили, какие задачи можно решать с их помощью. Теперь рассмотрим задачу искусственного интеллекта с организационной и технической точки зрения.
При работе над сложными проектами обычно вовлечена команда разработчиков и специалистов по обработке данных, у которых сразу возникают вопросы: как управлять проектом, совместно разрабатывать модель машинного обучения (Machine Learning model), проводить ее тестирование, каким образом синхронизировать код и результаты экспериментов? После разработки и оптимизации ML-модели возникает необходимость ее развертывания в промышленной среде. Все эти проблемы могут казаться менее увлекательными, чем решение самой задачи машинного обучения, но они имеют критическое значение для успешной реализации ML-проектов.
В этой статье мы подробно рассмотрим жизненный цикл ML-сервиса от идеи до разработки и внедрения, а также инструменты и принципы, используемые на каждом этапе.
План статьи
Жизненный цикл и участники ML-проекта
Проекты искусственного интеллекта могут казаться новым миром, но на практике они следуют стандартным этапам IT-проекта. На этапах, связанных с машинным обучением, необходимо использовать специализированные инструменты, которые на сегодняшний день являются достаточно продвинутыми. На схеме представлены основные этапы IT-проекта, зеленым выделена ML-специфика:

- Этап бизнес анализа является стандартным для всех IT и не IT-проектов. 
На этом этапе происходит постановка бизнес целей.
- Оценка объема и качества имеющихся данных. Анализ и формирование требований к данным. 
Это ключевая специфика 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-проекта.
Оценка, анализ и подготовка данных
В общем виде анализ и подготовка данных состоит из следующих этапов:
Получение данных (Ingestion)
- Получение и обогащение данных из разных источников. 
- Анонимизация данных - очистка от персональных и чувствительных для бизнеса данных. 
- Разделение данных (Data Splitting) на данные для обучения, проверки и тестирования. 
Хорошая практика на данном этапе - всегда сохранять исходные данные без изменений, а эксперименты проводить с копиями данных.
Исследование и проверка (Exploration and Validation)
- Исследование структуры данных - min, max, среднее, статистическое распределение. 
- Проверка данных на корректность типов и форматов. 
- Визуализация данных. 
- Определение зависимостей между атрибутами (attribute correlation). 
На этом этапе необходимо определить нужны ли какие-нибудь дополнительные данные или можно двигаться дальше.
Очистка данных (Data Cleaning)
- Трансформация данных. 
- Заполнение пропусков. 
- Удаление выбросов в данных. 
- Удаление данных, которые не имеют отношения к решаемой задаче. 
После подготовки данных начинается этап разработки кода и ML-модели.
Разработка и тестирование ML-моделей
Разработка ML-моделей
Разработка ML-моделей обычно состоит из следующих шагов:
Model Training
- Feature Engineering, уменьшение размерности, нормализация данных; 
- Подбор гиперпараметров модели. 
Model Engineering
- Выбор подходящей ML-модели или комбинации моделей; 
- Разработка, ревью, версионирование кода ML-модели; 
- Оценка качества и выбор лучшей модели; 
- Оптимизация гиперпараметров модели. 
Model Evaluation & Testing
- Проверка модели, что она выполняет бизнес задачу; 
- Тестирование на проверочных данных. 
Model Packaging
- Сохранение в стандартном формате для дальнейшего использования. 
Автоматизация процесса разработки и тестирования ML-моделей (MLOps)
Для выполнения задач в рамках ML проектов необходимо использовать специализированные инструменты. Использование таких средств позволяет обеспечить воспроизводимость результатов на всех этапах жизненного цикла ML-модели:
- Repeatability - воспроизводимость экспериментов во время разработки 
- Reproducibility - прозрачный перенос ML-модели на промышленную площадку 
- Replicability - тиражирование общего решения 
Для автоматизации анализа данных используются средства для построения конвейеров (pipelines), которые позволяют версионировать данные и модели, автоматически выполнять необходимые шаги. Примером такой системы является Data Version Control (DVC), которую называют Git для данных.
Для автоматизации разработки и развертывания ML-моделей появилось понятие MLOps. Средства MLOps используется для сохранения результатов ML-экспериментов, версий моделей, для тестирования и развертывания моделей. Сейчас существует несколько средств, реализующих основную функциональность MLOps:
- Kubeflow - для развертывания в Kubernetes 
Платформа 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: - Offline (batch prediction) - в этом случае для предсказания используются заранее сгенерированные данные. 
- Real-time prediction (On-demand predictions) - для предсказания используются вновь поступающие данные из запроса. 
 
Используя эти типы можно построить следующую матрицу:

В ее клетках помещены названия схем, реализующих требуемую функциональность:
- Forecast 
- Automated machine learning 
- Web service 
- Online learning 
Также в клетках приведены шаблоны встраивания ML-моделей в промышленные системы, с помощью которых возможно реализовать перечисленные схемы:
- Model-as-Service 
- Model-as-Dependency 
- Model-on-Demand 
- Precompute serving 
Далее кратко опишу схемы и шаблоны:
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 с двумя компонентами:
- Message Broker с двумя очередями; 
- Event processor, который обслуживает запросы. 

Заключение
В статье мы рассмотрели этапы реализации проектов машинного обучения и отметили важность всех этапов для достижения успеха. Выяснили, что мир искусственного интеллекта состоит не только из ученых Data Sciences, но и из ML-инженеров, которые воплощают идеи в жизнь. Были подробно рассмотрены этапы анализа и подготовки данных, разработки и тестирования ML-моделей, а также схемы развертывания в промышленной среде.
Без грамотной технической реализации и организации процесса прекрасная идея так и останется лишь абстракцией!
Несколько ссылок для углубленного изучения
- Статья от сообщества MLOps (Machine Learning Model Operationalization Management) про данные, ML-модели и код приложения: Three Levels of ML Software; 
- Лекция в Nexign Анны Авдюшиной, аспиранта и инженер-программиста ИТМО и МФТИ "Как внедрить модели машинного обучения в продакшен"; 
- 
Курсы от сообщества ODS (Open Data Science) - Методы и инструменты MLOps: "MLOps и production подход к ML исследованиям 2.0"; 
- А этот курс только начинается (март 2024), еще можно принять участие вживую: "MLOps и production в DS исследованиях 3.0"; 
- Курс по дизайну систем машинного обучения: "ML System Design". 
 
 
          