<style>
.reveal {
font-size: 28px;
}
/* .reveal p {
text-align: left;
} */
.reveal section img {
background:none;
border:none;
box-shadow:none;
}
</style>
# Monitoring Machine Learning Models in Production
<!-- [v1] -->
Филиппова Ольга
DMIA Production ML :rocket: весна 2021
[TOC]
---
## Three pillars of observability
- **Metrics** <--- эта лекция
- Tracing
- Logs
---
## Мотивация

https://storage.googleapis.com/pub-tools-public-publication-data/pdf/0d556e45afc54afeb2eb6b51a9bc1827b9961ff4.pdf
---
## Что особенного в мониторинге ML системы?
Мониторинг ML системы состоит из двух частей:
- Service health - совпадает с мониторингом любого ИТ сервиса
- Model health - проверка на то, что модель в проде делает **полезные** предсказания
---
## Software systems monitoring
- RED method (Rate, Errors, Duration)
- USE method (Utilization, Saturation и Errors)
- The Four Golden Signals by Google (Latency, Traffic, Errors, Saturation)
- …
https://nklya.medium.com/ключевые-метрики-в-мониторинге-b6f184cf1154
---
## ML systems monitoring
- Data monitoring
- Model monitoring
---
## Data monitoring
- что-то изменили в схеме данных
- один из источников данных внезапно отвалился
- пришла только часть данных или неправильные данные
---
## Data monitoring
Что можно проверить?
* Совпадают ли типы данных?
* Не изменилась ли доля пропусков в данных?
* Значения признаков остались в "нормальном" диапазоне: Появились ли новые категории? Непрерывные признаки принимают значения, которых модель раньше не видела?
* Изменились ли статистики по признакам, распределение признаков?
---
## Model monitoring
- Shifts in the environment
- Changes in customers behavior
- Adversarial scenarios
---
## Model monitoring
Что можно проверить?
- Control ML quality metrics
- Compare model prediction distributions with statistical tests:
- Basic statistics
- Full-blown statistical tests
---
## Key Monitoring-Related Principles from the Papers
- Dependency changes result in [a] notification
- Data invariants hold in training and serving inputs, i.e. monitor Training/Serving Skew
- Training and serving features compute the same values
- Models are not too stale
- The model is numerically stable
- The model has not experienced dramatic or slow-leak regressions in training speed, serving latency, throughput, or RAM usage
- The model has not experienced a regression in prediction quality on served data
---
## Если вы только задумались о мониторинге
- даже базовый мониторинг лучше чем его отсутствие
- думайте о своей задаче
- следите за блогами стартапов
---

---
## Prometheus

https://prometheus.io/docs/introduction/overview/
---
## Prometheus

---
## В чем особенность Prometheus?
**push mechanism**
примеры: Amazon watch, New relic, etc
Нюансы:
- на каждый объект, который нужно отслеживать (target) необходимо установить ПО которое будет отправлять push запросы
- Если необходимо отслеживать много микросервисов и каждый из них отправляет данные в систему мониторинга, может возникнуть высоконагруженный трафик и система мониторигна становится узким местом. (инфраструктура перегружена постоянными push запросами)
- если мы перестали получать метрики от сервиса, это не может однозначно трактоваться как остановка сервиса (может что-то с сетью, или потерялся пакет, итд)
---
## В чем особенность Prometheus?
**pull mechanism**
Нюансы:
- нет неопределенности, которая возникает в push mechanism системах, если запрос не пришел
- мы можем регулировать нагрузку на сеть
- микросервисы для работы с Prometheus должны иметь endpoint, кроме того для многих решений есть готовые exporters (об этом дальше)
- если нам критична точность и мы хотим учитывать каждое значение метрики, pull mechanism не лучший выбор
---
## Что может мониторить Prometheus?

---
## Типы метрик
- counter - счетчики (the number of requests served, tasks completed, or errors)
- gauge - число которое может увеличиваться или уменьшаться (temperatures, current memory usage, but also "counts" that can go up and down, like the number of concurrent requests)
- Histogram - histograms, quantiles are calculated on the Prometheus server(request durations or response sizes)
- Summary - histograms, quantiles are calculated on the application server
https://prometheus.io/docs/practices/histograms/
---
## Как все устроено?

---
## Как все устроено?

---
## Как все устроено?

---
## Как задать что и с какой частотой мониторить?
```powershell=
# my global config
global:
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
# scrape_timeout is set to the global default (10s).
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['localhost:9090']
```
---
## Что делать с метриками?

---
## Grafana

allows you to query, visualize, alert on and understand your metrics no matter where they are stored
---
## Grafana
- позволяет легко делать дашборды
- комбинировать на них данные из разных источников (можно на графиках по метрикам из Prometheus нанести события из логов, собранных в Loki)
- совместима с множеством источников
- позволяет настраивать alerts
---
## Полезные ссылки
https://christophergs.com/machine%20learning/2020/03/14/how-to-monitor-machine-learning-models/
https://evidentlyai.com/blog
https://www.youtube.com/watch?v=h4Sl21AKiDg
{"metaMigratedAt":"2023-06-15T19:18:35.899Z","metaMigratedFrom":"YAML","title":"Monitoring Machine Learning Models in Production","breaks":true,"slideOptions":"{\"theme\":\"white\",\"transition\":\"slide\"}","contributors":"[{\"id\":\"e0bc91de-98f7-46f8-a3a9-852912833a93\",\"add\":806,\"del\":372},{\"id\":\"6045d9a3-720e-430a-aedb-7786a9a0f1cc\",\"add\":10544,\"del\":4434}]"}