쿠베플로우 개요
코드 배포를 자동화하는 일반적인 소프트웨어 엔지니어링과 다르게, ML 문제에서는 다른 여러 문제도 고려된다.
ML project에서는 위와 같은 여러 파이프라인을 관리할 수 있어야 하는데, 추적하고 재사용이 가능하게 만들어놓은 오픈소스가 바로 Kubeflow다.
기능
1. 조합가능성
- 각각의 단계에 필요한 툴이나 라이브러리를 독립적으로 사용할 수 있다.
- End-to-End 파이프라인을 형성하기 위해 함께 구성도 가능
2. 이식성
- 컨테이너 기반 설계 + CLoud native 아키텍쳐 활용
- 특정 개발환경에 종속될 필요가 없다.
3. 확장성
- Kubernetes 기반으로, 컨테이너 개수와 크기를 클러스터의 요구에 따라 동적으로 확장 가능
쿠베플로우 아키텍쳐
1. 대시보드
쿠베플로우의 주요 인터페이스는 센트럴 대시보드이다.
파이프라인 등록, 파이프라인 실행, 실험 내역 안에서 컴포넌트 실행 결과 확인 등을 할 수 있다.
2. 탭
주요 탭에서는 Jupyter notebook, Pipeline, Katib을 사용할 수 있다.
3. Kubeflow pipelines Argo
Argo는 orchestration tool이다.
- Airflow에서 여러 DAG를 정의해서 썻듯이, 각각의 job들에 대한 dependency를 정의할 수 있다.
4. Istio
서비스 메쉬인데, 전체적인 구성요소를 한 번에 묶어 놓은 것이라고 정의할 수 있음
5. MinIO
GCP나 S3등 cloud native한 object storage의 표준을 가진 하나의 open source object storage이다.
pipeline 실행 시 component 간의 통신을 MinIO를 거쳐서 하게 된다.
즉, MinIO에서 파이프라인 중간에 생기는 부산물들(학습된 결과물, 체크포인트 등)을 저장할 수 있음
6. Katib
Hyperparameter tuning할 때 쓰는 AutoML 라이브러리
7. TFJobs
학습 등을 job으로 등록하면 알아서 학습을 한다
Offline batch inference할 때도 사용 가능
8. KFServing, TFServing
Serving과 Logging하는 모듈을 사용할 수 가 있음
Online Inference Server를 KFServing으로 배포할 수 있음
- 프로젝트 시작 시, 데이터셋 로드 및 전처리, 모델 정의 등을 초반에 여러 시도를 할 때 Jupyter notebook을 많이 사용
- 어느 정도 모델, 데이터셋이 정리가 되면 이걸 파이프라인 형태로 바꾸는 작업이 필요 -> kubeflow에서 실험 과정을 표준화
- Airflow와 유사하지만, Argo 기반이므로 각각의 DAG가 Docker Image를 기반으로 수행이 된다.
쿠베플로우 파이프라인
Python function이 있으면, 함수에 decorator를 달아줄 수가 있다.
Decorator를 달아주면, pipeline component라는 형태로 추상화가 된다.
추상화가 되면 docker container image로 정의할 수가 있다.
컴파일러에서 build-python-component라는 명령을 사용하면, decorate된 함수를 docker image로 만들어준다.
다른 여러가지의 컴포넌트와 조합을 해서 파이프라인이라는 것을 만든다.
즉, 파이프라인은 여러 컴포넌트들의 상관관계로 정의가 된다.
이 파이프라인을 패키징하면 하나의 파이프라인이 완성이 된다.
파이프라인을 빌드하면 .yaml 파일 하나로 패키징할 수 있음 <- 파이프라인을 "컴파일"한다고 말함
이 yaml 파일을 zip 또는 tar.gz 형태로 패키징할 수 있음
이 파일을 가져다가 쿠베플로우 대시보드에 등록을 해서 파이프라인을 등록할 수도 있고, kfctl 명령으로 업로드할 수 있음
'IT_Study > Ops' 카테고리의 다른 글
[MLOps] Docker 개념 및 흐름 간단 정리 (1) | 2023.10.31 |
---|---|
[MLOps] 코드 품질 관리(Quality Control) 관련 개념 (0) | 2023.10.30 |
[MLOps] Machine Learning Pipeline에 대한 이해 (2) (0) | 2023.10.26 |
[MLOps] Machine Learning Pipeline에 대한 이해 (1) (2) | 2023.10.26 |
[공통 PJT] Ubuntu에서 Jenkins와 GitLab 연동해서 CI 해보기 (with Docker) (0) | 2023.08.20 |