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