728x90

DVC (Data Version Control)

DVC는 Git을 기반으로 하는 새로운 유형의 데이터 관리 무료 오픈소스

DVC 용도

일반적으로는 git과 함께 사용하여 git tag를 통해 대용량 데이터 버전관리를 할 때 유용하게 쓰인다.
git에서는 2GB 이상의 데이터를 push할 수 없기 때문에, 대용량 폴더는 dvc로 관리하고 git ignore에 명시하여 git이 추적하지 않도록 한다.

대용량 폴더는 dvc를 이용하여 데이터를 원격저장소에 저장한다.
dvc가 관리하는 파일들은 [폴더명.dvc]라는 메타정보파일이 남는다.
이 메타정보 파일에는 원격저장소에 저장된 데이터 경로와 데이터 size, 파일개수가 쓰여있다.
git은 이 메타정보 파일을 추적하여 버전관리를 한다.

예시)

Workspace를 보면 train.py, pred.py, data폴더, model폴더가 존재한다.
이 중 data와 model은 대용량폴더이기 때문에 dvc로 관리한다.
그렇게 되면 git repository에는 train.py, pred.py와 data와 model 폴더의 메타정보를 담은 data.dvc, model.dvc 파일이 관리되고, 데이터는 원격저장소로 push되어 원격저장소 내에 저장되어있다.
model.dvc 내용을 살펴보면 model의 원격저장소 위치와 size, 파일개수, path 정보가 들어있다.
원격저장소에서 c6/efae81ddbbf2a8a88d6d3790e60e61.dir을 찾아가서 살펴보면 원격저장소 파일경로와 실제파일명이 매칭되어 적혀있다.
10/d2a131081a3095726c5721ed31c21f의 내용을 확인하면 Workspace/model/model1.pt 파일내용을 볼 수 있다

 

dvc는 왜 파일을 이렇게 복잡한 파일명으로 관리하는걸까?
dvc는 해시값을 이용하여 데이터를 관리한다.
해시값이란 파일의 데이터를 해시 함수(Hash Funtion) 또는 해시 알고리즘(Hash Algorithm)을 통해 계산하여 산출된 값으로 이러한 값은 해당 파일의 고유한 값이다.
해시값은 고유한 값이기 때문에 두 파일의 해시값이 같다는 것은 두 파일이 동일한 파일임을 의미한다.
해시값을 이용하여 데이터를 저장하면 동일한 파일을 중복저장하지 않을 수 있다.
파일명만 다르고 내용이 동일한 파일이 있는 경우, 데이터는 한 번만 저장되고 동일한 해시 값을 참조한다.

# model1과 model2의 파일내용이 같다고 가정하면
[{“md5”:” 10d2a131081a3095726c5721ed31c21f”, “relpath”:”model/model1.pt},
{“md5”:” 10d2a131081a3095726c5721ed31c21f”, “relpath”:”model/model2.pt}]

DVC 장점

DVC 튜토리얼 (기본 사용법)

workspace로 사용하기 위한 gitrepo폴더를 만들고 그 안에서 작업함
gitrepo / samplemodel / modelfile 만듦

dvc 설치

pip install dvc

dvc 시작 (dvc init)

dvc → git과 같이 사용

cd C:\Users\stone\seokhwa_practice\DVC\gitrepo
# set git repository
git init
git remote add origin https://github.com/seokhwaLee/DVCtest
# set dvc
# pip install dvc
dvc init
# git commit
git commit -m "Initialize DVC"

dvc → git 없이 사용 가능

dvc init --no-scm
dvc remote add [remote명] [AI모델저장소storage경로]

파일 또는 디렉토리 추적 :  dvc add {추적할폴더}

aimodel폴더 내용 추적

dvc add samplemodel
git add samplemodel.dvc .gitignore
# git status : add 상태 확인
git commit -m "add model"

변경사항 반영 : dvc commit

# 추적설정 되어있는 폴더/파일의 변경사항 반영
dvc commit # git과 같이 commit message를 따로 넣어주는 옵션은 없음

저장 및 공유

원격 저장소 추가 : dvc remote add {원격저장소명} {원격저장소위치}

# 원격 저장위치 설정
# model 내용을 두 개의 원격저장소에 push해보기
dvc remote add aimodel C:\Users\stone\seokhwa_practice\DVC\aimodel
# 원격저장소 config git add
git add .dvc/config
git commit -m "Configure remote storage"

원격저장소에 push하기 : dvc push -r {원격저장소명} {add폴더}

# 원격저장소로 위에서 add한 data push
dvc push -r aimodel samplemodel
# add한 것 중 특정 데이터만 push 가능
dvc push aimodel.dvc -r aimodel samplemodel

하나의 git repository에서 여러 개의 원격저장소에 push 가능

# 원격 저장소 추가
dvc remote add data C:\Users\stone\seokhwa_practice\DVC\project
# 원격저장소 config git add
git add .dvc/config
git commit -m "Configure remote storage"

dvc add sampledata
git add sampledata.dvc .gitignore

# git status : add 상태 확인
git commit -m "add data"
dvc push -r data sampledata

이미 푸시한 내용 다른 원격저장소에 푸시 가능

# 새로운 원격 저장소 추가
dvc remote add testtest C:\Users\stone\seokhwa_practice\DVC\testtest
# 원격저장소 config git add
git add .dvc/config
git commit -m "Configure remote storage"

dvc push -r testtest sampledata

원격저장소로부터 데이터 불러오기 : dvc pull {불러올데이터파일명.dvc}

dvc pull samplemodel.dvc -r aimodel

데이터 삭제

dvc remove {삭제할데이터파일명.dvc} : dvc파일 삭제
dvc gc -w -c -r {원격저장소명} -f : 원격저장소에서 dvc workspace에서 추적하지 않는 파일 삭제

remove를 이용하여 추적 취소 후, gc를 이용하여 dvc workspace에서 추적하지 않는 파일 원격 저장소에서 삭제한다

dvc remove sampledata.dvc
dvc gc -w -c -r testtest -f

 

참고 링크

DVC homepage
DVC github
DVC docs

 

 

대용량 데이터 버전관리 오픈소스 LFS vs DVC

대용량 데이터를 체계적으로 관리하는 방안이 필요해져, 대표적인 두 가지 오픈소스를 비교해보았다. Git LFS는 유료 서비스라는 점에서 조건미달이었기 때문에, 깊이 공부하지 않고 DVC를 선택하

bigseok.tistory.com

 

728x90

+ Recent posts