DVC (Data Version Control)는 머신러닝 프로젝트를 위한 오픈소스 버전 관리 시스템입니다. Git과 함께 동작하며, 데이터셋, 모델, 파이프라인을 추적하고 재현 가능하게 만듭니다.
대용량 파일도 Git처럼 버전 관리, S3/GCS/SSH 등 원격 저장소와 연동
DAG 기반 단계를 코드로 정의, 변경된 부분만 재실행 (캐싱)
하이퍼파라미터, 메트릭, 모델 아티팩트를 Git 커밋과 연결
기존 방식(Git LFS, 수동 스크립트)과 비교한 DVC의 강점:
| 영역 | Git LFS / 수동 | DVC |
|---|---|---|
| 데이터 버전 | 파일 단위, diff 어려움 | 포인터 기반, Git과 완벽한 히스토리 |
| 파이프라인 | 직접 Makefile/Airflow | dvc.yaml + 캐싱, 변경 감지 자동 |
| 실험 관리 | 수동 로깅 | dvc exp run + 메트릭 비교 |
| 원격 저장소 | 별도 동기화 | 통합 push/pull (S3, GCS, SSH 등) |
DVC는 Git 위에서 동작하며, 데이터와 파이프라인을 메타파일(.dvc, dvc.lock, dvc.yaml)로 관리합니다.
pip install dvc # Python 3.8+
# 또는 conda: conda install -c conda-forge dvc
dvc --version # 3.58.x
cd my-ml-project
git init
dvc init # .dvc/ 디렉토리 생성
git commit -m "dvc init"
# 데이터 추가 (예: images/)
dvc add data/images # data/images.dvc 생성, .gitignore 업데이트
git add data/images.dvc .gitignore
git commit -m "track images"
# 원격 저장소 연결 (예: S3)
dvc remote add myremote s3://my-bucket/dvc-store
dvc push
# dvc.yaml
stages:
preprocess:
cmd: python src/preprocess.py
deps:
- data/raw
outs:
- data/processed
train:
cmd: python src/train.py
deps:
- data/processed
params:
- lr
- epochs
metrics:
- metrics/accuracy.json
outs:
- models/model.pkl
# 실행 및 비교
dvc repro # 변경된 stage만 재실행
dvc metrics show # 정확도 등 확인
dvc exp run --set-param lr=0.01 # 실험 실행
dvc exp show # 실험 목록, 메트릭 비교
dvc add 후 반드시 .dvc 파일과 .gitignore 변경을 Git에 커밋하세요.
| 명령 / 설정 | 설명 | 예시 |
|---|---|---|
dvc init | 프로젝트 DVC 초기화 | — |
dvc remote add | 원격 저장소 등록 | dvc remote add myremote gs://bucket |
dvc cache dir | 캐시 위치 변경 | dvc cache dir /mnt/ssd/.dvc-cache |
dvc.yaml params | 하이퍼파라미터 파일 (params.yaml) | params: - lr |
dvc.lock | 자동 생성, 의존성 해시 고정 | — |
dvc repro | 파이프라인 재현 | dvc repro train |
dvc exp run | 실험 실행 (Git 브랜치처럼) | dvc exp run -S lr=0.001 |
dvc push/pull | 원격과 데이터 동기화 | dvc push -r myremote |
dvc add 후 Git에 .dvc 파일을 커밋하지 않음 → 팀원이 데이터를 복원할 수 없음.git status로 .dvc 파일과 .gitignore 변경을 항상 함께 커밋.
dvc repro가 모든 stage를 다시 실행함 (캐시 미스).dvc.yaml의 deps/outs 경로가 정확한지 확인. 대소문자, 절대경로 주의.
dvc remote modify로 credential 파일 경로 지정 또는 환경 변수 설정.
.dvcignore로 캐시 제외 패턴 지정. dvc gc로 오래된 캐시 정리. dvc diff로 데이터 변화 추적.