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