일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- mlops
- blue/green
- kubernetes operator
- serving
- CI/CD
- argocd
- knative
- opensearch
- Kubernetes 인증
- Litmus
- 오퍼레이터
- operator
- nginx ingress
- CANARY
- Pulumi
- xdp
- MLflow
- eBPF
- gitops
- Kopf
- Continuous Deployment
- seldon core
- 카오스 엔지니어링
- Argo
- tekton
- Kubernetes
- keda
- Model Serving
- Kubeflow
- opentelemetry
- Today
- Total
Kubernetes 이야기
dvc 본문
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 작동방식
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 |