Как опубликовать пакет частной модели машинного обучения

Истинная ценность модели машинного обучения может быть реализована только после того, как ее прогнозы будут предоставлены конечным пользователям. Конечным пользователем может быть что угодно: кто-то, пытающийся найти фильм для просмотра на Netflix, кто-то, кто подает заявку на кредит, команда HR, пытающаяся определить, кто может уйти, и т. д. Он описывает, для кого предназначена программа, и программное обеспечение может быть разработан для всех, поэтому конечным пользователем может быть кто угодно.

В этой статье мы рассмотрим раздел, предшествующий разделению модели машинного обучения: упаковка и распространение. Этот шаг включает в себя преобразование кода из исследовательской среды (обычно блокнота Jupyter) в готовый к работе код — другими словами, мы конвертируем блокноты в сценарии и модули, а затем используем их для создания пакета.

Что такое пакет Python?

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

Чтобы лучше понять пакеты, проще понять скрипты и модули. Вот их соответствующие определения в Python:

  • Сценарий. Сценарий определяет файл, предназначенный для непосредственного запуска (например, в оболочке). Каждый запуск скрипта должен выполнять определенное поведение. Это означает, что сценарий обычно состоит из кода, написанного вне области действия каких-либо классов или функций. Чтобы создать скрипт, мы просто пишем наш код и сохраняем файл с расширением .py.
  • Модуль. Модуль описывает программу Python, созданную с намерением импортировать ее в другие скрипты или модули. Это означает, что модуль обычно состоит из классов, функций и переменных, предназначенных для использования в других файлах. Думайте о слове «модуль» как об общем термине для многократно используемого кода.

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

Папка пакета обычно содержит файл __init__.py, который используется для информирования Python о том, что каталог является пакетом. __init__.py можно оставить пустым или в нем могут быть исполняемые файлы.

Примечание. Еще один термин, с которым вы могли столкнуться, — это «библиотека». В Python библиотеки не так четко определены. Хорошее эмпирическое правило — рассматривать пакет как библиотеку только тогда, когда он опубликован.

Определение нашего пакета

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

Модули в нашем пакете включают:

  1. config.yml — файл для установки постоянных переменных, распределенных по пакету.
  2. pipeline.py — определяет конвейер машинного обучения, который мы используем для преобразования необработанных данных и создания прогнозов.
  3. predict.py — чтобы делать прогнозы для новых экземпляров с помощью нашей обученной модели.
  4. train_pipeline.py — мы обучаем и сериализуем наш конвейер для последующего использования.
  5. ВЕРСИЯ — Текущая версия.
  6. config/core.py — файл для анализа нашего файла YAML и обеспечения доступа к переменным в Python.
  7. data/ — все необработанные данные обучения и тестирования.
  8. models/ — обученная сериализованная модель.
  9. processing/data_manager.py — служебные функции для управления данными.
  10. processing/features.py — преобразование функций, которые будут использоваться в нашем конвейере.
  11. processing/validation.py —схема проверки данных, гарантирующая, что наша модель получает тот тип данных, который мы от нее ожидаем.

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

Публикация в Gemfury

Если вы знакомы с Python, вы должны знать, что пакеты можно удобно объединять и распространять с помощью PyPi, который можно установить с помощью pip install <package name>. Загрузка пакета модели машинного обучения в PyPi может быть нежелательной при работе в реальных командах, поскольку PyPi является общедоступным, а пакеты в индексе могут быть установлены кем угодно.

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

Лучший вариант — использовать сторонний инструмент для размещения ваших частных пакетов. В этом примере мы используем Gemfury, облачный хостинг для ваших частных и пользовательских пакетов. После загрузки вы можете устанавливать пакеты в свое приложение на любом хосте — подробнее см. в Документация.

Мы можем создать новый пакет в три шага:

Шаг № 1: Создайте учетную запись

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

Шаг № 2: Предварительная сборка пакета

У Gemfury есть несколько способов загрузки пакетов в наш индекс PyPi:

Мы создадим наш пакет, загрузив готовый пакет. Для этого потребуется, чтобы у нас был setup.py, который можно найти в родительском каталоге показанного выше.

Оказавшись в этом каталоге, мы просто запускаем python setup.py sdist из терминала. По завершении запуска создается новый каталог с именем dist. В этом каталоге находится файл tar.gz, который нам понадобится для создания нашего пакета.

Шаг № 3: Соберите пакет

Когда вы найдете файл, просто перетащите его на панель инструментов Gemfury. Загрузка займет несколько минут, но когда он загрузится, вы сможете просмотреть свой личный пакет на странице пакетов.

Примечание. Установить пакет можно несколькими способами. Я настоятельно рекомендую читателю следовать руководству документации, чтобы выполнить этот процесс.

Заворачивать

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

Спасибо, что прочитали.

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

Уже вступил? Подпишитесь, чтобы получать уведомления, когда я опубликую.



Примечание редактора. Heartbeat — это интернет-издание и сообщество, созданное участниками и посвященное предоставлению лучших образовательных ресурсов для специалистов по науке о данных, машинному обучению и глубокому обучению. Мы стремимся поддерживать и вдохновлять разработчиков и инженеров из всех слоев общества.

Независимая от редакции, Heartbeat спонсируется и публикуется Comet, платформой MLOps, которая позволяет специалистам по данным и командам машинного обучения отслеживать, сравнивать, объяснять и оптимизировать свои эксперименты. Мы платим нашим авторам и не продаем рекламу.

Если вы хотите внести свой вклад, перейдите к нашему призыву к участию. Вы также можете подписаться на получение наших еженедельных информационных бюллетеней (Еженедельник глубокого обучения и Информационный бюллетень Comet), присоединиться к нам в Slack и следить за Comet в Twitter и LinkedIn, чтобы получать ресурсы, события и многое другое, что поможет вам быстрее создавать лучшие модели машинного обучения.