Введение в «Not so Simple ML Framework»

В серии постов я хочу представить ML Framework (на основе Python), достаточно хороший, чтобы быть готовым к работе, но в то же время простой. Фреймворк включает в себя все, от проекта Data Science до проекта API, обслуживающего запросы (отвечающего за процесс CD).

Кто мог сделать нас из этого

Фреймворк подойдет команде среднего размера или команде с низким уровнем инженерной поддержки данных. Я сам не Data Scientist, я помогаю командам Data Science настраивать свои пайплайны/рабочие процессы, как, можно сказать, инженер ML/Data. Поэтому в следующих постах я не буду описывать как готовить/обучать/моделировать/оценивать/и т.д. модели машинного обучения, но и как подготовить ваш проект к производству.

Почему

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

Альтернативы

Несколько слов о том, почему я решил написать собственный фреймворк вместо использования чего-то вроде решения Tensorflow/Serving или PyTorch или даже фреймворка с открытым исходным кодом/коммерческого машинного обучения. Первый ответ, который вы получаете от архитектора при построении какой-то системы — «это зависит». На мой взгляд, пользовательское решение обычно быстрее начать использовать, и вы можете легче адаптировать свои текущие процессы к нему, чем к какой-то более крупной системе/фреймворку. Кроме того, части, которые «просто» обслуживают запросы API, обычно не очень хорошо настраиваются, или время, чтобы понять и внести изменения, слишком велико.

Пайплайн использования фреймворка

  1. Проект по науке о данных: проект, в котором вы структурируете свой код, связанный с машинным обучением (здесь я использую PyCharm в качестве IDE)
  2. Мы упаковываем наш код моделирования и загружаем его на сервер (позже мы проверим доступные варианты).
  3. Загружаем нашу сериализованную (например, маринованную) модель. Модель обучена и готова к использованию API
  4. Проект API (Flask) будет использовать пакет моделирования
  5. Мы отправляем проект API в наш репозиторий (GitLab, GitHub и т. д.), поэтому наш конвейер CD (т. е. непрерывная доставка) будет запущен.
  6. После успешных этапов сборки, тестирования, развертывания у нас есть наш контейнер Docker с API в кластере (или любой другой среде выполнения)
  7. API загрузит сериализованный файл модели из хранилища (например, S3, корзина Google) при запуске службы.

Важные вещи, которые также будут описаны в следующих постах:

  • Автообновление модели/пакета
  • Управление пакетами (через pipenv)
  • Тестирование: модуль, API, для автообновления
  • Пакет утилит, который используется между наукой о данных и проектами API.

Большинство компонентов — это просто строительные блоки, которые вы можете заменить чем-то другим по вашему выбору, например, вы можете использовать простой файл requirements.txt вместо pipenv или продолжить работу без CD-конвейера и так далее.

Что будет дальше

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