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

Будь то приложение для компьютерного зрения, обработки естественного языка или простая модель машинного обучения, этот код должен стать хорошей отправной точкой. Я изучил хорошие технологии, которые помогут легко масштабировать этот сервис и помогут в простом развертывании, такие как — Python Falcon, сервер Gunicorn, Docker, конечно же, Python anaconda.

Микросервис обработки данных (DSMS)

DSMS построен на Falcon API framework, который является самым быстрым API-фреймворком в веб-сервере Python Anaconda и Gunicorn, который намного лучше, чем базовый сервер в Flask.

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

Несколько архитектурных решений:

  1. Образ докера Basepy
    Идея создания базового образа докера Python заключается в том, чтобы все зависимости были загружены и готовы к использованию в одном месте. Если мы объединим это с основным файлом Dockerfile, то каждый раз, когда мы вносим изменения в код и собираем файл Docker, потребуется гораздо больше времени для повторной загрузки пакетов.
  2. Использование сервера Gunicorn WSGI вместо внутреннего сервера Flask дает нам более надежный веб-сервер.
  3. Чтобы связать несколько сервисов, таких как DSMS, MongoDB, ElasticSearch и т. д., я использовал файл docker-compose.yml, который можно запустить с помощью следующей команды:
# To start the services
docker-compose up 
# To stop the services
docker-compose down

Настройка DSMS

Установить с помощью Докера

# 1. Set things up by running setup.sh file
./setup.sh

# 2. Run Docker image
docker run -p 9000:9000 -t <docker_username>/dsms1:1.0.0

# 3. Run bash
docker run -it <docker_username>/dsms1:1.0.0 /bin/bash

Установить с нуля

# Create virtual environment (optional)
conda create -n dsms python=2.7
source activate dsms
# Install dependencies
pip install -r basepy/py/pip_requirements.txt
# Run the service
./run.sh

использование

curl -X POST http://0.0.0.0:9000/

curl -X POST http://0.0.0.0:9000/update -d '{"text":"Some text to be sent."}'

Весь код доступен на GitHub и может быть использован кем угодно. Предложения/реквесты приветствуются.

Узнайте больше о различных компонентах из соответствующих документов Falcon, Gunicorn, Anaconda.

Также загляните в мой личный блог: Diggdata.in

Ресурсы, которые стоит прочитать: