Вот список инструментов, которые, на мой взгляд, стоит попробовать, если вы собираетесь создать новый проект машинного обучения. Этот список не является исчерпывающим обзором и не включает никаких фреймворков или библиотек машинного обучения.
Он ориентирован на вспомогательные инструменты, которые могут облегчить разработку и воспроизвести эксперименты. Некоторые из этих инструментов я использовал в реальных проектах, другие я просто пробовал на игрушечном примере, но нашел их интересными для использования в будущем.
Запуск нового проекта
Cookiecutter - генератор строительных лесов для всевозможных проектов. Он позволяет сгенерировать шаблонный код для пустого проекта. Полезно для объединения директорий проектов. Он также создает базовые конфигурации для упаковки и тестирования (также может включать настроенные инструменты покрытия кода).
- Но я настоятельно рекомендую НЕ использовать https://github.com/drivendata/cookiecutter-data-science, потому что он содержит множество спорных практик Python, таких как использование src в качестве модуля.
- Лучше использовать https://github.com/audreyr/cookiecutter-pypackage и, но позаимствовать структуру каталогов из cookiecutter-data-science.
Обучение
Отслеживание экспериментов
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.