Slide 1

Slide 1 text

Model-as-Service С нуля до Enterprise ready

Slide 2

Slide 2 text

MLOps-разработчик, создаю ML- инструменты, технологически развиваю рекомендательную платформу Сбера. @arsengumin [email protected] Whoami

Slide 3

Slide 3 text

3 3 Back-end MLTools Models, Services Интеграционные сервисы платформы User Go\Py Front-end RecSys Studio Web \ Airflow Channels Client Data user DS SDK Sber ReсSys Platform

Slide 4

Slide 4 text

Цель митапа Познакомить python разработчиков с ml online Рассмотреть инструментарий для сервинга моделей Узнать получше проблематику задачи ml online Показать MLOps\DS специалистам как можно улучшить их сценарии

Slide 5

Slide 5 text

1 Пререквизиты Проблема и задача от которой отталкиваемся

Slide 6

Slide 6 text

Результат разработки ML решения Метрика 1 Метрика 2 Метрика 3 Метрика 4 Эксперимент 1 4,5 2,3 1,7 5 Эксперимент 2 3,2 5,1 4,4 3 Эксперимент 3 2,1 1,7 2,5 2,8 Эксперимент 4 4,5 2,2 1,7 7

Slide 7

Slide 7 text

Как заработать на результате труда DS?

Slide 8

Slide 8 text

Offline режиме

Slide 9

Slide 9 text

Очень хочется основываясь на действиях пользователя в наших продуктах, сразу ему давать персональные предложения: • Кредитные продукты • Фильмы • Ecom • Музыка • … Постановка задачи

Slide 10

Slide 10 text

1 Первые шаги

Slide 11

Slide 11 text

Случайно узнаем про MLOps

Slide 12

Slide 12 text

• Saving and Serving Models • Tracking • Experiment Management • Reproducibility • Deployment Consistency • Model Management • Library Agnosticism 12 ML Platform

Slide 13

Slide 13 text

Open-Format Vendor File Extension License ML Tools & Platforms Support Human- readable Compression "almagination" − − − − − − ✓ PMML ✓ DMG .pmml AGPL R, Python, Spark ✓ (XML) ✘ PFA ✓ DMG JSON PFA-enabled runtime ✓ (JSON) ✘ ONNX ✓ SIG LFAI .onnx TF, CNTK, Core ML, MXNet, ML.NET − ✓ TF Serving Format ✓ Google .pf Tensor Flow ✘ g-zip Pickle Format ✓ .pkl scikit-learn ✘ g-zip JAR/ POJO ✓ .jar H2O ✘ ✓ HDF ✓ .h5 Keras ✘ ✓ MLEAP ✓ .jar/ .zip Spark, TF, scikit- learn ✘ g-zip Torch Script ✘ .pt PyTorch ✘ ✓ Apple .mlmodel ✘ Apple .mlmodel TensorFlow, scikit-learn, Core ML − ✓ Как хранить модели? И где?

Slide 14

Slide 14 text

Model Registry • Saving and Serving Models • Tracking • Experiment Management • Reproducibility • Deployment Consistency • Model Management • Library Agnosticism

Slide 15

Slide 15 text

Прямое решение @asynccontextmanager async def lifespan(app: FastAPI): app.state.model = load_model(...) yield app = FastAPI(lifespan=lifespan) @app.post("/v1/model/predict") def predict(x: List[List[float]]): outputs = app.state.model.predict(x) return outputs • Обучаем модель на исторических данных • Валидируем • Делаем pickle • Кладем модель в S3 • Или собираем модель сразу с сервисом • Пишем простой fastapi cервис • Кидаем все deployment/docker/systemd • Рассказываем всем формат входных данных

Slide 16

Slide 16 text

Ретроспектива решения • Быстро • Просто • Дешево • Что с метриками? • Что с масштабированием нагрузки • Что с auth? • Что с cloud native? • Framework agnostic? • Стандартизация? • GPU support • Бизнес правила • Поддержка стриминга

Slide 17

Slide 17 text

1 Начинается MLOps

Slide 18

Slide 18 text

Добавим терминов Serving\Inference Platform • Advanced deployment • Serverless • Графы моделей • Cloud native Inference server • REST / gRPC server • Model serving • Metrics • Inference Protocol

Slide 19

Slide 19 text

Model Serving Patterns 19 • Model-as-Service. • Model-as-Dependency • Precompute • Model-on-Demand • Hybrid-Serving • …

Slide 20

Slide 20 text

Model Serving Patterns 20 • Model-as-Service. • Model-as-Dependency • Precompute • Model-on-Demand • Hybrid-Serving • …

Slide 21

Slide 21 text

1 Road to cloud native

Slide 22

Slide 22 text

22 Все придумали за нас

Slide 23

Slide 23 text

23 Сохраним нашу модель def predict(model_input): return model_input.apply(lambda x: x * 2) with mlflow.start_run(): mlflow.pyfunc.log_model("model", python_model=predict, pip_requirements=[])

Slide 24

Slide 24 text

24 Развернем модель apiVersion: machinelearning.seldon.io/v1alpha2 kind: SeldonDeployment metadata: name: mlflow spec: name: wines predictors: - graph: children: [] implementation: MLFLOW_SERVER modelUri: s3://path/to/model name: classifier name: default replicas: 1 apiVersion: serving.kserve.io/v1beta1 kind: InferenceService metadata: name: mlflow-v2-wine-classifier spec: predictor: model: modelFormat: name: mlflow protocolVersion: v2 storageUri: s3://path/to/model

Slide 25

Slide 25 text

Autopilot model serving

Slide 26

Slide 26 text

Обратимся к лидерам рынка

Slide 27

Slide 27 text

1 Попытаемся улучшить

Slide 28

Slide 28 text

28 Onnx • Облегченные модели, без проблем с зависимостями • Доступ к оптимизациям OpenVino

Slide 29

Slide 29 text

29 HTTP/2 и gRPC • Модели могут гонять много данных по сети • Для запроса к модели, необходимо обратится к 3 разными сервисами

Slide 30

Slide 30 text

30 Service mesh

Slide 31

Slide 31 text

31 Inference servers • NVIDIA Triton Inference Server • TensorFlow Serving • TorchServe • BentoML • Roboflow Inference • KServe (formerly KFServing)

Slide 32

Slide 32 text

32 Спасибо за внимание Не успели поговорить: • Security • Multi tenant • Feature store • Streaming • Adaptive batching • GPU • Public cloud platforms @arsengumin [email protected]