BentoML — быстрый Machine Learning прототип

В заметке я расскажу как в 50 строчек Python кода создать рабочий прототип веб приложения с рабочей моделью машинного обучения. Представьте, что у вас есть классная идея проекта. Теперь нужно реализовать MVP (minimum viable product) и показать его менеджеру/партнеру/ инвестору или просто похвастаться перед друзьями.

Мы будем использовать BentoML. Это гибкая высокопроизводительная платформа, которая идеально подходит для создания MVP.

Возможности BentoML:

  • поддерживает несколько фреймворков машинного обучения, включая Tensorflow, PyTorch, Keras, XGBoost и другие.
  • собственное облачное развертывание с Docker, Kubernetes, AWS, Azure и многими другими
  • высокопроизводительное онлайн-обслуживание через API
  • веб-панели мониторинга и API для управления реестром моделей и развертыванием

Создадим MVP

Для начала скачайте свёрстанную страницу со стилями и картинками с репозитория. Теперь напишем runner.py. Мы будем делать демо для классической задачи классификации ирисов. Начнем с импорта библиотек:

from sklearn import svm
from sklearn import datasets 
from bentoml import env, artifacts, api, BentoService
from bentoml.adapters import DataframeInput
from bentoml.frameworks.sklearn import SklearnModelArtifact
from bentoml.adapters import DataframeInput
from bentoml.artifact import SklearnModelArtifact

Импортнем все нужные bento элементы: среду выполнения, артифакты, API, сервис для базовой модели и статичный контент.

from bentoml import (env,  # среда
                     artifacts, # артифакты
                     api, # общение с API
                     BentoService, # сервис для модели
                     web_static_content # статичный контент

Напишем наш класс классификатора. Будем получать данные батчами и делать предикт:

class Classifier(BentoService):
     @api(input=DataframeInput(), batch=True)
     def test(self, df):
         return self.artifacts.model.predict(df)

Ну и наконец напишем сам запуск нашего MVP:

if __name__ == "__main__":
     # Загрузим датасет и обучим простую модель
     iris = datasets.load_iris()  
     X, y = iris.data, iris.target
     clf = svm.SVC(gamma='scale')     
     clf.fit(X, y)
     # Инициализируем класс классификатора
     iris_classifier_service = Classifier()
     # Закинем модель в артифакт
     iris_classifier_service.pack('model', clf)
     # Сохраним и запустим 
     saved_path = iris_classifier_service.save()

Дальше начинается самое интересное. Запустим наш runner.py:

python runner.py

Создастся свой контейнер на подобие докера, который потом и надо будет вызвать последнюю версию контейнера:

bentoML start
bentoML start
bentoml serve Classifier:latest

Теперь по адресу http://127.0.0.1:5000 будет доступен наш MVP, где выбирая параметры ирисов будут делаться предсказания.

bentoML serve
bentoML serve

Docker

Готовый к развертыванию образ контейнера докера теперь можно создать с помощью всего одной команды:

bentoml containerize Classifier:latest -t my_prediction_service:v1 
docker run -p 5000:5000 my_prediction_service:v3 --workers 2

Заключение

В этой заметке мы рассмотрели очень простой инструмент, который отлично подходит для создания и демонстрации MVP.

Дополнительный материал

Ссылка на репозиторий с кодом из заметки

Мой курс анализ медицинских изображений в Python

Share it

Если вам понравилась заметка - подписывайтесь на мой канал в телеграме https://t.me/renat_alimbekov или вы можете поддержать меня Become a Patron!


Интересные записи в этой рубрике: