MLOps

[MLOps] DVC(Data Version Control) 데이터 버전 관리 사용법

minimin2 2022. 9. 21. 22:34
반응형

DVC란?

DVC는 data version control의 약자로 데이터의 버전을 관리해주는 툴이다. 딥러닝/머신러닝 분야는 데이터가 핵심이기 때문에 데이터를 잘 관리해줄 필요가 있다.

소스 코드는 git등으로 쉽게 버전을 관리할 수 있지만 데이터는 대용량의 데이터가 대부분이기 때문에 git으로 관리할 수는 없다. 따라서 대용량의 데이터를 git처럼 쉽게 간단한 명령어를 통해 버전을 만들고 쉽게 checkout할수 있으며 원격 저장소에 저장까지 할 수 있게 만들었다.

사실 dvc는 데이터 버전 관리만 하는 것은 아니고, 실험 관리, CI/CD 등 ML에 활용되는 전체 파이프라인에 모두 활용할 수 있지만 이름인 DVC인 만큼 데이터 버전 관리하는 방법에 대해 알아보겠다.

DVC 설치

설치하는 방법은 매우 쉽다. 맥을 사용중이기 때문에 아래 명령어를 통해서 설치해준다. Windows, Linux

Mac

brew로 설치해도 되고 파이썬 패키지 관리자인 pip을 통해 설치해도 된다. 다만 pip로 설치할 때에는 가상환경을 사용할 것을 권장하고 있다.

brew install dvc
# 또는
pip install dvc

사용방법

초기화

dvc는 git과 연동해서 사용한다. 따라서 git에 대해 잘 이해하고 있어야 하고 git으로 초기화 해야한다. dvc도 git 처럼 똑같이 초기화 해준다.

git init
dvc init

버전관리할 데이터 등록

이제 샘플 데이터를 만들어서 관리한다고 가정한다고 진행한다. ver1라는 텍스트가 담긴 data.txt 파일을 생성한 후에, dvc로 등록해준다.

echo ver1 > data.txt
dvc add data.txt

그럼 위와 같이 data.txt.dvc 파일이 생성되는데 이제 git에서는 data.txt 파일이 아닌 data.txt.dvc 파일만을 관리한다. dvc에서 자동적으로 .gitignore에 data.txt 파일이 등록된다.

이는 git에서는 파일의 용량이 큰 데이터 자체를 관리하지 않고 dvc 파일만을 관리하기 위함이다. (여기서는 data.txt라는 아주 작은 텍스트 파일이지만 실제로는 GB, TB 단위로 훨씬 큰 데이터/폴더를 등록할 수 있다.)

위와같이 data.txt.dvc 파일에는 해당 파일에 대한 meta 정보가 담긴다. 나중에 이 .dvc 파일을 보고 데이터를 받을 수 있다.

이제 git으로 .dvc 파일과 .gitignore 파일을 커밋해주면 끝난다.

git add data.txt.dvc .gitignore
git commit -m "ver1 데이터"

그럼 데이터는 커밋하지 않았는데 어디있는지 궁금할텐데 실제 workspace의 .dvc/cache 폴더에 dvc가 알아 볼 수 있는 캐시 형태로 저장된다. 위의 예시처럼 .dvc/cache 폴더를 확인해보면 ver1라고 저장한 파일을 확인할 수 있다.

새로운 버전 등록

이제 2번째 버전을 만들고 새로운 데이터도 커밋해본다.

# ver2 데이터 만들기
echo ver2 > data.txt
# dvc, git에 추가, 커밋하기
dvc add data.txt
git add data.txt.dvc
git commit -m "ver2 데이터"

버전 간 이동

git 으로 원하는 버전의 커밋으로 checkout 해준 다음에 dvc checkout 하면 쉽게 데이터 버전 이동이 가능하다. 예시로 ver1 커밋으로 이동해서 데이터를 확인해본다.

git checkout HEAD~1
dvc checkout

원래의 최신 버전으로 돌아오려면 master로 checkout, dvc checkout 명령어를 사용해주면 된다.

git checkout master
dvc checkout

원격 저장소 사용

git에서는 github를 원격 저장소로 주로 사용한다. dvc도 git과 마찬가지로 원격 저장소를 지정해서 백업 및 관리 용도로 사용할 수 있다. dvc는 매우 다양한 원격 저장소를 지원한다. e.g. SSH서버, S3, google drive 등

클라우드를 사용하면 1원이라도 돈이 나갈 수 있으니 다른 local 폴더를 만들어 원격 저장소처럼 사용해본다. 따라서 dvc_remote 폴더를 미리 만들어 놓았다. 아래 명령어로 원격 저장소를 지정한다.

  • dvc remote add -d [이름] [경로:local, ssh, s3 등]
dvc remote add -d storage ../dvc_remote
git add .dvc/config
git commit -m "Configure remote storage"

그럼 이제 원격 저장소에 데이터를 push, pull하여 업데이트하거나 가져올 수 있다.

dvc push

위 터미널 창을 보면 dvc push 하면 remote 명령어로 지정했던 경로에 데이터가 저장된 것을 확인할 수 있다. 우리가 저장한 data.txt파일은 아니고 dvc가 알아 볼 수 있는 cache 형태로 저장된다.

협업하기

이제 원격 저장소까지 만들었으니 다른 사람들과 공유, 협업이 가능해진다. 다른 팀원이 해당 git 저장소를 clone하고 pull 해오면 데이터도 쉽게 받을 수 있고, 버전도 직접 바꿔가면서 사용할 수 있다.

예시로 또다른 local 폴더 dvc_test를 생성하여 그곳에서 데이터를 가져와 본다.

git clone ../dvc # github에 올렸다면 git clone [github주소] 
cd dvc
dvc pull

이상하게 위처럼 에러가 뜬다. 그 이유는 원래 저장소에서 원격 저장소를 ../dvc_remote로 상대경로를 사용했기 때문이다. local 저장소이기 때문에 실수를 한 것인데 해결방법으로는 2가지가 있다.

1. remote 경로를 절대경로로 수정

2. 현재 workspace의 remote 경로를 수정

1번은 위에서 다시 작업하면 되고 2번 방법으로 진행해보겠다.

아래 예시처럼 remote add 명령어에서 --local 옵션을 추가하면 현재 workspace에서만 적용하는 local.config 파일을 생성한다. 이 파일은 git이 관리하지 않기 때문에 다른 저장소에 영향을 주지 않는다.

dvc remote add --local -d storage ../../dvc_remote
dvc pull

--local 옵션으로 원격 저장소를 지정하면 workspace 내부에 .dvc/config.local 라는 파일이 생성되고 거기에 아까 지정한 경로가 적혀있다. local config를 우선 순위로 동작하기 때문에 dvc pull 명령어가 정상 동작한다.

이렇게 git과 dvc로 데이터를 등록하여 쉽게 버전 관리를 하고, 다른 서버 등 협업하는 팀원들간에 공유하는 방법을 알아보았다.

데이터 관리 명령어 정리

다시 한 번 데이터 버전 관리 명령어들을 쉽게 정리해봤다.

# workspace 초기화
git init
dvc init

# 데이터 등록 (dataset은 폴더)
dvc add dataset
git add . 
git commit -m "커밋메시지 e.g. v1"

# dataset 수정 후
dvc add dataset
git add dataset.dvc # 또는 git add .
git commit -m "커밋메시지 e.g. v2"

# 데이터 버전 이동
git checkout [원하는버전 커밋]
dvc checkout

# 원격 저장소 지정
git remote add -d [저장소이름] [저장소경로]
dvc push

# 다른 workspace에서
git clone [위의 git 저장소]
dvc pull

참고자료

https://dvc.org/doc


Uploaded by N2T

반응형