Зачем это нужно
«Задеплоить модель» — не одна операция. 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:
User waits for response? → online vs batch.
Peak RPS и burst factor?
Model size / GPU need?
Input size (text length, image MB)?
Regulatory logging of each prediction?
Что сделать после занятия
Классифицируйте 3 сценария (из курса или жизни): online / batch / async.
Для online case выпишите целевой p95 и RPS.
Нарисуйте sync diagram для вашего capstone.