MLops/DVC

[DVC] Data Version Control | 데이터와 모델 버전관리

제일리 2023. 1. 22. 12:22

DVC,  왜 필요한가?

- data science 프로젝트를 하면서 수많은 파일과 모델 그리고 데이터셋을 다룬적이 있을 것이다.

- 이러한 파일들에 대해서 버전 관리를 도와주는 오픈소스 도구이다.

- Git 에는 대용량 파일을 업로드할 수 없다.

- DVC를 이용해서 dvc 파일을 Git에 올리면 된다.

 

https://github.com/iterative/dvc

* DVC 에 대한 더 자세한 내용은 gitgub 링크 확인 바랍니다. https://github.com/iterative/dvc

 

1. DVC 및 Git 설치

* DVC를 이용하기 위해서는 Git도 함께 사용하게 됩니다. Git에 대한 기본적인 이해가 있다는 가정하에 아래 설명을 하겠습니다.

sudo apt install upgrade pip

# 깃 설치
sudo apt install git

# dvc 설치 , [all] 은 저장되는 remote storage에 대한 옵션으로 s3,gs,azure,oss,ssh가 있습니다.
pip install dvc[all]

2. DVC 저장소 설정

Step:

1) 작업할 directory로 이동 

2) git init / dvc init

3) add / commit / push 

4) pull

 

아래 예시에 대한 directory 설명

DO_IT
-- DATA
    -- Train.csv
    -- Test.csv
    
-- MODEL
    -- LinearRegression.py
    -- RandomForest.py
    
-- CONFIG
    -- config.yaml

* FILE TRACKING

# 작업할 폴더의 경로로 이동해주세요. ex) DO_IT 폴더
cd ~/DI_IT

# DATA에 있는 Train.csv 에 대해서 dvc로 tracking.
dvc add DATA/Train.csv

### Git에도 마찬가지로 add해줘야 버전 관리가 가능합니다.
### dvc add를 하면 gitignore 파일도 생성됩니다.
git add DATA/Train.csv DATA/.gitignore

# DATA 폴더에 가면 .dvc 확장자의 파일이 생성된 것을 확인할 수 있습니다.
cd DATA
ls
# --> Train.csv Train.csv.dvc Test.csv

* COMMIT & PUSH

#git을 이용해서 dvc파일을 관리할 것이라고 했습니다. 따라서 .dvc 파일을 git push해줘야 합니다.
git commit -m "Add train.csv.dvc"

git push

여기서부터는 우리가 깃헙에 작업한 파일을  push하는 것과 같이 dvc에도 remote storage를 설정해줘야 합니다.

 

** Google Drive를 remote storage로 설정하는 경우

아래 캡처 이미지에서 드레그 된 부분을 이용할 것 입니다.

드라이브의 폴더를 remote storage로 설정

# 구글 드라이브 폴더를 remote storage로 설정
dvc remote add -d gdrive://<드레그 된 부분 : 폴더 ID>

# remote storage 설정 후 
git add .dvc/config
git commit -m "set remote storage"

# dvc 로 push 하게 되면 구글 드라이브 인증 링크가 뜨면서 인증을 해주면 됩니다.
# 그러고 나면 파일들이 모두 구글 드라이브 폴더에 업로드 됩니다.
dvc push

* PULL

* push 했던 데이터에 대해서 내 로컬에 파일이 없다는 가정하에 진행되야 함으로 캐시와 데이터를 삭제해줍니다.

# 현재 경로 DO_IT 폴더
cd DATA

#캐시 및 데이터 삭제
rm -rf .dvc/cache/
rm -rf Train.csv

# 구글 드라이브에서 pull, 현재 remote add 로 이미 구글 드라이브로 storage 가 설정되어 있음.
dvc pull

* 버전 변경

#이전에 push 해놓은 Train.csv를 다시 가져와야 할 때, 이전 버전으로 변경할 수 있습니다.

## git log를 확인하여 커밋 해시를 확인합니다.
git log --online

# Train.csv.dvc 파일을 이전 commit한 버전으로 되돌립니다.
git checkout <COMMIT_HASH> DATA/Train.csv.dvc

# 변경한 Train.csv.dvc 내용을 보고 이전 버전의 Train.csv를 변경합니다.
dvc checkout

**  부가 설명 Git checkout

git checkout은 브랜치 변경할 때 쓰는게 아닌가요?

 

Git Checkout 은 두 가지 기능이 있습니다.

1) 브랜치 혹은 커밋 전환

2) 내용 되돌리기

 

# 특정 브랜치로 이동 
git checkout {Branch Name}

# 특정 파일의 작업할 내용 삭제 - ADD, COMMIT 이전단계에서 가능
git checkout --{File Name}

특정 Commit 버전으로 전환 - COMMIT 되지 않은 내용이 있다면 전환되지 않음.

git log --online #커밋 해시 확인
git checkout {Commit Hash}