<style>
.reveal {
font-size: 28px;
}
/* .reveal p {
text-align: left;
} */
.reveal section img {
background:none;
border:none;
box-shadow:none;
}
v=1.1
</style>
# Воспроизводимость, трекинг и сравнение экспериментов
Глеб Ерофеев
DMIA Production ML :rocket: весна 2021
[TOC]
---
## Почему нужна воспроизводимость
* Наука и научный метод
* Постановка эксперимента в науке
* Дизайн эксперимента
* Принятие/непринятие гипотезы или новый эксперимент
* Как это применимо в реальных ML системах
---
## Примеры когда воспроизводимость выручает
* Пример: Выход на продакшен
* Создали и обучили модель
* Проверили локально - все ок
* Выкатили на прод - все запускается
* Пользователи не довольны - не то
* Сравниваем локальную модель с продакшен - результаты по метрике разные
* Пример: Проблема в продакшен
* Новый сценарий, которого не было при создании модели. На нём модель ломается в продакшен.
* Что бы исправить, нужно воспроизвести и отладить проблему в Dev окружении
---
## Что мешает воспроизводимости и как с этим бороться
* Фиксируем данные (на которых учим модель)
* Фиксируем random state - везде где это применимо
* Фиксируем фичи (и пайплайн их подготовки)
* Фиксируем модель (обучение и инференс)
* Фиксируем код обучения и инференса
* Фиксируем окружение (библиотеки и их версии)
NB: некоторые операции в GPU CuDNN не детерминированны по умолчанию - эту настройку необходимо фиксировать (https://towardsdatascience.com/reproducible-model-training-deep-dive-2a4988d69031)
* pytorch ```torch.set_deterministic()```
* tensorflow
```
pip install tensorflow-determinism; export TF_DETERMINISTIC_OPS=1
```
* Особенности работы на кластере
---
## MLOps vs Управление моделями vs Управление экспериментами

---
## Инструменты помогающие обеспечить воспроизводимость
* [Optuna](https://optuna.readthedocs.io/) - нет визуализации, удобно для персонального использования
* [MLFlow](https://mlflow.org/) - если готовы к DevOps
* [Neptune](https://neptune.ai/) - Хорошее решение из коробки (для команды нужна платная версия)
* [W&B](https://www.wandb.com/) - Хорошее решение из коробки (сравнимо с Neptune)
* [Tensorboard](https://www.tensorflow.org/tensorboard) - Для персонального использования
* [Kuberflow](https://www.kubeflow.org/) - если вы на GCP
* [SageMaker](https://aws.amazon.com/blogs/aws/amazon-sagemaker-studio-the-first-fully-integrated-development-environment-for-machine-learning/) - если вы на Amazon
[Сравнение](https://neptune.ai/blog/best-ml-experiment-tracking-tools)
---
## Пример использования
```
# Регистрируемся на neptune.ai, получаем токен
!pip install neptune-client
import neptune
neptune.init(project_qualified_name='my_workspace/my_project',
api_token='', Ваш токен
)
# Определяем параметры - например для RFC из sklearn:
params = {'n_estimators': 10,
'max_depth': 3,
'min_samples_leaf': 1,
'min_samples_split': 2,
'max_features': 3,
}
# Создаем эксперимент
neptune.create_experiment(name='my_study', params=params)
# Пришем метрику
neptune.log_metric('train_f1', train_f1)
neptune.log_metric('test_f1', test_f1)
# После завершения эксперимента - закрываем проект (Если запускали из notebook)
neptune.stop()
```
---
## Резюме
* Воспроизводимость
* Данные
* Рандом стейты
* Код
* Гиперпараметры
* Результат - метрики
* Трекинг экспериментов
* Оценка качества моделей - метрики и параметры
* Подбор гиперпараметров
* Тестирвание моделей в стейдж и продакшен
---
## Семинар
* Регистрируемся на neptune.ai
* Получаем код
* Воспроизводим эесперимент на готовом ноутбуке (очистка + TFIDF + LogReg)
* Расширяем возможности трекинга
* Задание - анализ и подбор параметров
{"metaMigratedAt":"2023-06-15T18:11:25.773Z","metaMigratedFrom":"YAML","title":"Воспроизводимость, трекинг и сравнение экспериментов","breaks":false,"slideOptions":"{\"theme\":\"white\",\"transition\":\"slide\"}","contributors":"[{\"id\":\"e0bc91de-98f7-46f8-a3a9-852912833a93\",\"add\":106,\"del\":47},{\"id\":\"38b0f324-6648-4b08-b1c3-8bc762b8ab7b\",\"add\":9592,\"del\":5717}]"}