개요

DVC(Data Version Control)는 ML 데이터와 모델의 버전 관리 도구입니다. Git이 코드를 추적하듯, DVC는 대용량 데이터 파일, 모델 가중치, 파이프라인을 추적합니다. Git 위에서 동작하며 데이터 자체는 원격 스토리지(S3, GCS 등)에 저장하고 Git에는 메타데이터만 커밋합니다.

핵심 개념

Git + DVC 워크플로우

Git 저장소                    원격 스토리지 (S3/GCS)
──────────                    ──────────────────
코드 (.py, .yaml)             대용량 데이터 (.csv, .parquet)
설정 (params.yaml)            모델 가중치 (.pt, .bin)
DVC 메타파일 (.dvc)           중간 산출물
dvc.lock (파이프라인 상태)
# 초기화
git init && dvc init
 
# 데이터 추적
dvc add data/dataset.csv
# → data/dataset.csv.dvc 생성 (메타데이터)
# → .gitignore에 data/dataset.csv 자동 추가
 
git add data/dataset.csv.dvc .gitignore
git commit -m "Add dataset v1"
 
# 원격 스토리지 설정
dvc remote add -d myremote s3://my-bucket/dvc-store
dvc push  # 데이터 → S3 업로드
 
# 데이터 가져오기 (다른 머신에서)
git clone <repo>
dvc pull  # S3에서 데이터 다운로드

데이터 버전 관리

# 데이터 업데이트
cp new_data.csv data/dataset.csv
dvc add data/dataset.csv
git add data/dataset.csv.dvc
git commit -m "Update dataset v2"
dvc push
 
# 이전 버전으로 되돌리기
git checkout HEAD~1 -- data/dataset.csv.dvc
dvc checkout
# → dataset.csv가 v1으로 복원

주요 기능

파이프라인 (dvc.yaml)

# dvc.yaml — ML 파이프라인 정의
stages:
  prepare:
    cmd: python src/prepare.py
    deps:
      - src/prepare.py
      - data/raw.csv
    outs:
      - data/prepared.csv
 
  train:
    cmd: python src/train.py
    deps:
      - src/train.py
      - data/prepared.csv
    params:
      - train.epochs
      - train.lr
    outs:
      - models/model.pt
    metrics:
      - metrics.json:
          cache: false
 
  evaluate:
    cmd: python src/evaluate.py
    deps:
      - src/evaluate.py
      - models/model.pt
    metrics:
      - eval_metrics.json:
          cache: false
# 파이프라인 실행 (변경된 단계만 재실행)
dvc repro
 
# 파이프라인 시각화
dvc dag
# prepare → train → evaluate

실험 추적

# 파라미터 변경 + 실험
dvc exp run --set-param train.lr=0.001
dvc exp run --set-param train.lr=0.01
dvc exp run --set-param train.epochs=50
 
# 실험 비교
dvc exp show
# ┌──────────┬────────┬──────┬──────────┐
# │ Experiment│ lr     │epochs│ accuracy │
# ├──────────┼────────┼──────┼──────────┤
# │ exp-abc  │ 0.001  │ 10   │ 0.85     │
# │ exp-def  │ 0.01   │ 10   │ 0.91     │
# │ exp-ghi  │ 0.01   │ 50   │ 0.94     │
# └──────────┴────────┴──────┴──────────┘
 
# 최고 실험 적용
dvc exp apply exp-ghi

원격 스토리지 지원

스토리지설정
AWS S3dvc remote add -d s3 s3://bucket/path
Google GCSdvc remote add -d gcs gs://bucket/path
Azure Blobdvc remote add -d azure azure://container/path
SSH/SFTPdvc remote add -d ssh ssh://user@host/path
로컬dvc remote add -d local /mnt/data/dvc
HTTPdvc remote add -d http https://example.com/data

DVC vs 대안

항목DVCGit LFSMLflowWeights & Biases
데이터 버전 관리OOXX
파이프라인OXO (일부)X
실험 추적OXOO
모델 레지스트리OXOO
Git 통합네이티브네이티브별도별도
스토리지S3/GCS/로컬Git 서버아티팩트 스토어클라우드
비용무료 (오픈소스)무료 (제한)무료 + 유료유료
대용량 지원O (제한 없음)제한적 (Git 서버 의존)중간O

Git LFS vs DVC

항목Git LFSDVC
저장소Git 서버 (GitHub 등)원하는 스토리지 (S3 등)
비용GitHub 용량 제한/과금스토리지 비용만
파이프라인XO
실험 추적XO
대용량서버 제한제한 없음

Iterative.ai 생태계

도구역할
DVC데이터/모델 버전 관리, 파이프라인
DVCLive학습 중 실시간 메트릭 로깅
CMLCI/CD에서 ML 리포트 자동 생성
MLEM모델 패키징/배포
DVC Studio웹 대시보드 (실험 비교, 시각화)

관련 항목