호돌찌의 AI 연구소
article thumbnail

 이번 글은 DVC를 한번 해볼 생각입니다. Git이랑 상당히 유사하기 때문에 편하게 이해하실 수 있을 것 같습니다. 

환경과 확인 명령어은 다음과 같습니다. 

- python 3.9.7 (python -V)

- git version 2.25.1 (sudo apt install git 후 git --version)

- dvc 2.6.4 (pip install dvc[all]==2.6.4 후 dvc --version)

[all]은 dvc 의 remote storage로 s3, gs, azure, ssh 모두를 사용할 수 있도록 관련 패키지를 함께 설치하는 옵션입니다. 

그럼 시작해보겠습니다. 

 


1. dvc 저장소 세팅 

- dv-tutorial이라는 폴더를 생성합니다. 그 후 이동합니다.

- 해당 디렉토리를 git 저장소로 초기화합니다.

- 해당 디렉토리를 dvc 저장소로 초기화합니다. 

mkdir dvc-tutorial

cd dvc-tutorial

git init

dvc init

여기까지 오면 초기화가 성공한 것이다. 

 

 

2. DVC 기본명령 - tracking 부터 push 까지

- 1) dvc로 버전 tracking 할 data를 생성해봅니다. data는 가지고 있는 데이터를 하셔도 좋고 아무 데이터든 상관없습니다. 저는 그냥 편하게 vi로 하나 생성하겠습니다. 내용도 "Hello hoyoung"이라는 텍스트를 삽입하겠습니다. 

# data 를 저장할 용도로 data 라는 이름의 디렉토리를 생성하고 이동
mkdir data

cd data

# 가볍게 변경할 수 있는 데이터를 카피해오거나, 새로 생성
vi demo.txt

cat demo.txt
# Hello hoyoung

- 2) 방금 생성한 데이터를 dvc로 tracking 합니다. 

cd ..

dvc add data/demo.txt

# To track the changes with git, run:
git add data/.gitignore data/demo.txt.dvc

 

tracking할 data 생성 후 dvc로 tracking

- 3) dvc add로 의해 자동 생성된 파일 내용을 한번 확인해보기

cd data
ls
# demo.txt.dvc 파일이 자동 생성된 것을 확인

cat demo.txt.dvc
# demo.txt 파일의 메타정보를 가진 파일
# git 에서는 demo.txt 파일이 아닌, demo.txt.dvc 파일만 관리

dvc 파일을 열어보면 meta정보가 있는 것을 확인할 수 있다.

- 4) 그다음 커밋을 수행합니다. .dvc 파일은 git push를 수행하여 git repository에 저장됩니다. 

- 5) data가 실제로 저장될 remot storage를 세팅합니다. 본인의 구글 드라이브에 새로운 폴더를 생성 후 url로부터 ID를 복사합니다. 

/folders/ 이후의 부분을 복사하면 됩니다. 

- 6) 폴더 ID를 복사 후 아래와 같은 명령어를 수행합니다. 

dvc remote add -d storage gdrive://<GOOGLE_DRIVE_FOLDER_ID>
# dvc 의 default remote storage 로 gdrive://<GOOGLE_DRIVE_FOLDER_ID> 를 세팅

 

- 7) dvc config를 git commit 합니다. 

git add .dvc/config
git commit -m "add remote storage"

 

- 8) dvc push를 하여 데이터를 remote storage에 업로드합니다. 아래 구글 드라이브 로그인 인증을 수행하여 복사를 합니다. 

dvc push

 복사하여 verification code를 입력하면 아래와 같이 나타나면 성공입니다.

- 9) push 된 데이터가 있는지 구글 드라이브에서 확인해보겠습니다. 

 

정체불명의 폴더가 하나 생겨있다
이렇게 막 생겨먹은 파일을 다운받아본다
다운 받은 데이터를 메모장으로 열면 내용이 잘 들어있는 것을 확인할 수 있다.

 

 

 

 

3. DVC 기본 명령 - Pull 해보고 이전 데이터로 돌아가보기

- 1) data를 remote storage로부터 다운로드합니다. 일단 dvc 캐시를 삭제하고 push 했던 데이터를 지우고 pull을 해보겠습니다.

cd dvc-tutorial

# dvc 캐시를 삭제
rm -rf .dvc/cache/
# dvc push 했던 데이터를 삭제
rm -rf data/demo.txt

# dvc pull 로 google drive 에 업로드했던 데이터를 다운로드
dvc pull

# 방금 다시 다운받은 데이터가 이전 데이터와 동일한지 확인
cat data/demo.txt

성공!

 

- 2) dvc checkout을 해봅니다. 즉 data의 버전 변경하는 명령어입니다. 버전 변경 테스트를 위해 새로운 버전의 data를 dvc push 합니다.

# 데이터를 변경합니다. 저는 hello hoyoung 을 bye hoyoung 으로 변경하였습니다.
vi data/demo.txt

# 변경되었는지 확인합니다.
cat data/demo.txt

# dvc add (data/demo.txt.dvc 를 변경시켜주는 역할)
dvc add data/demo.txt

# git add and commit
git add data/demo.txt.dvc
git commit -m "update demo.txt"

# dvc push (and git push)
dvc push # 새로운 버전의 data 파일을 remote storage 에 업로드

(git push) # .dvc 파일을 git repository 에 업로드

구글 드라이브로 이동해 새 파일이 정상적으로 업로드가 되었는지, 다운로드한 파일의 내용이 바뀌었는지 확인해보겠습니다.

또 다른 번호의 폴더가 생겼음을 알 수 있다.
45 폴더로 가서 다운받아 메모장을 열어보면 데이터가 변경되었음을 알 수 있다.

- 3) 이전 버전 데이터로 돌아가보기

# git log 를 확인합니다. "1824276"이라는 hash로 돌아갈 예정.(아래 그림 참고)
git log --oneline

# demo.txt.dvc 파일을 이전 commit 버전으로 되돌립니다.
git checkout <COMMIT_HASH> data/demo.txt.dvc

# dvc checkout 합니다. (demo.txt.dvc 의 내용을 보고 demo.txt 파일을 이전 버전으로 변경)
dvc checkout

# 데이터가 변경되었는지 확인
cat data/demo.txt

 

 

 

4. 마치며

가장 기본적인 부분만을 다루어보았습니다. 자주 쓰이면서 더 심화적인 내용, 추가 기능 관련된 내용은 아래를 한번 참고해보시길 바랍니다. 

- python api를 사용한 제어

https://dvc.org/doc/api-reference

 

Python API Reference

Open-source version control system for Data Science and Machine Learning projects. Git-like experience to organize your data, models, and experiments.

dvc.org

- DAG를 통한 Data Pipeline 관리

https://dvc.org/doc/start/data-pipelines

 

Get Started: Data Pipelines

Learn how to build and use DVC pipelines to capture, organize, version, and reproduce your data science and machine learning workflows.

dvc.org

- 이외에도 S3, SSH, HDFS 등의 remote storage 연동하기

- dvc metrics, dvc plots를 사용한 각 실험의 metric 기록 및 시각화 

 

 


https://bit.ly/37BpXiC

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

 

* 본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

 

 

 

 


profile

호돌찌의 AI 연구소

@hotorch's AI Labs

포스팅이 도움이 되셨다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!