Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Data Version Control (DVC) 적용하기 #33

Closed
ArtemisDicoTiar opened this issue Aug 3, 2021 · 12 comments
Closed

Data Version Control (DVC) 적용하기 #33

ArtemisDicoTiar opened this issue Aug 3, 2021 · 12 comments
Assignees

Comments

@ArtemisDicoTiar
Copy link
Member

Why?

파이썬 파일, 설정 json등의 간단한 파일들은 git을 통해 버전 트레킹이 가능하며 Github에 업로드가 가능하다.
하지만 용량이 큰 파일 (약 2GB이상)의 경우 git에서는 트레킹이되지만 Github에 업로드가 불가능하다.
깃헙에 대용량 파일 업로드가 불가한 정책이 있기 때문이다. (아마도 용량이 큰 하나의 파일로 인해 전체 프로젝트의 깃 부피가 지나치게 커지는 것을 막기 위함인 것 같다.)
최근 딥러닝, 머신러닝등 기계 학습 기반의 모델들(serialised되었을 때 부피가 큼)을 연구하고 produce하는 society가 늘어남에 따라 위와 같은 큰 volume의 파일을 트레킹하는 데에 유용한 툴들이 개발되었다.

우리의 프로젝트의 경우, 데이터셋이 꾸준히 업데이트 되고, 모델 또한 개선책을 마련하여 버전이 올라갈것이다. 그렇기 때문에 효과적으로 히스토리를 기록할 수 있으면 좋은데 사람이 직접하기엔 귀찮음과 부정확함이 생길 수 있다.
그래서 git과 같은 버전 컨트롤 도구를 추가하려 하는데 그중, 최근 Github에서 start개수가 많고 실제 ML프로젝트에서 많이 적용되는 것으로 보이는 DVC를 우리 프로젝트에 적용하려한다.

What?

DVC를 이용해 데이터셋, 모델 (serialised file)의 버전컨트롤을 해보자.
일단은 Version_0만 적용.
remote 저장소는 최근에 만든 wisdomify.project의 구글 드라이브로.

@ArtemisDicoTiar ArtemisDicoTiar self-assigned this Aug 3, 2021
@ArtemisDicoTiar
Copy link
Member Author

ArtemisDicoTiar commented Aug 3, 2021

버전 컨트롤해야하는 디렉토리

./wisdomify
--- /data
--- --- /lightning_logs
--- --- /torchServeModels
--- --- /수집한 데이터 (tsv 포맷)

@ArtemisDicoTiar
Copy link
Member Author

ArtemisDicoTiar commented Aug 3, 2021

주의

사용자의 컴퓨터에 설치해둬야 dvc사용이 가능하다. 반드시 설치!

설치 방법

공홈 링크에 설명되어 있는 것처럼 그냥 각 OS에 맞게 설치하면 될것 같다.
다만 pip, conda 등의 명령어를 통해서도 설치 가능해보인다.

난 pip으로 해보고 안되면 공홈에 있는 MacOS용 .pkg파일을 다운받아 설치해보려한다.

pip으로 설치된다! XD
파이썬으로 설치했더니 이런 에러가 뜨네... ㅠ

AttributeError: module 'enum' has no attribute 'IntFlag'

파이썬에서 지우고 pkg로 다시 설치해야겠다... (brew로도 된다!)

brew install dvc

ArtemisDicoTiar added a commit that referenced this issue Aug 3, 2021
@ArtemisDicoTiar
Copy link
Member Author

ArtemisDicoTiar commented Aug 3, 2021

사용법

dvc init
dvc add {트레킹할 파일}
dvc push
dvc pull
dvc checkout

ArtemisDicoTiar added a commit that referenced this issue Aug 3, 2021
@ArtemisDicoTiar
Copy link
Member Author

ArtemisDicoTiar commented Aug 3, 2021

구글 드라이브로 설정하려면 공유폴더를 특정사람들과만 공유해야한다. 고한다. (anybody with link는 불확실하다고 한다 - 공홈 -)

구글 드라이브에 push 성공!

추가하는 방법!

// -d 파라미터는 default로 설정하기 위한 파라미터다.
// -f 파라미터는 기존에 있는 설정을 강제로 overwrite한다.
dvc remote add -d {리모트로 지정할 나만의 이!름!} {저장소타입}://{저장소별 path 혹은 ID}

// for Google Drive
dvc remote add -d myGDrive gdrvie://{폴더 ID}

폴더 ID는 해당 폴더를 공유할 때 생기는 링크에서 가장 마지막 path명이다.
예시)
https://drive.google.com/drive/u/1/folders/{폴더ID}

추후에 수정도 가능하다
dvc remote modify {내가 지정한 이름} {수정할 변수} {수정할 변수의 값}

dvc remote list 로 등록된 remote의 목록 확인이 가능하다.

@ArtemisDicoTiar
Copy link
Member Author

오 오 신기하다 dvc add 로 추가한 파일은 더이상 git에 트래킹 안되게 gitignore에 파일이 추가된다.

@ArtemisDicoTiar
Copy link
Member Author

ArtemisDicoTiar commented Aug 3, 2021

주의사항

git push를 한다고 해서 데이터셋이나 모델이 푸시되지 않는다. dvc push를 해야 리모트 저장소로 푸시된다.
고로 순서는

git add {코드파일}
dvc add {큰 볼륨의 데이터 파일} // → 이 작업을 시행하면 gitignore가 업데이트된다.
git add {추가한 파일의 path.dvc} // dvc add 함에 따라 생성되는 파일이다.
git commit -m "{커밋 메시지}"
git push
dvc push

위에 쓴 코맨트처럼 dvc pull로 데이터 가져오기, dvc checkout으로 특정 커밋으로 체크아웃 모두 가능하다.

  • 주의: checkout의 경우, 반드시 git checkout {체크아웃할 위치} 한 뒤에 dvc checkout을 해야한다. 그래야 해당 깃 커밋 위치에 맞게 데이터가 체크아웃된다.

@ArtemisDicoTiar
Copy link
Member Author

리모트 저장소 목록

  • Amazon S3
  • S3 compatible storage
  • MS Azure Blob
  • Google Drive
  • (GCP) Google Cloud Storage
  • Aliyun OSS
  • SSH
  • HDFS
  • WebHDFS
  • HTTP
  • WebDAV
  • local remote

@ArtemisDicoTiar
Copy link
Member Author

ArtemisDicoTiar commented Aug 3, 2021

저장 후의 google drive의 디렉토리 내용물이 다음과 같다.
신기하네 사람이 알아보기엔 힘들어 보인다.
Screenshot 2021-08-03 at 17 25 29

@ArtemisDicoTiar
Copy link
Member Author

파이참 (IntelliJ 기반)에 dvc 플러그인이 있다!
그냥 .dvc 파일 좀더 이쁘게 보이는 게 다인가...?

@ArtemisDicoTiar
Copy link
Member Author

dvc status로 현재 트래킹 상태 확인 가능하다.

@ArtemisDicoTiar
Copy link
Member Author

+ α

오 DVC에 생각보다 다양한 기능이 많다.

pipeline
버저닝 말고도 파이프라인 구축도 된다.
대충 보니 pre-processing처리위주로 되는 듯. (ETL 워크플로우 처럼 → (Apache) Airflow, Azkaban, and Oozie)

data & model access

해당 프로젝트 밖에서도 dvc get으로 파일 가져올 수 있고 (파이썬에서 dvc.api로 해당 api를 사용할 수 있다.)

Experiment
실험도 가능! recall, acc 등의 metrics 측정 결과 테이블로 CLI에서 보여준다.

@ArtemisDicoTiar
Copy link
Member Author

일단 위에 있는 기능들을 말그대로 플러스 알파적인 요소라 여기까지만!
PR 날리고 끝내야겠다

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants