꿈을 향해 on my way

Git LFS 무료 데이터 초과 문제 공짜로 해결하기 - DVC (Data Version Control) 본문

데이터 사이언스 공부

Git LFS 무료 데이터 초과 문제 공짜로 해결하기 - DVC (Data Version Control)

박재성 2022. 7. 23. 08:29

 

이거 먼저 알고가자.

GitHub Repository 는 코드만 저장하는 곳이지 대용량 데이터를 저장하는 곳이 아니다

 

데이터 사이언스 프로젝트를 진행하다 보면, 대용량 데이터를 다루는 경우가 많다. 초보들은 GitHub Repository에 대용량 데이터를 포함한 디텍토리 전체를 올리려 한다. 이는 초보적인 실수다. 명심해라. GitHub Repository에 가볍게 코드만 저장하는 곳이지 대용량 데이터 를 업로드 하는 곳이 아니다. 대용량 데이터 관련 해결책은 보통 두 가지를 떠올린다.

 

1) Git LFS (Large File Storage)

: 100MB 이상 파일은 Git LFS를 이용해 GitHub Repository에 저장할 수 있다. 100MB가 조금 넘어가는 중소형 데이터는 Git LFS를 이용하는 것을 추천한다. 하지만, 사용량이 많아지고 2GB 넘어가는 대용량 데이터의 경우 아래와 같은 오류가 발생하고 추가로 서비스 비용을 지불해야 되는 문제가 생긴다. 

This repository is over its data quota. Purchase more data packs to restore access.

 

 

 

2) 대용량 데이터 삭제
: 다른 방법은, 디렉토리에 대용량 데이터 자체를 없애는 것. 클라우드 스토리지 (AWS, Gdrive)에 대용량 데이터를 올리고 코드로 클라우드 스토리지로 부터 직접 데이터를 불러온다. 깔끔하고 좋은데 문제가 Git에 데이터가 포함되어 있지 않기 때문에 데이터는 Version Control 이 안된다. 보통의 경우 데이터 version control 가 필요 없지만 데이터 사이언스 프로젝트의 경우, 데이터가 계속 업데이트 되기 때문에 데이터 version control 이 필요할 때가 있다.

 

이 문제를 해결하기 위해 나온게 DVC (Data Version Control).

 

코드와 데이터를 분리해서 Version Control 한다는게 DVC의 핵심이다.

 

사용법 (w/  예시)

아래 두 파일, 파일을 GitHub Repository 에 올리고 싶다고 가정하자. 

  • foo.py
  • data/data.xml

data/data.xml  파일이 대용량이라 GitHub에 올리기 힘들다. 

 

1) git 심기

$ git init

먼저, 현 디렉토리에 git을 심는다.

 

 

2) dvc 심기

$ dvc init

같은 방법으로 dvc를 심는다.

 

 

3) dvc add

$ dvc add data/data.xml

(git add 와 같은 문법) dvc 에 data/data.xml 을 넣어준다.

 

 

4) git add

$ git add data/.gitignore data/data.xml.dvc

파일을 dvc add 하면 두가지 일이 발생한다.

1 - 해당 파일은 자동으로 .gitignore 에 포함되고 (똑똑하다. 어차피 이 파일을 dvc에 넣는다는 애기는 github repo에 넣지 않을것이라는 이야기와 마찬가지이니 .gitignore를 수정하지 않는 프로그래머의 실수를 미연에 방지해준다)
2 - 해당파일이름.dvc (e.g. data.xml.dvc) 파일이 생성된다.

 

 

5) git commit

$ git commit -m "Add raw data"

add 한 두 파일을 commit 해준다.

여기까지 했으면, 대용량 파일 (data/data.xml) 은 dvc와 연결됬고 추적 가능해졌다.

 

 

6) dvc remote

$ dvc remote add -d {storage_name} gdrive://{gdrive_id}
# e.g. dvc remote add -d storage gdrive://wleknglkwenlkgdfgergerg

git remote 와 비슷한 느낌으로 dvc의 원격저장소를 지정해준다.

  • -d : default 의미
  • storage_name은 아무이름
  • gdrive_id 는 아래 스크린샷처럼 URL로 알 수 있다.

이러면 .dvc/config 파일에 dvc 원격저장소 정보가 입력된다. 한번더 git commit 해준다.

 

7) .dvc/config 파일 git commit

$ git commit .dvc/config -m "Configure remote storage"

 

8) 클라우드 저장소 (Gdrive) 에 데이터 올리기

$ dvc push

위 코드를 실행하면, 어떤 링크가 나오고 verification code를 입력하라고 뜬다. 주어진 링크를 타고 들어가서 "Allow" 버튼을 누르면 verification code를 준다. 커맨드 프람트에 플러그인하면 끝.

verification code 입력하시오
verification code 입력 후 gdrive에 데이터 업로드 중

9) git push

$ git push origin master

지금까지 만든 커밋들을 GitHub Repository 에 push 해준다.

 

여기까지 하면 준비는 끝났다. 작업 후 GitHub Repository는 아래와 같이 생길 것이다.

  • .dvc/
  • .dvcignore
  • .gitignore
  • foo.py
  • data.dvc

의도했던대로 GitHub Repository 에는 대용량 데이터 (data/data.xml) 대신 종잇장처럼 가벼운 data.dvc 파일이 존재한다. 좋다. 셋팅은 끝났다. 그럼, 제 3자가 대용량 데이터 (data/data.xml) 를 어떻게 다운받을 수 있을까? 엄청 쉽다. (아래 참고)

 

(제 3자) 10)  git pull 

$ git pull

git pull 해서 해당 GitHub Repository를 로컬로 가져옴

 

 

(제 3자) 11)  dvc pull 

$ dvc pull

dvc pull 하면 아래와 같이 로컬환경에 데이터 다운받아짐. 

 

(끝)

 

 

P.S. 위의 예제에서는 Gdrive 만 다뤘는데 AWS S3와도 연동할 수 있다. 궁금하다면 jaeseongpark91@gmail.com으로 메일주시면 AWS S3 연동법도 알려드리겠습니다.

Comments