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

Излагането на вашия модел на машинно обучение като API с помощта на FastAPI може да бъде толкова просто, че ще ви изненада 🤯 и ще запомните, че всички източници и набор от данни ще бъдат налични в GitHub.

За този урок ще се нуждаем от поддържан ML модел, но не се притеснявайте 😉 можете да проверите моята друга публикация относно как да поддържате ML модел и да използвате .joblib файл

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

Първо, нека създадем нашата виртуална среда на Python, за да изолираме всичко, от което се нуждаем

Ако не знаете какво е „виртуална среда на Python“, отидете и проверете тази „удивителна публикация“ 😃

Нека го създадем и активираме

python3 -m venv venv
source venv/bin/activate

Инсталирайте необходимите пакети

pip install uvicorn fastapi joblib

Схемата CarUser 🚗

Ние ще бъдем „пидантични“ за слоя за валидиране на данни на нашия 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

Спомняте ли си любимия ни ML модел, наречен 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, използване на вече заредения ML модел за извършване на прогнозата и не на последно място връщане на резултата от прогнозата.

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-годишна жена.

Бум 💥 имаме нашето вълшебно предсказание 😱 в раздела, наречен „Отговорно тяло“

Изводи

Това е бърз и лесен начин за обслужване на ML модел като API. Не забравяйте, че за производствени среди трябва да вземете под внимание някои важни елементи като Auth, висока наличност, дросел, паралелност и други важни теми, за да направите своя API най-добрия досега.

Освен това със сигурност сте забелязали колко лесно и лесно е да конфигурирате FastAPI и страхотната функция за автоматично магическо ✨ генериране на документацията за нас 🤯

Бонус песен 📼

Можете да използвате услуги като heroku.com или fly.io, за да внедрите своя красив и мощен ML модел като API и да го споделите със света 🌎

Началният план за Heroku е 5 USD / месец, но за Fly първоначалният план е безплатен.