DVC 소개와 설치

데이터 버전 관리

대용량 파일 버저닝을 위한 도구로 git-lfs, LakeFS, DVC, DeltaLake, dolthhub, Pachyderm, Neptune 등이 있습니다. 이중 DVC에 대해 알아 보도록 하겠습니다.

DVC 소개

DVC(data version control)는 데이터 과학자들을 위한 멋진 도구랍니다! 데이터와 모델을 버전 관리하는 데 사용됩니다. DVC를 사용하면 Git과 비슷한 방식으로 데이터셋의 버전을 추적하고, 원래대로 되돌리고, 변경사항을 쉽게 복원할 수 있습니다. Git에는 용량 제한이 있지만, DVC CLI를 이용하면 대용량 파일, 데이터셋 디렉토리, 머신러닝 모델 등을 작고 가벼운 메타 파일로 대체하여 데이터 버전 관리를 지원해주어 편리합니다.

DVC는 중앙 서버에서 파일을 직접 관리하는 방식은 아니며, 중앙 서버는 단순히 변경 이력과 메타데이터를 관리해, 실제 데이터 파일은 로컬 또는 원격 저장소에 저장되는 형태로 관리됩니다. 중앙 서버에서 변경 이력과 메타데이터를 받는 것은 가능하지만 실제 데이터 파일은 로컬 저장소에 있고 다른 작업자에게 직접 파일을 전송하거나 별도의 스토리지 서비스를 이용해 공유할 필요가 있습니다. DVC는 Git LFS처럼 큰 파일의 포인터는 Git 저장소에 저장되지만 해당 파일의 실제 내용은 외부 저장소에 저장하는 방식을 사용하는 것 입니다.

DVC 설치

DVC(Data Version Control) 설치를 진행합니다. MacOS를 이용하고 있다면 brew를 이용해 설치합니다.

$ brew install dvc

DVC 저장소 초기화

설치 후 dvc-test-repo 경로를 만들고 dvc 저장소를 초기화합니다.

$ mkdir dvc-test-repo
$ cd dvc-test-repo
$ git init
$ dvc init
Initialized DVC repository.

You can now commit the changes to git.

+---------------------------------------------------------------------+
|                                                                     |
|        DVC has enabled anonymous aggregate usage analytics.         |
|     Read the analytics documentation (and how to opt-out) here:     |
|             <https://dvc.org/doc/user-guide/analytics>              |
|                                                                     |
+---------------------------------------------------------------------+

What's next?
------------
- Check out the documentation: <https://dvc.org/doc>
- Get help and share ideas: <https://dvc.org/chat>
- Star us on GitHub: <https://github.com/iterative/dvc>

DVC commit

첫번째 commit을 수행합니다.

$ git commit -m "Initialize DVC"
[master (최상위-커밋) d2165ca] Initialize DVC
 4 files changed, 9 insertions(+)
 create mode 100644 .dvc/.gitignore
 create mode 100644 .dvc/config
 create mode 100644 .dvcignore
 create mode 100644 test.txt

이후 원격 저장소(Amazon S3, SSH, Google Drive, Azure Blob Storage, and HDFS) 주소를 추가하고 add 할 수 있습니다. 아래 예시는 Amazon S3를 기준으로 합니다. DVC를 사용하여 데이터셋의 버전을 관리하려면, 먼저 데이터를 프로젝트 디렉토리에 추가해야 합니다. 데이터셋을 프로젝트에 추가하는 방법은 아래와 같습니다.

dvc remote add -d storage s3://mystorage/dvcstore
git add .dvc/config
git commit -m "add dvc config"

첫번째 커밋이 이뤄졌습니다. 원격 저장소에서 data를 가져오려면 pull 명령을 사용합니다.

dvc pull

DVC add/push

데이터를 저장할 수 도 있습니다. dvc 명령은 dvc add 명령과 dvc push 명령을 주로 함께 사용합니다.

$ dvc add ./data/test.txt
$ dvc push

dvc add 명령을 이용해 스테이지에 추가합니다.

$ dvc add ./data/test.txt
100% Adding...|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████|1/1 [00:00,  5.07file/s]

To track the changes with git, run:

	git add data/.gitignore data/test.txt.dvc

To enable auto staging, run:

	dvc config core.autostage true

다음과 같은 ./data/test.txt.dvc 파일이 생깁니다. .dvc 메타 파일은 데이터 파이의 md5 값, size, path 정보를 포함하는 메타 파일입니다.

outs:
- md5: 51b98813c49f7031395c63a33f7db50b
  size: 9
  path: test.txt

마지막으로 원격 저장소에 push합니다.

dvc push

dvc는 버전 제어 시스템이 아니며, Git 자체가 버전 컨트롤을 담당합니다. dvc 자체는 메타파일 기반으로 데이타 버전 컨트롤을 수행하며, 이렇게 add된 파일은 gitignore에 추가 되어 원격 저장소에 저장되는 것을 방지하는 방식이다. data/.gitignore 파일을 열어보면 다음과 같이 원격 저장소로 푸시될때 무시될 파일이 저장되어 있다.

data/.gitignore

DVC 버전이동

dvc 버전 이동을 하려면 git 명령어와 함께 사용합니다.

git checkout HEAD~1
dvc checkout

참고 문서