Model Serving
FastAPI, TorchServe, Triton, vLLM — деплой моделей, батчинг, кеширование.
Model Serving — ты натренировал модель, что дальше?
Загрузка интерактивного виджета...
Обучить модель — 10% работы. Настоящий вызов — отдавать предсказания 24/7 с латентностью < 100 мс, обрабатывая тысячи запросов в секунду. Model serving — это вся инфраструктура вокруг inference: API-сервер, батчинг запросов, кеширование, auto-scaling. Разберём от простого (FastAPI) до production-grade (Triton, vLLM).
FastAPI — самый простой и правильный старт
Для моделей на scikit-learn, CatBoost, LightGBM, маленьких нейронок — FastAPI закрывает 80% потребностей. Быстрый, асинхронный, автодокументация (Swagger) из коробки. Модель загружается один раз при старте, дальше просто отвечает на запросы. Для production используй gunicorn с несколькими workers: gunicorn app:app -w 4 -k uvicorn.workers.UvicornWorker.
from fastapi import FastAPI
from pydantic import BaseModel
import joblib, numpy as np
app = FastAPI(title="Churn Prediction API")
model = joblib.load("models/churn_model.pkl") # загружаем ОДИН РАЗ
class PredictRequest(BaseModel):
user_id: str
features: list[float]
@app.post("/predict")
async def predict(req: PredictRequest):
proba = model.predict_proba(
np.array(req.features).reshape(1, -1)
)[0][1]
return {"user_id": req.user_id, "churn_prob": round(proba, 4)}
@app.get("/health")
async def health():
return {"status": "ok", "model_version": "v2.3"}Triton и vLLM — production-grade serving
Когда FastAPI не хватает — есть специализированные inference-серверы. NVIDIA Triton поддерживает PyTorch, TensorFlow, ONNX, XGBoost, делает dynamic batching (собирает запросы за 1-10 мс в батч автоматически), работает на multi-GPU. Ты кладёшь модель в папку (model_repository/model_name/1/model.onnx), пишешь config.pbtxt — Triton делает остальное. Для LLM (GPT, LLaMA, Mistral) — vLLM: PagedAttention для эффективной GPU-памяти, continuous batching, OpenAI-совместимый API одной командой.
# vLLM — запуск LLM-сервера одной командой
python -m vllm.entrypoints.openai.api_server --model meta-llama/Meta-Llama-3--Instruct --tensor-parallel-size 2 --gpu-memory-utilization 0.9
# Клиент — стандартный OpenAI SDK, просто меняем base_url
# client = OpenAI(base_url="http://localhost:8000/v1")Оптимизации — как сделать inference быстрее
- Dynamic Batching — накапливаем запросы за 1-10 мс, обрабатываем одним батчем. GPU используется эффективнее
- ONNX Runtime — конвертируем модель в ONNX (torch.onnx.export), inference в 2-5× быстрее за счёт оптимизаций графа
- Кеширование — Redis для повторяющихся запросов. Одинаковые фичи → одинаковый ответ, GPU не нужен
- Quantization — INT8 вместо FP32: модель в 4× меньше, inference в 2-3× быстрее, потеря качества < 1%
- Model Distillation — маленькая модель учится у большой. 10× быстрее, 95% качества
💡 Как это в реальной работе
🎯 На собесе