# ML trainin tool ## Доклад типа из одноклассников Видео - https://www.youtube.com/watch?v=6ETZn7gc_j8 Обычный сценарий ML Workflow ![](https://i.imgur.com/phw2CrT.png) Организация data registry (нужно глянуть туториал DVC по этому) ![](https://i.imgur.com/T6dFTa7.jpg) Если нажать на какую-то папку, то придем к тому как был получен этот датасет (с помощью автоматически генерируемого файла конфигурации). Для экспериментов есть также отдельный репозиторий, где прописываются все шаги для получения той или иной модели. ![](https://i.imgur.com/6iYk0gI.jpg) Также пайплайном может прописаться даже конвертация модели в TensorRT или OpenVino. Флов как происходит этот процесс: ![](https://i.imgur.com/wHcxvWv.jpg) 1) Для таски в джире создается ветка в репозитории. Делается коммит с обновлением файлов конфигурации. 2) CI при коммите обучает модель в облаке, коммитяться артифкаты и метрики. 3) После этого создается pull request (если модель хорошая) и коллеги ревьювят ее и решают запускать ли в релиз эту модель. 4) После апрува ветка мержиться в мастер и выполняется релиз. 5) После этого модель может улететь на прод/стейжин. В yaml файле прописывается пакет который на вход принимает конфиг и запускает тренировку. ![](https://i.imgur.com/K08P9aK.png) Весь тренировочный код в другом репозитории (не в репозитории экспериментов) оформлен в виде пакетов, которые можно будет повторно переиспользовать. ![](https://i.imgur.com/B9XgVjT.png) Также правильно создавать тесты и при мердже в мастер добавить возможность проверки тестов: ![](https://i.imgur.com/Q2etpop.jpg) Оценка качества модели осущесвляется с помощью MLflow. ![](https://i.imgur.com/BeHPRNQ.jpg) Позволяет записывать метрики эксперементов и сравнивавать их между собой. После попадания в мастер запускается тригер - Release, который обновляет версию в CI и заливает модель в model registry в MLflow. ![](https://i.imgur.com/ATAf7VR.png) В итоге разработка модели выглядит следующим образом: ![](https://i.imgur.com/WvyaXZ6.png) DEMO 1) Создается задача в джире. 2) Под нее создается ветка, делается коммит, а потом пул реквест. В pull request конфиги, dvc файлы, зависимости и ссылка на MLflow. ![](https://i.imgur.com/dEBUCN9.jpg) 3) В MLflow записаны все метрики, на основе которых было принято решение: ![](https://i.imgur.com/DYLxMYc.png) Там внутри MLflow сделали тулзу для просмотра результатов модели наглядно (Нужно посмотреть как сделать также): ![](https://i.imgur.com/n7I6j1s.jpg) 4) Я так понимаю моделька внутри MLflow сразу и деплоиться, так как производиться ее мониторинг в Grafane. Вопросы: 1) Какие тесты производятся? - Юнитесты которые проверяют простые штуки не на реальных данных; - Тестируется пайплайн, на более или менее нормальных данный он отработает и выдаст нужные артифакты. - Считаются метрики на отложенных выборках - Модель идет на прод, на нее натравливается основной трафик, но никакие решения не принимаются. Данные реальные складируются, раззмечаются и на их основе считаются метрики. Определяется насколько хорошо работает модель. 2) На какие задачи собраны пайплайны - В случае с изображениями, на каждый вид таски (классификация, распознование, object detectuin)- свой пайплайн. PLAN to investigate 1) Check DVC about creating data registry; 2) Create OWN git repo with some dataset like in OK approach. 3) How to create DVC dags (check totorials). 4) Investigate how to set up experiment repo and code repos. 5) Create one package for code repo. 6) Create code for making experiments in experiment repo. 7) Investigate MLflow in general 8) Investigate MLflow tracking 9) Save results of experiments in MLflow tracking 10) Investigate MLflow registry. 11) Set up CI in onrder to put trained model to Model registry. ## 1) DVC * чтобы добавить датасет в dvc версионирование, нужно просто использовать dvc add <name_dataset> * следующим образом можно настроить место хранение в dvc ``` dvc remote add -d storage s3://mybucket/dvcstore git add .dvc/config git commit -m "Configure remote storage" ``` * Чтобы залить файлы на удаленное хранилище, нужно юзать dvc push * Чтобы получить данный с хранилища, dvc pull * Когда были произведены изменения в датасете, нужно сделать dvc add, git commit, dvc push. * Чтобы загрузить датасет в другом репозитории, юзать можно следующую команду: ``` dvc get https://github.com/iterative/dataset-registry \ use-cases/cats-dogs ``` Or ![](https://i.imgur.com/EdXPbRt.png) DVC Pipeline Через dvc.yaml можно прописывать пайпланы и запускать их с помощью команды dvc repro. В конце каждого этапа формируется какой-то артефакт. Этот артефакт также сохраняется в dvc storage при dvc push. Любой другой человек может сделать dvc pull и получить все эти артефакты, хотя в гите они отображены не будут. Метрики ![](https://i.imgur.com/J9hdH9x.png) Можем указать метрики, которые хотим получить. Получить метрики можем следующей командой: ![](https://i.imgur.com/zBV7bVY.png) Может сравнить текущие метрики с метриками из последнего коммита ![](https://i.imgur.com/OgKScfU.png) То есть ты провел какой-то эксперимент, и сразу можешь сравнить его с коммитом который последний. Если н=лучше результаты, то можешь закоммитить его. Experiments Можем запустить эксперимент с другим параметром используя эту команду. ![](https://i.imgur.com/pFV0FX7.png) Глянуть разницу в экспериментах ![](https://i.imgur.com/KaMJQiT.png) Таким образом можем прописывать разные эксперименты ![](https://i.imgur.com/IJRuwgQ.png) И потом выполнить их командой ``` dvc exp run --run-all ``` Так можно будет просмотреть эксперименты: ![](https://i.imgur.com/1Db7rCk.png) С помощью следующей команды можем вернутся к эксперименту: ![](https://i.imgur.com/Lnh8a0J.png) Таким образом можно посмотреть все эксперименты ![](https://i.imgur.com/QhMhND4.png)