DevOps для машинного обучения

Завершено

DevOps и MLOps

DevOps представляют собой объединение профессионалов, процессов и продуктов с целью непрерывной поставки преимуществ пользователям, по словам Донована Брауна (Donovan Brown) в записи его блога What is DevOps? (Что такое DevOps?).

Чтобы понять, как применять их при работе с моделями машинного обучения, давайте подробнее изучим некоторые основные принципы DevOps.

DevOps представляют собой сочетание инструментов и методик, помогающих разработчикам создавать надежные и воспроизводимые приложения. Цель использования принципов DevOps заключается в быстром повышении эффективности работы пользователей.

Если вы хотите легко повысить эффективность, интегрировав модели машинного обучения в конвейеры преобразования данных или приложения в режиме реального времени, вам может пригодиться реализация принципов DevOps. Изучение DevOps поможет вам организовать и автоматизировать работу.

Создание, развертывание и отслеживание надежных и воспроизводимых моделей для повышения эффективности работы пользователей является целью операций машинного обучения (MLOps).

MLOps overview of three processes

Когда мы говорим об операциях машинного обучения (MLOps), необходимо учитывать три процесса, которые следует объединить:

  • ML включает все рабочие нагрузки машинного обучения, за которые отвечает специалист по обработке и анализу данных. Специалист по обработке и анализу данных выполняет следующие задачи:

    • Произвольный анализ данных
    • Проектирование признаков
    • Обучение и настройку модели
  • DEV относится к разработке программного обеспечения, которое включает следующие этапы:

    1. Планирование. Определение требований модели и метрик производительности.
    2. Создание. Создание скриптов обучения и оценки модели.
    3. Проверка. Проверка качества кода и модели.
    4. Создание пакета. Подготовка к развертыванию путем промежуточного хранения решения.
  • OPS относится к операциям и включает следующие этапы:

    1. Выпуск. Развертывание модели в рабочей среде.
    2. Настройка. Стандартизация конфигураций инфраструктуры с помощью инфраструктуры как кода (IaC).
    3. Отслеживание. Отслеживание метрик и проверка корректной работы модели и инфраструктуры.

Давайте рассмотрим важнейшие для MLOps принципы DevOps.

Принципы DevOps

Одним из основных принципов DevOps является автоматизация. С помощью автоматизации задач можно быстрее развертывать новые модели в рабочей среде. Также она помогает создавать надежные воспроизводимые модели, согласованные во всех средах.

Автоматизация позволяет быстро выполнять все необходимые действия, чтобы гарантировать, что модель в рабочей среде является наиболее эффективной. Это особенно важно для регулярных обновлений модели с течением времени.

Ключевым понятием в реализации автоматизации является CI/CD, что расшифровывается как непрерывная интеграция и непрерывная поставка.

Непрерывная интеграция

Непрерывная интеграция охватывает создание и проверку модели. Ее цель заключается в создании кода и проверке качества кода и модели с помощью средств автоматического тестирования.

При работе с MLOps непрерывная интеграция может включать следующие этапы:

  • Рефакторинг произвольного кода в записных книжках Jupyter в скрипты Python или R.
  • Анализ кода на наличие программных или стилистических ошибок в скриптах Python или R. Например, это позволяет проверять, не содержит ли строка скрипта менее 80 символов.
  • Модульное тестирование для проверки производительности содержимого скриптов. Например, это позволяет проверять, создает ли модель точные прогнозы на основе тестового набора данных.

Для выполнения анализа кода и модульного тестирования можно воспользоваться такими инструментами автоматизации, как 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.