Выйдите за рамки Jupyter Notebooks!
Введение
Вы разработали свою причудливую модель машинного обучения. И сейчас? Как другие люди могут с ним взаимодействовать? Оставлять его в блокноте Jupyter — не лучшее решение.
Но как это сделать? Есть много способов. AWS, Google Cloud, Beam — что угодно. Я знаю, вы, вероятно, не захотите тратить деньги на свой хобби-проект. Итак, где можно развернуть его бесплатно?
Что ж, хорошие новости: Render, PaaS, предлагает (щедрый) бесплатный уровень для ваших хобби-проектов. Когда я искал альтернативу Heroku, я нашел Render. Он зарекомендовал себя как лучший для хобби-проектов без затрат денег (здесь сломался студент 😢)
В этой статье я покажу вам, как легко настроить и развернуть ваши модели в Render. Мы будем использовать FastAPI и сериализованную модель из scikit-learn.
Исходный код можно найти на GitHub.
**Я не связан с Render**
Настройка нашего API машинного обучения
Для нашего варианта использования я уже обучил базовую модель LinearRegression
с помощью scikit-learn на наборе данных по жилищному строительству Калифорнии. Я использовал функцию total_rooms
только для прогнозирования median_house_value
. Наша цель — не оптимизировать нашу модель, а развернуть ее. Вы можете найти файл .joblib
в моем репозитории.
Сначала создайте общедоступный репозиторий GitHub и клонируйте его. Я назвал свой render-test-app
.
Затем установите необходимые пакеты ниже. Очень важно использовать точные версии, поскольку Render работает на Python 3.7.10
. Я уже пережил за тебя головную боль.
fastapi==0.103.1 scikit-learn==1.0.2 uvicorn==0.22.0
Нам понадобится uvicorn в качестве веб-сервера для FastAPI.
Создайте файл с именем main.py и определите следующие конечные точки:
#main.py import numpy as np from fastapi import FastAPI from joblib import load app = FastAPI() @app.get("/") async def root(): return {"greeting": "Hello World!"} @app.get("/predict") async def predict(total_rooms: int): model = load("model.joblib") prediction = model.predict(np.array(total_rooms).reshape(1,-1))[0] return {"prediction": prediction}