Перевод статьи подготовлен совместно с Моргуновой Анной, за что ей огромное спасибо ???? Другие материалы ML REPA и ссылки на видео митапов и конференций можно найти в открытой странице в Notion.
Обзор
???? Алгоритмы машинного обучения раздвигают границы человеческих знаний. Управление версиями экспериментов сочетает в себе отслеживание эксперимента и управление версиями кода. Вы можете просматривать, сравнивать и восстанавливать их в любое время.
Автор: Dave Berenbaum • December 07, 2021.
Оригинал: Don't Just Track Your ML Experiments, Version Them.
Не просто отслеживайте свои эксперименты с машинным обучением, а версионируйте их
Управление версиями экспериментов машинного обучения выводит трекинг экспериментов на новый уровень, за счёт преимущества контроля версий. Отслеживайте и версионируйте как код, вносите пошаговые обновления постепенно и держите все распределённым, чтобы делиться, как хотите.
Инструменты отслеживания экспериментов помогают управлять проектами машинного обучения там, где инструментов контроля версий, таких как Git, недостаточно. Они регистрируют параметры и метрики, а также хранят такие артефакты, как входные данные или веса моделей, чтобы вы могли воспроизводить эксперименты и извлекать результаты. Они также предоставляют панель инструментов (dashboard) для навигации по всей этой метаинформации через множества экспериментов.
Git не может управлять или сравнивать всю эту экспериментальную метаинформацию, а все же лучше подходит для кода. Такие инструменты, как GitHub, упрощают распределенную совместную работу, и вы можете видеть инкрементальные изменения кода. Вот почему в экспериментах разделяют Git для кода и инструменты отслеживания экспериментов для метаинформации (обычно со ссылкой друг на друга для отслеживания).
Управление версиями экспериментов машинного обучения сочетает в себе отслеживание экспериментов и контроль версий. Вместо того, чтобы управлять ими по отдельности, храните все в одном месте и пользуйтесь преимуществами обоих, например:
Эксперименты как код: отслеживайте метаинформацию в репозитории и версионируйте ее как код.
Воспроизводимость версий : сохраняйте и восстанавливайте состояние эксперимента, а также отслеживайте изменения, чтобы выполнять только то, что является новым.
Распределенные эксперименты: настройте запуск и сохранение экспериментов локально, запускайте распределенные из одного репозитория.
ML эксперименты как код
Управление версиями экспериментов рассматривает эксперименты как код. DVC сохраняет все метрики, гиперпараметры и информацию об артефактах в текстовых файлах, версии которых могут быть изменены Git (DVC создаёт бэкапы самих артефактов и сохраняет их отдельно). Вам не нужна централизованная база данных или онлайн-сервисы. Git становится хранилищем метаинформации об экспериментах.
Вы можете выбрать свои собственные форматы файлов и пути, которые вы можете настроить в DVC:
$ dvc exp init -i
This command will guide you to set up a default stage in dvc.yaml.
See https://dvc.org/doc/user-guide/project-structure/pipelines-files.
DVC assumes the following workspace structure:
├── data
├── metrics.json
├── models
├── params.yaml
├── plots
└── src
Command to execute: python src/train.py
Path to a code file/directory [src, n to omit]: src/train.py
Path to a data file/directory [data, n to omit]: data/images/
Path to a model file/directory [models, n to omit]:
Path to a parameters file [params.yaml, n to omit]:
Path to a metrics file [metrics.json, n to omit]:
Path to a plots file/directory [plots, n to omit]: logs.csv
Как только вы настроите свой репозиторий в этой структуре, вы начнете видеть преимущества этого подхода. Метаинформация эксперимента хранится в читаемых файлах, которые всегда доступны, и ваш код может оставаться чистым. Вы можете читать, сохранять и изменять свою метаинформацию:
$ cat params.yaml
train:
epochs: 10
model:
conv_units: 128
$ cat metrics.json
{"loss": 0.24310708045959473, "acc": 0.9182999730110168}
Вы можете увидеть, что изменилось в параметрах, коде или чем-то еще:
$ git diff HEAD~1 -- params.yaml
diff --git a/params.yaml b/params.yaml
index baad571a2..57d098495 100644
--- a/params.yaml
+++ b/params.yaml
@@ -1,5 +1,5 @@
train:
epochs: 10
-model:
- conv_units: 16
+model:
+ conv_units: 128
С DVC вы даже можете сравнивать множество экспериментов с терминала, как если бы вы это делали на панели инструментов:
$ dvc exp show
─────────────────────────────────────────────────────────────────────────────────────────────
Experiment Created loss acc train.epochs model.conv_units
─────────────────────────────────────────────────────────────────────────────────────────────
workspace - 0.25183 0.9137 10 64
mybranch Oct 23, 2021 - - 10 16
├── 9a4ff1c [exp-333c9] 10:40 AM 0.25183 0.9137 10 64
├── 138e6ea [exp-55e90] 10:28 AM 0.25784 0.9084 10 32
└── 51b0324 [exp-2b728] 10:17 AM 0.25829 0.9058 10 16
Воспроизводимость версий
Одна из причин, по которой вам необходимо отслеживать всю эту метаинформацию, — воспроизвести ваш эксперимент. Базы данных отслеживания экспериментов сохраняют артефакты, но вам все равно нужно «вытащить» их в место использования с определённой версией кода. Поскольку управление версиями эксперимента сохраняет всю метаинформацию в вашем репо, вы можете восстановить состояние эксперимента точно так же, как оно было в вашей рабочей области. DVC сохраняет состояние эксперимента и может восстановить его для вас:
$ dvc exp apply exp-333c9
Changes for experiment 'exp-333c9' have been applied to your current workspace
Воспроизводимость — это хорошо, но дрифт данных, новые бизнес требования, исправления ошибок и т. д. — все это означает проведение слегка модифицированного эксперимента. У вас нет времени всегда начинать с нуля. Воспроизводимость версий означает отслеживание изменений в состоянии эксперимента. DVC может определить, какие изменения были внесены в ходе эксперимента, и запустить только то, что необходимо. Он сохраняет только эти изменения, поэтому вы не тратите время или память на дубликаты копий данных.
$ dvc exp run --set-param model.conv_units=128
'data/images.tar.gz.dvc' didn't change, skipping
Stage 'extract' didn't change, skipping
Running stage 'train':
> python3 src/train.py
79/79 [==============================] - 1s 14ms/step - loss: 0.2552 - acc: 0.9180
Updating lock file 'dvc.lock'
Reproduced experiment(s): exp-be916
Experiment results have been applied to your workspace.
To promote an experiment to a Git branch run:
dvc exp branch <exp> <branch>
Распределенные эксперименты
Инструменты отслеживания экспериментов регистрируют эксперименты в центральной базе данных и отображают их на информационной панели. Это позволяет легко делиться ими с товарищами по команде и сравнивать эксперименты. Однако это создает проблему — в активной фазе экспериментов вы можете создавать сотни экспериментов. Члены команды могут быть перегружены, и инструмент теряет одну из своих основных целей — совместное использование экспериментов между членами команды.
Поэкспериментируйте с версионированием Git и его распределенным характером. Все эксперименты, которые вы запускаете, хранятся в вашем локальном репозитории, и только лучшие эксперименты перемещаются в центральный репозиторий (например, на GitHub), чтобы поделиться ими с товарищами по команде. Распределенные эксперименты доступны тем же людям, что и ваш репозиторий кода, поэтому вам не нужно реплицировать разрешения вашего проекта или беспокоиться о рисках безопасности.
С DVC вы можете запускать эксперименты так же, как ветки Git, что дает вам возможность делиться чем угодно, когда угодно и где угодно:
$ dvc exp push origin exp-333c9
Pushed experiment 'exp-333c9'to Git remote 'origin'.
Что дальше?
Эти усовершенствования могут оказать сильное влияние на динамичные, сложные совместные проекты машинного обучения. Есть параллели с историей контроля версий. Распределенный характер Git и отслеживание инкрементальных изменений были значительными достижениями по сравнению с централизованными файловыми системами контроля версий предыдущих поколений. Управление версиями экспериментов может аналогичным образом продвинуть следующее поколение трекинг экспериментов.
Экспериментальное управление версиями машинного обучения все еще находится в зачаточном состоянии. Следите за будущими объявлениями о:
Deep Learning: мониторинг в реальном времени и контрольные точки (checkpoints) в проектах глубокого обучения.
Визуализация и сравнение результатов экспериментов в других инструментах, таких как VS Code и DVC Studio.
Что вы хотите видеть в следующем поколении отслеживания экспериментов? Присоединяйтесь к нашей предстоящей встрече для обсуждения, присоединяйтесь к нашему сообществу Discord или дайте нам знать в комментариях!
Материалы и полезные ссылки
Документация по
dvc exp
https://dvc.org/doc/command-reference/exp