DevOps для машинного обучения
DevOps и MLOps
DevOps представляют собой объединение профессионалов, процессов и продуктов с целью непрерывной поставки преимуществ пользователям, по словам Донована Брауна (Donovan Brown) в записи его блога What is DevOps? (Что такое DevOps?).
Чтобы понять, как применять их при работе с моделями машинного обучения, давайте подробнее изучим некоторые основные принципы DevOps.
DevOps представляют собой сочетание инструментов и методик, помогающих разработчикам создавать надежные и воспроизводимые приложения. Цель использования принципов DevOps заключается в быстром повышении эффективности работы пользователей.
Если вы хотите легко повысить эффективность, интегрировав модели машинного обучения в конвейеры преобразования данных или приложения в режиме реального времени, вам может пригодиться реализация принципов DevOps. Изучение DevOps поможет вам организовать и автоматизировать работу.
Создание, развертывание и отслеживание надежных и воспроизводимых моделей для повышения эффективности работы пользователей является целью операций машинного обучения (MLOps).
Когда мы говорим об операциях машинного обучения (MLOps), необходимо учитывать три процесса, которые следует объединить:
ML включает все рабочие нагрузки машинного обучения, за которые отвечает специалист по обработке и анализу данных. Специалист по обработке и анализу данных выполняет следующие задачи:
- Произвольный анализ данных
- Проектирование признаков
- Обучение и настройку модели
DEV относится к разработке программного обеспечения, которое включает следующие этапы:
- Планирование. Определение требований модели и метрик производительности.
- Создание. Создание скриптов обучения и оценки модели.
- Проверка. Проверка качества кода и модели.
- Создание пакета. Подготовка к развертыванию путем промежуточного хранения решения.
OPS относится к операциям и включает следующие этапы:
- Выпуск. Развертывание модели в рабочей среде.
- Настройка. Стандартизация конфигураций инфраструктуры с помощью инфраструктуры как кода (IaC).
- Отслеживание. Отслеживание метрик и проверка корректной работы модели и инфраструктуры.
Давайте рассмотрим важнейшие для MLOps принципы DevOps.
Принципы DevOps
Одним из основных принципов DevOps является автоматизация. С помощью автоматизации задач можно быстрее развертывать новые модели в рабочей среде. Также она помогает создавать надежные воспроизводимые модели, согласованные во всех средах.
Автоматизация позволяет быстро выполнять все необходимые действия, чтобы гарантировать, что модель в рабочей среде является наиболее эффективной. Это особенно важно для регулярных обновлений модели с течением времени.
Ключевым понятием в реализации автоматизации является CI/CD, что расшифровывается как непрерывная интеграция и непрерывная поставка.
Непрерывная интеграция
Непрерывная интеграция охватывает создание и проверку модели. Ее цель заключается в создании кода и проверке качества кода и модели с помощью средств автоматического тестирования.
При работе с MLOps непрерывная интеграция может включать следующие этапы:
- Рефакторинг произвольного кода в записных книжках Jupyter в скрипты Python или R.
- Анализ кода на наличие программных или стилистических ошибок в скриптах Python или R. Например, это позволяет проверять, не содержит ли строка скрипта менее 80 символов.
- Модульное тестирование для проверки производительности содержимого скриптов. Например, это позволяет проверять, создает ли модель точные прогнозы на основе тестового набора данных.
Совет
Узнайте, как преобразовать эксперименты машинного обучения в рабочий код Python.
Для выполнения анализа кода и модульного тестирования можно воспользоваться такими инструментами автоматизации, как Azure Pipelines в Azure DevOps или GitHub Actions.
Непрерывная поставка
После проверки качества кода в скриптах Python или R, с помощью которых обучалась модель, ее необходимо перенести в рабочую среду. Непрерывная поставка включает шаги по развертыванию модели в рабочей среде с автоматизацией всех возможных действий.
Чтобы развернуть модель в рабочей среде, сначала ее необходимо упаковать и развернуть в предварительной среде. Промежуточное хранение модели в предварительной среде позволяет проверить, работает ли она должным образом.
Если развертывание модели на этапе промежуточного хранения прошло успешно и без ошибок, можно утвердить развертывание модели в рабочей среде.
Для совместной работы над скриптами Python или R (чтобы обучать модель) и над любым нужным кодом (чтобы разворачивать модель в каждой среде) воспользуйтесь управлением исходным кодом.
Управление исходным кодом
Управление исходным кодом (или управление версиями) чаще всего реализуется во время работы с репозиторием на основе Git. Репозиторий ссылается на расположение, где можно хранить все файлы, связанные с проектом программного обеспечения.
Работа с проектами машинного обучения подразумевает отдельный репозиторий для каждого вашего проекта. В него войдут, помимо прочего, записные книжки Jupyter, скрипты обучения и оценки, а также определения конвейера.
Примечание.
Не рекомендуется хранить данные обучения в репозитории. Вместо этого их можно хранить в базе данных или озере данных, а Машинное обучение Azure будет извлекать их напрямую из источника данных с помощью хранилищ данных.
Репозитории на основе Git доступны в Azure Repos в Azure DevOps или в репозитории GitHub.
Размещение всего необходимого кода в репозитории обеспечивает совместную работу над кодом и отслеживание изменений, которые вносят участники команды. Каждый участник может работать над собственной версией кода. Вы сможете просмотреть и проверить все прошлые изменения, прежде чем зафиксировать их в основном репозитории.
Чтобы распределить части проекта между участниками, рекомендуется использовать гибкое планирование.
Гибкое планирование
Так как модель необходимо быстро развернуть в рабочей среде, для проектов машинного обучения отлично подходит гибкое планирование.
Гибкое планирование подразумевает разделение работы на спринты. Спринты — это непродолжительные периоды времени, за которые планируется достигнуть части целей проекта.
Спринты необходимо планировать, чтобы быстро улучшать код. Этот код может использоваться для изучения данных и модели, а также для развертывания модели в рабочей среде.
Обучение модели машинного обучения может оказаться довольно длительным. Например, специалисту по обработке и анализу данных может потребоваться улучшить производительность модели из-за смещения данных. Или потребуется оптимизировать модель для соответствия новым бизнес-требованиям.
Чтобы не тратить слишком много времени на обучение модели, можно определить область проекта с помощью гибкого планирования и согласовать действия команды, установив краткосрочные результаты.
Для планирования работы можно воспользоваться такими средствами, как Azure Boards в Azure DevOps или Вопросы GitHub.
Инфраструктура как код (IaC)
Применение принципов DevOps в проектах машинного обучения обеспечивает создание надежных воспроизводимых решений. Другими словами, все, что вы создаете, необходимо повторить и автоматизировать.
Чтобы повторить и автоматизировать инфраструктуру для обучения и развертывания модели, ваша команда воспользуется инфраструктурой как кодом (IaC). IaC означает, что во время обучения и развертывания моделей в Azure вы определяете все необходимые ресурсы Azure в коде, который хранится в репозитории.
Совет
Подробнее изучите DevOps с помощью модулей Microsoft Learn о пути преобразования DevOps.