Найти тему
Властелин машин

Версионирование с DVC, которое упорядочит работу с данными и ml экпериментами

DVC - это продукт эволюции машинного обучения и предназначен для упрощения работы дата аналитика. В частности, он помогает создавать версии данных и моделей (большие файлы) и тем самым упорядочит ваш проект так, что его станет проще запускать коллегам, извлекать нужные версии и сравнивать результаты разных подходов. Многие принципы DVC заимствовал у Git-а, который делает то же, но для кода и небольших файлов.

Сначала расскажу в целом о командах для версионирования данных, а потом рассмотрю их на практическом примере.

Для начала работы с DVC требуется вызвать команду:

dvc init

После появится папка .dvc для хранения информации о конфигурации, например, файл config, в котором хранится информация о настройках.

Затем следует добавить путь к удаленному хранилищу данных, там и будут фактически находится версионированные данные:

dvc remote add -d название путь

Ключ -d сообщает DVC, что это удаленное хранилище по умолчанию, в целом можно добавлять несколько хранилищ.

Для начала слежения за файлом с данными используется команда:

dvc add путь

В это случае файл одновременно добавляется в контролируемую область и кэш DVC, создается dvc файл, хранящий служебную информацию и в файл .gitignore добавляется путь к данным.

Отмена слежения происходит командой:

dvc remove путь.dvc

Чтобы загрузить файлы из кэша в удаленное хранилище, используется команда:

dvc push

В последующем для фиксации изменений в отслеживаемых dvc файлах используется команда:

dvc commit

Альтернативно можно делать dvc add с указанием пути к каждому файлу.

Это обеспечит занесение изменений в кэш DVC (чтобы направить их на сервер опять же следует воспользоваться dvc push)

Для восстановления состояния данных перемещаемся в соответствующий commit с git и делаем:

dvc fetch
dvc checkout

либо

dvc pull

В первом случае сначала изменения поступают в кэш DVC, а потом в рабочую директорию, во втором - все сразу.

Теперь продемонстрируем работу на примере. Создадим тестовый репозиторий, в котором в папке data будет размещен файл 1.csv, плюс еще один файл ipynb для модификации данных.

Инициализируем git репозиторий и dvc:

git init
git add demo_dvs.ipynb

dvc init

-2

Теперь зададим удаленное хранилище в папке arch:

dvc remote add -d remote_data arch

-3

Добавим data/1.csv в кэш DVC:

dvc add data/1.csv

-4

Видим, что в папке с данными созданы файл .gitignore и файл dvc, которые следует отслеживать с git-ом.

Отправим данные на сервер:

dvc push

-5

зафиксируем коммит:

git add data/1.csv.dvc data/.gitignore
git commit -am first_step

-6

Теперь изменим файлы в ноутбуке:

-7

Закоммитим изменения в данных и отправим их в хранилище:

dvc commit
dvc push

-8

Снова создадим git commit:

git commit -am second_step

-9

Попробуем получить первичный вид данных:

git log -2
git checkout

-10

Теперь восстановим данные:

dvc pull

-11

После этой команды содержимое файла примет первоначальный вид:

-12

Полезные ссылки:

-13