이번 글은 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
- 3) dvc add로 의해 자동 생성된 파일 내용을 한번 확인해보기
cd data
ls
# demo.txt.dvc 파일이 자동 생성된 것을 확인
cat demo.txt.dvc
# demo.txt 파일의 메타정보를 가진 파일
# git 에서는 demo.txt 파일이 아닌, demo.txt.dvc 파일만 관리
- 4) 그다음 커밋을 수행합니다. .dvc 파일은 git push를 수행하여 git repository에 저장됩니다.
- 5) data가 실제로 저장될 remot storage를 세팅합니다. 본인의 구글 드라이브에 새로운 폴더를 생성 후 url로부터 ID를 복사합니다.
- 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 에 업로드
구글 드라이브로 이동해 새 파일이 정상적으로 업로드가 되었는지, 다운로드한 파일의 내용이 바뀌었는지 확인해보겠습니다.
- 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
- DAG를 통한 Data Pipeline 관리
https://dvc.org/doc/start/data-pipelines
- 이외에도 S3, SSH, HDFS 등의 remote storage 연동하기
- dvc metrics, dvc plots를 사용한 각 실험의 metric 기록 및 시각화
* 본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
'AI > MLOps' 카테고리의 다른 글
[패스트캠퍼스 챌린지 16일차] MLflow 튜토리얼 (1) (0) | 2022.02.08 |
---|---|
[패스트캠퍼스 챌린지 15일차] Model Management 개념 (0) | 2022.02.07 |
[패스트캠퍼스 챌린지 13일차] DataManagement 개념 (0) | 2022.02.05 |
[패스트캠퍼스 챌린지 12일차] Service & PVC (0) | 2022.02.04 |
[패스트캠퍼스 챌린지 11일차] Deployment (0) | 2022.02.03 |