Версионирование данных с помощью DVC

Что касается контроля версий, Git является распространенным инструментом для управления версиями кода. Он помогает разработчикам легко поддерживать историю кода.

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

Код и гиперпараметры легко поддерживать с помощью Git. Но контроль версий данных затруднен из-за ограничений на размер файлов в популярных системах контроля версий: О больших файлах на GitHub.

DVC — один из популярных инструментов с открытым исходным кодом для решения проблемы версионирования данных. С помощью DVC мы храним все версии данных в определенном удаленном месте, а Git фиксирует хэш-значение этих данных.

Пример

Установите DVC

Рекомендуется устанавливать DVC с помощью системных пакетов, например, apt и brew. Это обеспечивает функцию автозавершения, которая минимизирует ошибки при вводе.

Установите DVC на Debian/Ubuntu:

sudo wget https://dvc.org/deb/dvc.list -O /etc/apt/sources.list.d/dvc.list

wget -qO - https://dvc.org/deb/iterative.asc | gpg --dearmor > packages.iterative.gpg

sudo install -o root -g root -m 644 packages.iterative.gpg /etc/apt/trusted.gpg.d/

rm -f packages.iterative.gpg

sudo apt-get update

sudo apt-get install dvc
Вход в полноэкранный режим Выход из полноэкранного режима

Установите DVC на MacOS:

brew install dvc
Войти в полноэкранный режим Выход из полноэкранного режима

Верификация.

$ dvc version

DVC version: 2.11.0 (brew)
---------------------------------
Platform: Python 3.10.5 on macOS-12.4-arm64-arm-64bit
Supports:
    azure (adlfs = 2022.4.0, knack = 0.9.0, azure-identity = 1.10.0),
    gdrive (pydrive2 = 1.10.1),
    gs (gcsfs = 2022.5.0),
    webhdfs (fsspec = 2022.5.0),
    http (aiohttp = 3.8.1, aiohttp-retry = 2.4.6),
    https (aiohttp = 3.8.1, aiohttp-retry = 2.4.6),
    s3 (s3fs = 2022.5.0, boto3 = 1.21.21),
    ssh (sshfs = 2022.6.0),
    oss (ossfs = 2021.8.0),
    webdav (webdav4 = 0.9.7),
    webdavs (webdav4 = 0.9.7)
Войти в полноэкранный режим Выход из полноэкранного режима

Более подробное руководство по установке см. на сайте https://dvc.org/doc/install.

Инициализация пустого Git-репозитория

mkdir dvc-demo && cd dvc-demo
git init
Войти в полноэкранный режим Выйти из полноэкранного режима

Инициализация DVC в Git-репо

dvc init
Войдите в полноэкранный режим Выход из полноэкранного режима
$ git status

...
Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
    new file:   .dvc/.gitignore
    new file:   .dvc/config
    new file:   .dvcignore
Войти в полноэкранный режим Выход из полноэкранного режима
git commit -m 'feat: init dvc'
Войти в полноэкранный режим Выход из полноэкранного режима

Генерировать данные

Создайте каталог data, данные будут помещены в этот каталог.

mkdir data
Войти в полноэкранный режим Выйти из полноэкранного режима

Создать файл изображения со случайными числами.

dd if=/dev/random of=data/data.img bs=1 count=0 seek=1024000
Войти в полноэкранный режим Выйти из полноэкранного режима
dvc add data/data.img
Войти в полноэкранный режим Выход из полноэкранного режима

В каталоге данных появились два новых файла.

$ ls -a data/

.  ..  data.img  data.img.dvc  .gitignore
Войти в полноэкранный режим Выход из полноэкранного режима

data/data.img.dvc: Файл, заканчивающийся .dvc, описывает метаданные данных.

$ cat data/data.img.dvc

outs:
- md5: 80ec129d645c70cf0de45b1a5a682235
  size: 1024000
  path: data.img
Вход в полноэкранный режим Выход из полноэкранного режима

data/.gitignore: Git не будет отслеживать изменения data.img; вместо этого он будет отслеживать изменения data.img.dvc.

$ cat data/.gitignore
/data.img
Вход в полноэкранный режим Выход из полноэкранного режима

Затем зафиксируйте изменения с помощью Git.

Зафиксировать метаданные данных

git add data/
Войти в полноэкранный режим Выйти из полноэкранного режима
$ git commit -m 'feat: add data/data.img'

[main badc237] feat: add data metadata
 2 files changed, 5 insertions(+)
 create mode 100644 data/.gitignore
 create mode 100644 data/data.img.dvc
Войти в полноэкранный режим Выйти из полноэкранного режима

Передача данных в удаленное хранилище

Настройте место удаленного хранения данных.

mkdir /tmp/dvc-remote/
Войти в полноэкранный режим Выход из полноэкранного режима
$ dvc remote add --default myremote /tmp/dvc-remote/

Setting 'myremote' as a default remote.
Войти в полноэкранный режим Выход из полноэкранного режима
git add .dvc/config
git commit -m "feat: update dvc remote"
Войти в полноэкранный режим Выход из полноэкранного режима

Переместите данные в удаленное хранилище.

$ dvc push

1 file pushed
Войти в полноэкранный режим Выход из полноэкранного режима

Какова структура удаленного хранилища

$ tree /tmp/dvc-remote/

/tmp/dvc-remote/
└── 80
    └── ec129d645c70cf0de45b1a5a682235

1 directory, 1 file
Войти в полноэкранный режим Выйти из полноэкранного режима

Внести изменения в данные

dd if=/dev/random of=data/data.img bs=1 count=0 seek=1024
Войти в полноэкранный режим Выйти из полноэкранного режима

Проверьте состояние данных с помощью dvc status.

$ dvc status

data/data.img.dvc:
    changed outs:
        modified:           data/data.img
Войти в полноэкранный режим Выход из полноэкранного режима
dvc add data/data.img
Войти в полноэкранный режим Выход из полноэкранного режима

Git управляет изменениями метаданных данных.

$ git diff -- data/data.img.dvc

diff --git a/data/data.img.dvc b/data/data.img.dvc
index e218f0c..556b929 100644
--- a/data/data.img.dvc
+++ b/data/data.img.dvc
@@ -1,4 +1,4 @@
 outs:
-- md5: 80ec129d645c70cf0de45b1a5a682235
-  size: 1024000
+- md5: 0f343b0931126a20f133d67c2b018a3b
+  size: 1024
   path: data.img
Войти в полноэкранный режим Выход из полноэкранного режима
git add data/data.img.dvc
git commit -m 'feat: update data/data.img'
Войти в полноэкранный режим Выход из полноэкранного режима

Передача новых данных в удаленное хранилище.

dvc push
Войти в полноэкранный режим Выход из полноэкранного режима

Снова посмотрите структуру удаленного хранилища.

В нем хранятся все версии данных, что позволяет разработчикам переключаться между версиями.

$ tree /tmp/dvc-remote/

/tmp/dvc-remote/
├── 0f
│   └── 343b0931126a20f133d67c2b018a3b
└── 80
    └── ec129d645c70cf0de45b1a5a682235

2 directories, 2 files
Войти в полноэкранный режим Выйти из полноэкранного режима

Получение данных из удаленного хранилища

git checkout [<branch>]
Войти в полноэкранный режим Выход из полноэкранного режима
dvc fetch -aT  # download data from remote storage to the cache.
dvc checkout
Войти в полноэкранный режим Выход из полноэкранного режима

Оцените статью
devanswers.ru
Добавить комментарий