Sobes.tech
Назад к вопросам
Middle — Senior
9

Что такое DVC и Git LFS для версионирования данных?

Компании, где спрашивали
Yandex Research

Ответ от нейросети

sobes.tech AI

Что хотят услышать интервьюеры:

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

Определение:

Git LFS (Large File Storage) — это расширение для Git, которое выносит большие файлы из основного репозитория и хранит в Git только небольшие указатели вместо самих бинарников. Это помогает не раздувать историю и ускорять работу с репозиторием.

DVC (Data Version Control) — это инструмент для версионирования данных, моделей и ML-пайплайнов. Он хранит большие файлы вне Git, а в Git кладёт метаданные и ссылки на версии данных, чтобы можно было воспроизводить обучение и отслеживать, какие данные и параметры привели к результату.

Пример использования:

Например, в ML-проекте есть data/raw.csv, data/processed.csv и обученная модель model.pkl.
С Git LFS можно хранить сами большие файлы через LFS, чтобы репозиторий не разрастался.
С DVC можно не только хранить ссылки на эти файлы, но и описать, как из raw.csv получается processed.csv, а затем модель, и потом повторить весь процесс на другой машине.

# DVC: добавить большой файл под версионирование
dvc add data/raw.csv

# Закоммитить в Git только метаданные DVC
git add data/raw.csv.dvc .gitignore
git commit -m "Track raw dataset with DVC"

# Получить данные на другой машине
dvc pull

# Запустить пайплайн, если он описан
dvc repro

Пояснение кода:

В этом примере код нужен, потому что разница между инструментами лучше видна на действиях.

  1. dvc add data/raw.csv — DVC не кладёт сам CSV в Git, а создаёт файл метаданных .dvc с контрольной суммой и информацией о расположении данных.
  2. git add data/raw.csv.dvc .gitignore — в Git попадает только описание версии данных, а не сам файл.
  3. git commit — фиксируется состояние проекта вместе с привязкой к конкретной версии датасета.
  4. dvc pull — на другой машине или в CI скачиваются нужные данные из хранилища, которое подключено к DVC.
  5. dvc repro — если описан пайплайн, DVC проверяет зависимости и воспроизводит этапы заново в правильном порядке.

Если бы использовался Git LFS, то в Git тоже лежал бы не сам файл, а указатель, но без управления ML-пайплайном и зависимостями между этапами.

Ключевые моменты:

  • Git LFS — это про хранение больших файлов без раздувания Git-истории.
  • DVC — это про данные, модели и воспроизводимость ML-пайплайнов.
  • DVC обычно полезнее в MLOps, потому что связывает данные, код, параметры и результаты.
  • Git LFS проще внедрить, если нужен только большой бинарный контент рядом с кодом.
  • Оба инструмента уменьшают нагрузку на Git, но решают разные задачи.
  • Для ML-проектов DVC чаще предпочтительнее, если важны эксперименты, версии датасетов и повторяемость обучения.