Data Scientist: от данных до деплоя моделейПодготовка модели к деплоюРазработка минимального FastAPI-сервиса

Разработка минимального 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-запрос.