инструменты аналитика
August 13, 2023

Версионирование с 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

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

dvc remote add -d remote_data arch

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

dvc add data/1.csv

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

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

dvc push

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

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

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

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

dvc commit
dvc push

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

git commit -am second_step

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

git log -2
git checkout 

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

dvc pull

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

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

  1. Документация по dvc
  2. Хорошая статья с proglib.io