Kubernetes 이야기

dvc 본문

Kubernetes/MLOps

dvc

kmaster 2023. 9. 8. 13:08
반응형

DVC는 Data Version Control 의 약자로, 머신러닝 프로젝트에서 모델과 데이터의 버전 관리를 위한 오픈 소스다. 

 

데이터의 버전은 크게 데이터 관리와 실험관리로 분리하여 고려할 수 있다. 보통 데이터 관리의 목적으로 많이 사용된다.

 

  • 데이터 관리 - 코드와 함께 대량의 데이터를 추적하고 버전을 관리하며 DVC를 재현 가능한 데이터 기반 파이프라인을 위한 빌드 시스템으로 사용한다.
  • 실험 관리 - 코드만 계측하여 실험과 진행 상황을 쉽게 추적하고, 소프트웨어 엔지니어가 코드에 대해 수행하는 것처럼 ML 실험에 대해 협업한다.

dvc의 워크플로우에는 다음과 같이 것을 사용할 수 있다.

작업 예제
데이터 추적 $ git add train.py params.yaml
$ dvc add images/
코드와 데이터 연결 $ dvc stage add -n featurize -d images/ -o features/ python featurize.py
$ dvc stage add -n train -d features/ -d train.py -o model.p -M metrics.json python train.py
실험 $ dvc exp run -n exp-baseline
$ vi train.py
$ dvc exp run -n exp-code-change
실험 비교 ​​선택 $ dvc exp show
$ dvc exp apply exp-baseline
코드 공유 $ git add .
$ git commit -m 'The baseline model'
$ git push
데이터 ML 모델 공유 $ dvc remote add myremote -d s3://mybucket/image_cnn
$ dvc push

 

dvc 작동방식

https://github.com/iterative/dvc

dvc는 단독으로 사용되는 것이 아니라 git과 같이 사용된다. git에는 ml에 필요한 실제 데이터를 저장하지 않고 데이터의 위치를 알 수 있는 메타데이터 (.dvc) 파일만 저장된다. 실제 데이터 파일은 s3,나 azure, google drive 등 외부 저장소에 저장하는 방식이다.

 

설치

# pip install dvc[all]

# dvc --version
3.19.0

 

프로젝트 생성

# mkdir dvc-sample
# cd dvc-sample

 

git 및 dvc 저장소 초기화

# git init
# dvc init
Initialized DVC repository.

You can now commit the changes to git.

+---------------------------------------------------------------------+
|                                                                     |
|        DVC has enabled anonymous aggregate usage analytics.         |
|     Read the analytics documentation (and how to opt-out) here:     |
|             <https://dvc.org/doc/user-guide/analytics>              |
|                                                                     |
+---------------------------------------------------------------------+

What's next?
------------
- Check out the documentation: <https://dvc.org/doc>
- Get help and share ideas: <https://dvc.org/chat>
- Star us on GitHub: <https://github.com/iterative/dvc>

 

실습

# mkdir data
# cd data
# vi test.txt
1 apple
2 strawberry
3 apple
4 apple
5 strawberry

 

1) dvc add

# dvc add data/test.txt
100% Adding...|██████████████████████████████████████████████████████████████████████████████████████████████|1/1 [00:00,  7.43file/s]

To track the changes with git, run:

        git add 'data\.gitignore' 'data\test.txt.dvc'

To enable auto staging, run:

        dvc config core.autostage true

이렇게 실행하면 data폴더에 test.txt.dvc 파일이 생성된다. 

# cat data/test.txt.dvc
outs:
- md5: 689256163e55008a6b9c809f6d6c9840
  size: 53
  hash: md5
  path: test.txt

data/.gitignore 파일의 내용은 다음과 같다. 즉, 실제 데이터는 git에 저장되지 않도록 예외처리하게 된다. git에는 개발자의 소스와 data의 메타데이터를 가지고 있는 dvc 파일만 저장하게 된다. 

# cat data/.gitignore
/test.txt

 

위의 메시지에서 나오듯이 git에 필요한 파일을 add한다. 

# git add data/test.txt.dvc data/.gitignore

 

2) 파일 저장 및 공유

 

그럼 이제 실제 data파일을 다른 저장소에 저장하는 방법을 알아보자. dvc는 s3, google drive, minio 등 여러 저장소를 지원하는데 google drive에 저장하는 방법을 알아보자.

# dvc remote add -d storage gdrive://<folder id>
Setting 'storage' as a default remote.

 

.dvc/config에 storage 관련 정보가 자동으로 저장된다. 해당 파일을 git에 commit 한다.

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

 

3) dvc push

 

 dvc push
  0% Checking cache in '1IJ-Y0wx2AYqKv7kK8prncziO-xxxx/files/md5'|                                      |0/? [00:00<?,    ?files/s]D:\Python3.11\Lib\site-packages\oauth2client\_helpers.py:255: UserWarning: Cannot access C:\Users\net29\AppData\Local\pydrive2fs\Cache\710796635688-iivsgbgsb6uv1fap6635dhvuei09o66c.apps.googleusercontent.com\default.json: No such file or directory
  warnings.warn(_MISSING_FILE_MESSAGE.format(filename))
Your browser has been opened to visit:

    https://accounts.google.com/o/oauth2/auth?client_id=xxx

Authentication successful.
1 file pushed

push 전 파일을 올릴 수 있는 권한을 체크하도록 로그인 화면이 브라우저에 자동으로 나타난다.

 

인증 완료 후 권한을 체크하면 자동으로 파일이 업로드 된다.

실제 google drive에 보면 아래와 같이 폴더들이 생성되고 파일이 업로된 것을 볼 수 있다.

실제 파일을 열어보면 data파일의 내용을 볼 수 있다.

1 apple
2 strawberry
3 apple
4 apple
5 strawberry

 

4) dvc pull

 

remote 스토리지에 저장된 파일을 가져오고자 하는 경우 실행한다. 기존 data.txt 파일을 삭제 후 pull 해보자.

# rm data/test.txt

# dvc pull
A       data\test.txt
1 file added

 

5) dvc checkout

 

현재까지의 내용을 commit 후 data파일을 수정해 보자.

# vi data/test.txt
1 apple
2 strawberry
3 apple
4 apple
5 strawberry
6 apple  <---- 추가

# dvc add data/test.txt
# dvc push

# git add .
# git commit -m "add data"
[master a8a8b8a] add data
 1 file changed, 2 insertions(+), 2 deletions(-)

 

이제 git의 이전 버전으로 롤백해보자.

# git log
# git checkout d6e96a632a571206224633c2e6541fe8b5793649
# dvc checkout
# cat data/test.txt
1 apple
2 strawberry
3 apple
4 apple
5 strawberry

 

dvc checkout을 실행하면 이전 데이터가 로드되는 것을 확인할 수 있다.

 

dvc는 cli 뿐만 아니라 python api를 제공하고 있어 개발자들이 dvc 를 통해 자유롭게 데이터를 관리할 수 있는 장점이 있다.

반응형

'Kubernetes > MLOps' 카테고리의 다른 글

MLflow Serving  (0) 2023.09.09
mlflow  (0) 2023.09.09
KServe, Seldon Core, BentoML 비교  (0) 2023.04.03
Kubeflow - Pipeline  (0) 2023.03.26
MLFlow vs Kubeflow  (0) 2023.03.06
Comments