DVC

Лев Коваленко — Senior DS Engineer

DVC

Manage and version images, audio, video, and text files in storage and organize your ML modeling process into a reproducible workflow.

DVC modules

Архитектура DVC

DVC storages

  • Amazon S3 (AWS) and S3-compatible e.g. MinIO
  • Microsoft Azure Blob Storage
  • Google Cloud Storage (GCP)
  • Google Drive
  • Aliyun OSS
  • SSH & SFTP (like scp)
  • HDFS & WebHDFS
  • HTTP
  • WebDAV

Использование

Инициализация dvc репозитория

dvc init
git commit -m "Initialize DVC"

Добавление данных

dvc add data/data.csv
git add data/data.csv.dvc data/.gitignore
git commit -m "Add raw data"

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

dvc commit
git commit -m "Change data"

Добавление хранилища

dvc remote add -d --project gdrive gdrive://<url>
git add .dvc/config
git commit -m "Configure remote storage"

Отправка в хранилище

dvc push

Выгрузка из хранилиища

dvc pull

Переключение между версиями

git checkout <git-reversion>
dvc checkout

CI-CD

DVC live

from dvclive import Live

with Live() as live:
    live.log_param("epochs", NUM_EPOCHS)

    for epoch in range(NUM_EPOCHS):
        train_model(...)
        metrics = evaluate_model(...)
        for metric_name, value in metrics.items():
            live.log_metric(metric_name, value)
        live.next_step()

DVC api

import dvc.api
with dvc.api.open(
    'get-started/data.csv',
    repo='https://github.com/iterative/dataset-registry'
) as f:
    # ... f is a file-like object

DVC pipelines

Pipeline

stages:
  prepare: ... # stage 1 definition
  train: ... # stage 2 definition
  evaluate: ... # stage 3 definition

Stage

stages:
  prepare:
    cmd: source src/cleanup.sh
    deps:
      - src/cleanup.sh
      - data/raw
    outs:
      - data/clean.csv

Stage parametrs

stages:
  train:
    cmd: ...
    deps: ...
    params: # from params.yaml
      - learning_rate
      - nn.epochs
      - nn.batch_size
    outs: ...

Stage outputs

  • Files
  • Metrics
  • Plots

Pros&Cons

Pros

  • Не зависит от языка
  • DAG на основе файлов
  • Правила рядом с кодом
  • Простая параметризация
  • Yaml формат
  • Вресионирование результатов
  • Мониторинг эксперимента

Cons

  • Сложное разбиение на модули
  • DAG deps пишутся вами
  • Нет виртуальных окружений
  • Нет ограничений на ресурсы
  • Нет распределенных вычеслений