ML: страх и ненависть в продакшне

Паша Финкельштейн, JetBrains

Михаил Марюфич, OK.ru

О себе

  • 14 лет в IT
  • 11 в разработке с разных концов
  • 2 года в DE
  • Из них год в Big Data Tools *

*Big Data Tools — инструмент для упрощения жизни дата инженеров

@asm0di0 @mikhailmar @SmartDataCon

Михаил Марюфич

  • Закончил Мат-Мех СПбГУ и Computer Science Center

  • Machine Learning Engineer в OK.ru

  • Делаю МЛ штуки и внедряю их в продакшен

  • Увлекаюсь воспроизводимостью

@asm0di0 @mikhailmar @SmartDataCon

Это доклад о том, что такое MLOps, зачем он нужен и как можно попробовать его делать

Концепции общие, инструменты меняются

@asm0di0 @mikhailmar @SmartDataCon

О древнейшей истории

  • Буча началась с гиганта
  • И гигантом был Google

https://papers.nips.cc/paper/5656-hidden-technical-debt-in-machine-learning-systems.pdf

@asm0di0 @mikhailmar @SmartDataCon
@asm0di0 @mikhailmar @SmartDataCon
@asm0di0 @mikhailmar @SmartDataCon

Мы все неправы!

Google

Потому что не продуктивизируем свой ML код.

@asm0di0 @mikhailmar @SmartDataCon
@asm0di0 @mikhailmar @SmartDataCon

DevOps для обычной разработки

Тем временем в обычной разработке

  • Инструментов тонна
  • Все знают, как продуктизировать разработку
  • Все понимают, где светлое будущее

И конечно же вокруг этого навёрнута тонна практик

@asm0di0 @mikhailmar @SmartDataCon

DevOps isn’t about tools, but about how teams work together

Новая книга про анти-паттерны Ops и решения DevOps

@asm0di0 @mikhailmar @SmartDataCon

Так что, MLOps — это просто DevOps?

Нет!

@asm0di0 @mikhailmar @SmartDataCon
@asm0di0 @mikhailmar @SmartDataCon

MLOps — это ещё одна ступень специализации

@asm0di0 @mikhailmar @SmartDataCon

Как устроен ML

shadow

@asm0di0 @mikhailmar @SmartDataCon

А кто такие дата саентисты?

  • Data — данные, тут всё понятно.
    • копаются в реке и находят золото
  • Scientists — учёные. Экспериментаторы
@asm0di0 @mikhailmar @SmartDataCon

Роли в ML разработке

@asm0di0 @mikhailmar @SmartDataCon

Требования к эксперименту

  • Формулирование гипотезы
  • Описание специфических условий
  • Воспроизводимость
  • Протоколирование
@asm0di0 @mikhailmar @SmartDataCon

MLOps — это это способ сделать эксперименты научным, а не наколеночным

Эйнштейн

@asm0di0 @mikhailmar @SmartDataCon

Я всегда верю цитатам в интернете

Курт Кобейн

@asm0di0 @mikhailmar @SmartDataCon

Как устроен ML

@asm0di0 @mikhailmar @SmartDataCon

ML workflow

@asm0di0 @mikhailmar @SmartDataCon

А чем ПРИНЦИПИАЛЬНО отличается от DEVOPS?

@asm0di0 @mikhailmar @SmartDataCon
@asm0di0 @mikhailmar @SmartDataCon

Это же билд!

@asm0di0 @mikhailmar @SmartDataCon

Это же билд!







PS: только очень сложный
@asm0di0 @mikhailmar @SmartDataCon

Что тут пошло не так?

  • Всё одним куском
  • Протокола эксперимента нет
  • Информации об исходных данных нет
  • Результаты меняются от запуска к запуску
@asm0di0 @mikhailmar @SmartDataCon

Что делать?

@asm0di0 @mikhailmar @SmartDataCon

Разве это не очевидно?

НЕТ!

@asm0di0 @mikhailmar @SmartDataCon

Jupyter

@asm0di0 @mikhailmar @SmartDataCon

Jupyter

  • Самый популярный (и достаточно удобный) инструмент Data Scientist'а
  • Код вперемешку с Markdown
  • Написан и исполняется в непредсказуемом порядке
@asm0di0 @mikhailmar @SmartDataCon

Придётся переучивать

@asm0di0 @mikhailmar @SmartDataCon
@asm0di0 @mikhailmar @SmartDataCon

DVC

  • Создавался специально в пару к гиту
  • Изначально был похож на LFS (git-lfs)
  • Оброс функциональностью
@asm0di0 @mikhailmar @SmartDataCon

Примеры

git add
dvc add

Добавить какой-то файл под контроль git/dvc

@asm0di0 @mikhailmar @SmartDataCon

Примеры

git commit
dvc commit

Сохранить состояние файла

@asm0di0 @mikhailmar @SmartDataCon

Примеры

git diff
dvc diff

Посмотреть разницу с каким-то состоянием

@asm0di0 @mikhailmar @SmartDataCon
@asm0di0 @mikhailmar @SmartDataCon

The talk is cheap

Show us the demo!

@asm0di0 @mikhailmar @SmartDataCon

Ок, но это консоль

  • Молодёжь 👴 не любит терминалы
  • Этим неудобно пользоваться при командной разработке
  • Тимлиду может быть неудобно работать с метриками
@asm0di0 @mikhailmar @SmartDataCon

PR - это очень удобно

@asm0di0 @mikhailmar @SmartDataCon

Easy

@asm0di0 @mikhailmar @SmartDataCon

MLFlow Tracking

@asm0di0 @mikhailmar @SmartDataCon

MLFlow Tracking - сравнение запусков

@asm0di0 @mikhailmar @SmartDataCon

MLFlow Tracking - сравнение запусков

@asm0di0 @mikhailmar @SmartDataCon

MLFLOW MODEL REGISTRY

@asm0di0 @mikhailmar @SmartDataCon

Как модель там окажется?

@asm0di0 @mikhailmar @SmartDataCon

Как модель там окажется?

from mlflow.tracking import MlflowClient

client = MlflowClient()
client.create_registered_model("sk-learn-random-forest-reg-model")
client = MlflowClient()
result = client.create_model_version(
    name="sk-learn-random-forest-reg-model",
    source="mlruns/0/d16076a3ec534311817565e6527539c0/artifacts/sklearn-model",
    run_id="d16076a3ec534311817565e6527539c0"
)
@asm0di0 @mikhailmar @SmartDataCon

Что дальше?

  • У нас есть модельки
  • У нас есть каталог моделек
  • Тестируем!
@asm0di0 @mikhailmar @SmartDataCon

Тестируем

Мы уже знаем всё, что надо знать про модельки:

  1. Среднеквадратичное отклонение
  2. Коэффициент детерминации
  3. Метрики, специфичные для нашей модели

Всё это можно делать в целом в любом CI!

@asm0di0 @mikhailmar @SmartDataCon
@asm0di0 @mikhailmar @SmartDataCon

Serve

  • Есть ML MODEL - это бинарник (.pkl, .pth, .h5)
  • Нужно делать к ней запросы
@asm0di0 @mikhailmar @SmartDataCon

Serve

  • Есть ML MODEL - это бинарник (.pkl, .pth, .h5)
  • Нужно делать к ней запросы
  • И каждый стремится написать свой велосипед =(
@asm0di0 @mikhailmar @SmartDataCon

MLFLOW SERVING

@asm0di0 @mikhailmar @SmartDataCon
@asm0di0 @mikhailmar @SmartDataCon

Show us the demo!

@asm0di0 @mikhailmar @SmartDataCon

Мониторинг

2 типа инструментов:

  1. ML-Специфичные
  2. Общие
@asm0di0 @mikhailmar @SmartDataCon

MLWatcher

  • range, mean, std, median, q25, q50, q75, iqr for any continuous values (probabilities, features)
  • count, frequency for any discrete values (labels, classes)

Python-агент, который позволяет мониторить статистические метрики

Sampling

@asm0di0 @mikhailmar @SmartDataCon

Пример

Метрики улетают когда цвета внезапно инвертируются

@asm0di0 @mikhailmar @SmartDataCon

Использование

  1. Уложить MLWatcher рядом со своим приложением 😱
  2. Поднять сервер
  3. Начать с определённой частотой репортить метрики на сервер
@asm0di0 @mikhailmar @SmartDataCon

Общие метрики

Мониторить параметры модели - мало

Надо мониторить

  1. Системный метрики
    1.1. la
    1.2. free
    1.3. latency…
  2. Бизнес-метрики модели (например потерянные клиенты)
@asm0di0 @mikhailmar @SmartDataCon

Инструменты

  • Prometheus
  • Grafana
  • Zabbix etc
@asm0di0 @mikhailmar @SmartDataCon
@asm0di0 @mikhailmar @SmartDataCon

Мониторинг — важнейшая часть продуктивизированного ML

Без него не имеет смысла вообще продуктивизировать — будет непредсказуемо

@asm0di0 @mikhailmar @SmartDataCon

Чему мы научились

  1. MLOps — это процессы и командное взаимодействие
  2. Чтобы построить MLOps надо иметь базовый набор инструментов
  3. Кроме стандартных инструментов есть и непривычные: DVC, MLFlow
  4. Продуктивизация ML — это большой путь, который надо пройти
@asm0di0 @mikhailmar @SmartDataCon

QA

Паша Финкельштейн: if (🐦) @asm0di0 else @asm0dey
Михаил Марюфич: @mikhailmar