Перевод статьи подготовлен совместно с Моргуновой Анной, за что ей огромное спасибо ???? Другие материалы ML REPA и ссылки на видео митапов и конференций можно найти в открытой странице в Notion.

Обзор

???? Алгоритмы машинного обучения раздвигают границы человеческих знаний. Управление версиями экспериментов сочетает в себе отслеживание эксперимента и управление версиями кода. Вы можете просматривать, сравнивать и восстанавливать их в любое время.

Автор: Dave Berenbaum • December 07, 2021.

Оригинал: Don't Just Track Your ML Experiments, Version Them.

Не просто отслеживайте свои эксперименты с машинным обучением, а версионируйте их

Управление версиями экспериментов машинного обучения выводит трекинг экспериментов на новый уровень, за счёт преимущества контроля версий. Отслеживайте и версионируйте как код, вносите пошаговые обновления постепенно и держите все распределённым, чтобы делиться, как хотите.

Источник: https://dvc.org/static/647b1c9f39e2692c74c868eefc6e1490/0c822/experiment-versioning-cover.webp
Источник: https://dvc.org/static/647b1c9f39e2692c74c868eefc6e1490/0c822/experiment-versioning-cover.webp

Инструменты отслеживания экспериментов помогают управлять проектами машинного обучения там, где инструментов контроля версий, таких как 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 и отслеживание инкрементальных изменений были значительными достижениями по сравнению с централизованными файловыми системами контроля версий предыдущих поколений. Управление версиями экспериментов может аналогичным образом продвинуть следующее поколение трекинг экспериментов.

Экспериментальное управление версиями машинного обучения все еще находится в зачаточном состоянии. Следите за будущими объявлениями о:

Что вы хотите видеть в следующем поколении отслеживания экспериментов? Присоединяйтесь к нашей предстоящей встрече для обсуждения, присоединяйтесь к нашему сообществу Discord или дайте нам знать в комментариях!

Материалы и полезные ссылки

Комментарии (0)