Как интегрировать ML-модель в веб-сервис на Python?

«Как интегрировать ML-модель в веб-сервис на Python?» — вопрос из категории Архитектура, который задают на 10% собеседований Python Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Основной подход — обернуть ML-модель в REST API. Это позволяет другим сервисам отправлять данные для предсказания по стандартному протоколу HTTP.

Чаще всего для этой задачи используют фреймворки, такие как FastAPI или Flask, из-за их минимализма и высокой производительности.

Процесс интеграции:

  1. Сериализация модели: Обученная модель сохраняется в файл с помощью библиотек, таких как joblib или pickle.
  2. Создание API-эндпоинта: В веб-приложении создается маршрут (например, /predict), который принимает входные данные.
  3. Загрузка модели: Модель загружается из файла один раз при старте сервера, чтобы избежать задержек при обработке запросов.
  4. Предсказание и ответ: Сервис получает данные, передает их в модель для предсказания и возвращает результат в формате JSON.

Пример на FastAPI:

from fastapi import FastAPI
import joblib
from pydantic import BaseModel

# 1. Модель загружается при старте приложения
app = FastAPI()
model = joblib.load("models/iris_classifier.joblib")

# Pydantic модель для валидации входных данных
class ModelInput(BaseModel):
    sepal_length: float
    sepal_width: float
    petal_length: float
    petal_width: float

@app.post("/predict")
def predict(data: ModelInput):
    # Преобразование данных для модели
    features = [[data.sepal_length, data.sepal_width, data.petal_length, data.petal_width]]

    # 2. Получение предсказания
    prediction = model.predict(features)[0]

    # 3. Возврат результата
    return {"prediction": int(prediction)}

Важные аспекты для production:

  • Контейнеризация: Приложение и его зависимости упаковываются в Docker-контейнер для изоляции и простоты развертывания.
  • Асинхронность: Для тяжелых моделей, блокирующих event loop, вычисления выносят в отдельный поток (например, через run_in_threadpool в FastAPI).
  • Мониторинг: Логирование запросов и ответов для отслеживания производительности модели и обнаружения дрифта данных.