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

Он ориентирован на вспомогательные инструменты, которые могут облегчить разработку и воспроизвести эксперименты. Некоторые из этих инструментов я использовал в реальных проектах, другие я просто пробовал на игрушечном примере, но нашел их интересными для использования в будущем.

Запуск нового проекта

Cookiecutter - генератор строительных лесов для всевозможных проектов. Он позволяет сгенерировать шаблонный код для пустого проекта. Полезно для объединения директорий проектов. Он также создает базовые конфигурации для упаковки и тестирования (также может включать настроенные инструменты покрытия кода).

Обучение

Отслеживание экспериментов

MLFlow - это инструмент для отслеживания проведенных экспериментов и их параметров. Имеет собственное веб-окно для доступа к данным эксперимента. Требовать наличия работающего сервера для хранения запусков экспериментов.

Управление артефактами

DVC - инструмент, который можно рассматривать как git для больших или двоичных файлов. Он не пытается вычислить разницу между версиями и полагается на стороннее файловое хранилище (например - S3). По сути, он состоит из двух частей - части управления версиями данных и части конвейера данных. Первая вещь, безусловно, обязательная. Это может быть очень полезно для отслеживания ваших обученных моделей рядом с кодом. Но вторая часть - DVC Pipeline - мне кажется лишней, и ее лучше заменить старым-добрым Makefile.

Конвейеры данных и ETL

  • Makefile - очень старый инструмент. Вы определяете целевые файлы и шаги по их получению.
  • Luigi или Airflow - распространяемые версии Makefile. Позволяет строить Направленные ациклические графы задач в python. У них также есть веб-просмотр и встроенный планировщик.
  • Kedro - еще один фреймворк для конвейера данных, который также предоставляет собственный инструмент для генерации проектов. Это может быть интересно, поскольку обеспечивает высокий уровень абстракции. Kedo-pipelines достаточно абстрактен, чтобы его можно было преобразовать в Airflow-pipeline. Однако они сильно зависят от Dataset абстракции, поэтому может быть сложно реализовать ленивые загрузчики данных.
  • Metaflow - бессерверный вариант Airflow, он позволяет строить конвейеры и DAG, но не имеет планировщика или серверной части. Вместо этого он может запускать конвейеры в облаке.

Развертывание

Создать API

  • Flask-RESTPlus + gunicorn - чуть более сложная установка, чем просто Flask. RESTPlus ограничивает вас лучшими практиками разработки API, чем чистый Flask. Это также позволяет легко документировать ваш API с помощью Swagger.
  • FastAPI - еще более компактная версия Flask + Swagger, которая автоматически строит документацию по API.

Запуск в кластере

  • Docker + Kubernetes - в Интернете есть множество обучающих материалов и обзоров. Небольшой совет - не пытайтесь развернуть собственный самолет управления K8s.
  • Cortex - позволяет быстро развернуть свои модели как сервис на AWS. Он автоматически переносит вашу predict функцию в конечную точку API и создает экземпляры EC2 для ее обслуживания. Но на мой взгляд, этот фреймворк подходит только для прототипов, так как решение не подлежит передаче и не создаются контейнеры.

Дополнительная литература

  • Не стесняйтесь присоединиться к моему каналу Telegram или посетить мой блог, если вас интересуют ML Engineering и NLP.