Разработка минимального FastAPI-сервиса
Уроки курсаРазработка минимального FastAPI-сервиса
Разработка минимального FastAPI-сервиса
На предыдущем уроке мы обучили модель и сохранили её в файл — получили model.pkl, готовый к использованию. Теперь задача — не просто загрузить этот файл в скрипте, а превратить модель в настоящий HTTP-сервис, к которому можно обращаться из любого приложения. Для этого нам понадобится FastAPI.
1. FastAPI как фреймворк для ML-сервисов
FastAPI — это Python-фреймворк для создания HTTP API, который за последние несколько лет стал стандартом де-факто для обёртки ML-моделей. Причина проста: он решает сразу несколько задач, которые в других фреймворках приходится решать вручную. Во-первых, FastAPI строит на Pydantic: любой входящий JSON автоматически валидируется по заданной схеме, и если данные не соответствуют ожидаемому формату, сервер сам вернёт понятное сообщение об ошибке — без единой строчки проверочного кода с вашей стороны. Во-вторых, FastAPI автоматически генерирует OpenAPI-документацию. После запуска сервера по адресу /docs открывается интерактивный интерфейс, где можно сразу протестировать эндпоинты — это удобно и для разработки, и для передачи API другим командам. В-третьих, FastAPI построен на ASGI и работает через uvicorn — асинхронный сервер, который обрабатывает запросы эффективнее классического WSGI (как в Flask). Для ML-сервиса это особенно актуально: предикт может занимать время, и блокировать всё приложение на один запрос — расточительно. Установка минимальна:
pip install fastapi uvicorn
Минимальное приложение выглядит так:
from fastapi import FastAPI
app = FastAPI()
@app.get("/health")
def health():
return {"status": "ok"}
Запускается командой:
uvicorn main:app --host 0.0.0.0 --port 8000
После этого GET-запрос на http://127.0.0.1:8000/health вернёт {"status": "ok"}, а /docs откроет автодокументацию. Для ML-задачи такая архитектура выглядит органично: модель живёт на сервере, клиент присылает признаки в JSON, сервер возвращает предсказание. Никаких ноутбуков, никакого ручного запуска скрипта — просто HTTP-запрос.
