Что такое DVC и зачем оно нужно
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.

