Представьте, что ваша модель машинного обучения используется другими членами команды/клиентами в качестве API без Jupyter Notebook 📕. Именно здесь FastAPI врывается в дело, чтобы спасти положение.

Представление вашей модели машинного обучения в виде API с помощью FastAPI может быть настолько простым, что это поразит вас 🤯и помните, что все источники и набор данных будут доступны в GitHub.

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

Практический 🚀

Прежде всего, давайте создадим нашу виртуальную среду Python, чтобы изолировать все, что нам нужно.

Если вы не знаете, что такое виртуальная среда Python, посмотрите этот потрясающий пост 😃

Давайте создадим его и активируем

python3 -m venv venv
source venv/bin/activate

Установите необходимые пакеты

pip install uvicorn fastapi joblib

Схема CarUser 🚗

Мы будем pydantic для уровня проверки данных нашего API, эта библиотека поможет предотвратить предоставление пользователем неправильных параметров в вызове API.

Создайте файл CarUser.py со следующим содержимым:

from pydantic import BaseModel

class CarUser(BaseModel):
  age: int
  gender: int

Приложение 🤓

Давайте напишем код на Python для файла app.py, это будет основной файл для нашего API.

import uvicorn
from fastapi import FastAPI
import joblib
from CarUser import CarUser

app = FastAPI()
joblib_in = open("car-recommender.joblib","rb")
model=joblib.load(joblib_in)


@app.get('/')
def index():
    return {'message': 'Cars Recommender ML API'}

@app.post('/car/predict')
def predict_car_type(data:CarUser):
    data = data.dict()
    age=data['age']
    gender=data['gender']

    prediction = model.predict([[age, gender]])
    
    return {
        'prediction': prediction[0]
    }

if __name__ == '__main__':
    uvicorn.run(app, host='127.0.0.1', port=8000)

Расшифруй код 🔍

Проверка данных с помощью pydantic импортируется здесь:

from CarUser import CarUser

Помните нашу любимую модель машинного обучения под названием car-recommender.joblib? хорошо, теперь читается и загружается, как показано ниже

joblib_in = open("car-recommender.joblib","rb")
model=joblib.load(joblib_in)

Отвечает на все петиции в корень/индекс API сообщением «Cars Recommender ML API» в формате JSON.

@app.get('/')
def index():
    return {'message': 'Cars Recommender ML API'}

В этом разделе мы указываем конечную точку API, где пользователю необходимо выполнить петицию https://api.com/car/predict с использованием HTTP-метода POST.

@app.post('/car/predict')

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

def predict_car_type(data:CarUser):
    data = data.dict()
    age=data['age']
    gender=data['gender']

    prediction = model.predict([[age, gender]])
    
    return {
        'prediction': prediction[0]
    }

Время раскрутить API 🔥

Для запуска API выполните следующую команду в терминале

uvicorn app:app

Вывод должен выглядеть следующим образом, указывая на то, что API запущен и работает на порту 8000.

Если вы перейдете по адресу http://127.0.0.1:8000 в своем любимом веб-браузере, вы увидите что-то вроде этого

А так же если зайти на https://127.0.0.1:8000/docs вы увидите что-то потрясающее

FastAPI сгенерировал для нас всю документацию API 📚 🎉

Теперь давайте выполним вызов API с запросом прогноза, давайте спросим, ​​какой тип автомобиля предпочитает 22-летняя женщина.

Бум 💥 у нас есть наше волшебное предсказание 😱 в разделе «Тело ответа»

Выводы

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

Также вы наверняка заметили, как легко и просто настроить FastAPI и замечательную функцию автоматического ✨ волшебного создания документации для нас 🤯

Бонусный трек 📼

Вы можете использовать такие сервисы, как heroku.com или fly.io, чтобы развернуть свою красивую и мощную модель машинного обучения в качестве API и поделиться ею со всем миром 🌎

Стартовый план для Heroku стоит 5 долларов США в месяц, а для Fly начальный план бесплатный.