07 · Serving-платформа7.1–7.7 · Runtime и оркестраторы7.1.1средний

Паттерны inference

Зачем это нужно

«Задеплоить модель» — не одна операция. Inference может быть синхронным REST, асинхронной очередью, batch job, edge on-device, streaming. Паттерн inference определяет latency, стоимость, сложность ops и выбор runtime (MLServer, Triton, vLLM — модули 7.2–7.6).

Начинающий MLE должен уметь сопоставить продуктовое требование («ответ за 100 ms») с архитектурой — до выбора Helm chart.

Основные идеи

Online (real-time) inference.

  • Клиент ждёт ответ в том же HTTP/gRPC запросе.

  • SLA: p95 latency, RPS, availability.

  • Runtime: MLServer, Triton, vLLM за KServe/Seldon.

  • Features: online store, in-request payload, или hybrid.

Batch inference.

  • Scoring миллионов строк по расписанию или ad hoc.

  • Latency: минуты–часы OK.

  • Spark, Argo Workflow + Python job, SQL UDF.

  • Output: table, Parquet, Kafka topic.

Async inference.

  • Request в очередь (Kafka, SQS), worker обрабатывает, результат polling/webhook.

  • Буфер пиков; сложнее UX и SLA.

Streaming inference.

  • Events in → model per event/micro-batch → events out.

  • Flink, Kafka Streams, Spark Streaming + embedded model (реже).

Edge / on-device.

  • Модель на телефоне, браузере (ONNX Runtime Web, TFLite).

  • MLOps: export pipeline, version compatibility — другой контур.

Multi-model и routing.

  • One gateway → route by model name/version/header.

  • A/B test: 90% v44, 10% v45 (canary — модуль 7.3 Seldon, 7.5 KServe).

Preprocessing placement.

Вариант Плюсы Минусы
In runtime (MLServer code) Один контейнер Coupling DS code
Sidecar transformer Separation Extra latency hop
Upstream feature service Reuse Network call
Embedded in client Lowest latency Version drift

Cold start vs warm pool.

  • Serverless scale-to-zero → cold start 10–60s (LLM — минуты).

  • Prod online: min replicas > 0, preload model at startup, readiness after load.

Sync pattern diagram (типичный MDP):

Client → Ingress/Istio → KServe InferenceService → MLServer/Triton Pod ↑ Feature lookup (Feast/Redis) optional in same Pod or sidecar

Как это выглядит на практике

Churn scoring (online). REST POST /v1/models/churn:predict, JSON features or entity_id only. p95 200 ms → MLServer + preloaded LightGBM, 2 replicas, HPA on CPU/RPS.

Recommendation refresh (batch). Nightly Spark: 10M users × 500 candidates → top-20 list to Redis. Mobile app reads cache — не ML inference per request.

LLM chatbot (online). OpenAI-compatible API, vLLM, GPU node pool, p95 2s acceptable, streaming tokens to client (SSE).

Выбор паттерна — checklist:

  1. User waits for response? → online vs batch.

  2. Peak RPS и burst factor?

  3. Model size / GPU need?

  4. Input size (text length, image MB)?

  5. Regulatory logging of each prediction?

Что сделать после занятия

  • Классифицируйте 3 сценария (из курса или жизни): online / batch / async.

  • Для online case выпишите целевой p95 и RPS.

  • Нарисуйте sync diagram для вашего capstone.

Официальные материалы