ML-приложение с FastAPI

Дмитрий Шурмакин — ML Engineer

ML-приложение с FastAPI

Наш МЛ-сервис представляет собой веб-приложение, которое предоставляет API для взаимодействия с моделью машинного обучения. Он позволяет пользователям отправлять запросы с данными для предсказания и получать результаты обратно.

Логика запуска:

При запуске приложение инициализирует FastAPI, который обеспечивает обработку HTTP-запросов. Приложение также подключается к модели машинного обучения и загружает ее в память для использования при предсказаниях.

Вариант архитектуры сервиса:

Архитектура нашего МЛ-сервиса будет включать следующие компоненты:

  1. FastAPI: Принимает входные данные от клиентов и возвращает предсказания модели.
  2. Модель машинного обучения: Обученная модель, которая используется для предсказания результатов на основе входных данных, набор функций для обработки данных, использования весов модели и т.д.. Модель может быть загружена в память при запуске сервиса и используется для выполнения предсказаний.
  3. Роуты API: Определяют конечные точки API и связывают их с соответствующими обработчиками запросов. Включают роуты для проверки состояния сервиса, отправки запросов на предсказание и другие необходимые операции.
  4. Возможность контейнеризации с помощью Docker для обеспечения простоты развертывания и масштабируемости.
  5. Возможность мониторинга состояния сервиса с помощью роута для проверки состояния.

Пример реализации проекта

.
├── .docker
│   └── Dockerfile          # Файл Dockerfile для создания образа контейнера
├── pyproject.toml          # Файл с зависимостями и настройками проекта
├── .env                    # Файл с переменными окружения
├── docker-compose.yml      # Файл для управления контейнерами Docker
└── src
    ├── app.py              # Основной файл приложения, инициализация FastAPI
    ├── api                 # Пакет с API роутами
    │   ├── __init__.py     # Инициализация пакета
    │   ├── routes          # Пакет с маршрутами API
    │   │   ├── __init__.py # Инициализация пакета маршрутов
    │   │   ├── healthcheck.py  # Роут для проверки состояния сервиса
    │   │   ├── predict.py  # Роут для предсказаний модели
    │   │   └── router.py   # Основной маршрутизатор
    ├── schemas             # Пакет с моделями данных
    │   ├── __init__.py     # Инициализация пакета
    │   ├── healthcheck.py  # Модель для ответов состояния сервиса
    │   └── requests.py     # Модель для входных запросов к API
    └── services            # Пакет с бизнес-логикой
        ├── __init__.py     # Инициализация пакета
        ├── model.py        # Логика работы с моделью машинного обучения
        └── utils.py        # Вспомогательные утилиты

Описание каталогов и файлов

  • pyproject.toml: Файл конфигурации проекта, включающий зависимости и настройки проекта.
  • src: Каталог, содержащий весь исходный код проекта.
  • app.py: Основной файл приложения, в котором инициализируется FastAPI и связываются роуты API с соответствующими функциями обработчиками.
  • api: Пакет, содержащий всю логику API.
  • api/routes: Пакет, содержащий модули с маршрутами API.
  • api/routes/healthcheck.py: Модуль, содержащий роут для проверки состояния сервиса.
  • api/routes/predict.py: Модуль, содержащий роут для предсказаний модели.
  • api/routes/router.py: Основной маршрутизатор, который объединяет все маршруты API.
  • schemas: Пакет, содержащий модели данных.
  • schemas/healthcheck.py: Модель ответов состояния сервиса.
  • schemas/requests.py: Модель для входных запросов к API.
  • services: Пакет, содержащий бизнес-логику приложения.
  • services/model.py: Модуль, содержащий логику работы с моделью машинного обучения.
  • services/utils.py: Вспомогательные утилиты, используемые в сервисе.
  • .docker/Dockerfile: Файл Dockerfile для создания образа контейнера, содержащего все необходимые зависимости для запуска приложения.
  • .env: Файл с переменными окружения, используемыми при запуске контейнера Docker. Может содержать, например, параметры конфигурации приложения или секретные ключи.
  • docker-compose.yml: Файл для управления контейнерами Docker, определяющий сервисы, их зависимости и параметры запуска.