Сделайте первый шаг в MLOps

Введение

Быстрые исследования и разработки технологий искусственного интеллекта увеличили потребность специалистов по данным в знании непрерывной интеграции (CI), непрерывного тестирования и непрерывной доставки (CD).

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

CI/CD — это методология разработки программного обеспечения DevOps, которая позволяет компаниям выполнять более быстрые циклы разработки своего программного обеспечения. Это также включает в себя выполнение модульного тестирования и быстрое развертывание их услуги или продукта.

Специалисту по обработке и анализу данных CI/CD помогает быстро создать прототип своей модели, протестировать код и отправить небольшие запросы на извлечение, которые можно легко объединить с основной веткой.

Когда специалист по данным применяет методологию разработки программного обеспечения DevOps к системам машинного обучения, мы получаем MLOps или операции машинного обучения.

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

Если вы хотите подробно узнать о MLOps, у Google есть хорошо написанная статья, в которой подробно описана методология.

Теперь давайте предпримем некоторые действия.

Код

Весь код доступен из моего Bitbucket или репозитория Github.

Битбакет-конвейер

В Части 1 этой статьи я буду использовать код калькулятора, разработанный Real Python, и покажу вам, как настроить конвейер битбакетов и выполнять непрерывную интеграцию и тестирование. Вместо этого, если вы хотите узнать, как использовать CI/CD с Github + CircleCI, вы можете перейти к статье Настоящий Python.

Код и образ Docker

Оригинальный код калькулятора имеет функции сложения, вычитания и умножения.

Кроме того, я добавил «максимальную функцию» для проверки непрерывного интегрирования между двумя числами (я подробно объясню это ниже).

Я также добавил файл конфигурации YML, чтобы конвейер битбакета работал. Скриншот конфигурационного файла YML приведен ниже.

Файл YML указывает битбакету запускать весь ваш код внутри контейнера докеров, используя изображение, которое вы указываете в начале файла конфигурации. Используемый нами образ Python по умолчанию — Python 3.7.2.

Этапы создания трубопровода

  1. Чтобы успешно пройти это руководство, вам необходимо иметь учетную запись Bitbucket, которую вы можете создать здесь. Когда у вас будет готовый репозиторий, вы можете разветвить/клонировать весь код из моего Bitbucket или репозиторий Github.
  2. Если вы клонируете мой репозиторий Bitbucket, вы можете продолжить выполнение шагов, описанных в шаге 4.
  3. Если вы клонировали мой репозиторий Github, вам нужно создать репозиторий bitbucket и вставить мой клонированный репозиторий в свой. Не волнуйтесь, если вы новичок в битбакете! Шаги очень похожи на GitHub и используют git.
  4. Когда у вас будет готовый репозиторий, щелкните конвейеры в левой части страницы репозитория, как показано ниже.

5. В качестве следующего шага вам нужно включить конвейер, как показано на изображении ниже, в вашем репозитории разветвленного битбакета.

6. Когда у вас будет готов конвейер, вы увидите статус «Добавлен конвейер битбакета» как успешный.

7. Следующим шагом будет запуск сборки, как показано ниже.

8. Когда сборка будет готова, вы увидите выходные данные с информацией о тестовом покрытии (тестовое покрытие используется для описания количества тестов, выполненных для кода, для которого задан тест). В нашем случае у нас есть 4 функции внутри файла calculate.py, а именно сложение, вычитание, умножение и максимум. У нас также есть тест, написанный для всех из них.

9. В качестве следующего шага, чтобы облегчить себе изучение CI/CD, удалите функцию «максимум» из файла calculaor.py и выполните следующие команды, чтобы убедиться, что код работает без ошибок.

Если вы получаете какую-либо ошибку, это, скорее всего, связано с flake8, который используется для руководства по стилю Python. Чтобы избавиться от любых ошибок, убедитесь, что у вас есть две новые строки перед каждой функцией и новая строка после каждой функции.

10. Затем зафиксируйте и отправьте свой код с вашего терминала, чтобы обновление на вашем локальном компьютере синхронизировалось с репозиторием bitbucket.

11. При обновлении и отправке кода в терминал вы увидите, что конвейер битбакета автоматически запускается, что приводит к сбою. Это потому, что у нас есть тест, написанный для максимальной функции, но мы удалили саму функцию на шаге 8.

12. В качестве следующего шага верните функцию на максимум, и ваш конвейер снова успешно запустится, как показано на рисунке ниже. Не забудьте снова зафиксировать и отправить свой код.

Как видите, мне пришлось строго следовать руководству по стилю flake8, чтобы конвейер работал успешно.

Вуаля! Это все. Теперь вы знаете, как настроить конвейер битбакетов и выполнять непрерывную интеграцию и тестирование.

В следующей статье мы увидим, как выполнить непрерывное развертывание на другом примере.

Упражнения для вас

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

ПРИМЕЧАНИЕ. Чтобы сделать руководство проще, я отправил код в главный репозиторий. Однако лучше всего создать ветку и отправить свой код в ветку, а затем выполнить слияние с мастером. Попробуйте сделать это с помощью модели логистической регрессии.

Если вам понравилась моя статья, продолжайте смотреть, я планирую писать на несколько тем по науке о данных, решению проблем и психологии успеха.

Если вы хотите подключиться, добавьте меня в Linkedin.

использованная литература