Назад
280

Что такое DVC и зачем оно нужно

280

DVC (Data Version Control) — система контроля версий данных и различных артефактов в ML-проектах. Позволяет связать версию датасетов с версиями кода. Не нагружает Git и даёт хранить тяжёлые данные в удалённом хранилище:

  • репозиторий Git хранит только лёгкие .dvc-файлы: это указатели на данные, а не сами данные
  • локальный кэш DVC выполняет функции промежуточного хранилища для использования на локальной машине. Позволяет быстро переключаться между версиями данных
  • удалённое хранилище (s3, ssh и др.) — здесь физически лежат данные

Гайд по внедрению

1. Настройка удалённого хранилища

DVC поддерживает множество видов удалённых хранилищ. В качестве примера рассмотрим подключение к yandex.cloud. Для регистрации понадобится аккаунт Яндекса.

Порядок действий:

  • Открываем консоль
  • Создаём бакет и задаём ему имя, например, dvc-ya-bucket. Выбираем нужный объём хранилища
  • Создаём сервис-аккаунт. В Меню → Управление ресурсами → Identity and Access Management, присваиваем роль, например, admin. Их стоит выделять на каждого члена команды, с помощью них можно регулировать права доступа
  • Создаём статический ключ. Идентификатор и секрет нужно сразу сохранить: после закрытия диалога они больше не отображаются

2. Подготовка репозитория

Проект должен быть с git’ом. Склонируйте существующий репозиторий или выполните команду git init.

Затем установите DVC. Пакет зависит от типа хранилища, поэтому устанавливаем сразу с нужным, например: pip install dvc[s3].

pip install dvc[s3] 
dvc init  # активация dvc в проекте
dvc remote add -d ya-cloud s3://dvc-ya-bucket  # команда сохранения профиля подключения к нашему бакету. (-d флаг означает использование профиля по умолчанию)
dvc remote modify ya-cloud endpointurl <https://storage.yandexcloud.net>  # добавление эндпоинта (modify - изменение уже имеющегося профиля)

Для хранения секретов (идентификатор и ключ сервис-аккаунта) используется локальный конфиг DVC, который не попадает в git. Не кладите секреты в общий конфиг: это прямая утечка данных.

dvc remote modify --local ya-cloud access_key_id YOUR_KEY_ID  # --local флаг отвечает за запись в файл config.local, вместо config
dvc remote modify --local ya-cloud secret_access_key YOUR_SECRET

Служебные файлы с расширением *.dvc заливаем в репозиторий. В папке .dvc автоматически добавится собственный файл .gitignore, в нем уже вписаны служебные директории и файл config.local, которые git не будет пушить в репозиторий. А вот сам файл .dvc/.gitignoreтакже следует добавить в git.

3. Добавление данных в хранилище

Работа с данными в DVC похожа на работу с git:

dvc add data/   # аналог git add: начать отслеживать папку
dvc push  # отправить данные в хранилище

После dvc add появляется файл data.dvc с контрольными суммами и путями. Его и нужно закоммитить в git вместо самих данных.

Работа с версиями данных

1. Получение данных на другой машине

git pull  # подтягиваем актуальные .dvc-файлы
dvc pull  # скачиваем датасет из хранилища
dvc status  # проверяем консистентность по md5-хэшам

При выполнении dvc pull DVC читает .dvc-файлы, определяет отсутствующие или изменённые объекты и скачивает их из хранилища.

2. Обновление данных

После изменения данных необходимо обновить DVC-файлы и загрузить новую версию в удалённое хранилище:

dvc status  # команда проверки изменений данных
dvc add data  # фиксация изменений в dvc для послед. выгрузки в репозиторий

git add data.dvc  # добавляем изменившийся метафайл в гит
git commit -m "update dataset"  # коммитим изменения в гит
git push origin your-branch  # пушим изменения в репозиторий
dvc push  # пушим изменения в удалённое хранилище

Новая версия датасета становится доступна всем участникам проекта.

3. Переключение между версиями данных

Версии датасетов в DVC неотделимы от git: каждая версия данных привязана к конкретному коммиту, потому что git хранит только метаданные (хэш), а DVC — сами данные в хранилище.

git checkout HEAD~1  # откатиться на один коммит назад
# ИЛИ
git log --oneline -- data.dvc  # просмотр коммитов изменения определённого файла dvc
git checkout 949c4fd -- data.dvc  # переключение на нужный коммит
dvc checkout  # синхронизация локального датасета с удалённым хранилищем

Это гарантирует воспроизводимость: конкретный коммит всегда соответствует конкретному состоянию датасета.

Итог

DVC решает несколько проблем ML-проектов: управление данными, воспроизводимость экспериментов, совместная работа над проектом с низким порогом входа и привычным git-интерфейсом.

Использование DVC позволяет команде:

  • синхронизировать версии кода и данных
  • быстро восстанавливать нужное состояние проекта
  • хранить большие объёмы файлов в удалённых хранилищах, не засоряя git.
Старт — 4 июня
DLOps

Eсли хотите научиться превращать модели в сервисы и доводить их до пользователей, то приходите на курс DLOps. Оставьте заявку до 31 мая, чтобы получить скидки до 15%

0/0

Телеграм-канал

DeepSchool

Короткие посты по теории ML/DL, полезные
библиотеки и фреймворки, вопросы с собеседований
и советы, которые помогут в работе

Открыть Телеграм

Увидели ошибку?

Напишите нам в Telegram!