В заметке я расскажу как в 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 serve Classifier:latest
Теперь по адресу http://127.0.0.1:5000 будет доступен наш MVP, где выбирая параметры ирисов будут делаться предсказания.
Docker
Готовый к развертыванию образ контейнера докера теперь можно создать с помощью всего одной команды:
bentoml containerize Classifier:latest -t my_prediction_service:v1
docker run -p 5000:5000 my_prediction_service:v3 --workers 2
Заключение
В этой заметке мы рассмотрели очень простой инструмент, который отлично подходит для создания и демонстрации MVP.
Дополнительный материал
Ссылка на репозиторий с кодом из заметки
Мой курс анализ медицинских изображений в Python