IT_Study/Ops

[MLOps] Kubeflow 개요 : 아키텍쳐 및 파이프라인 이해

__Vivacé__ 2023. 10. 27. 14:22

쿠베플로우 개요

코드 배포를 자동화하는 일반적인 소프트웨어 엔지니어링과 다르게, ML 문제에서는 다른 여러 문제도 고려된다.

Chris Song님 MLOps 강의 일부 / ML code는 전체 프로젝트의 5%밖에 되지 않는다.

 

ML project에서는 위와 같은 여러 파이프라인을 관리할 수 있어야 하는데, 추적하고 재사용이 가능하게 만들어놓은 오픈소스가 바로 Kubeflow다.

 

기능

1. 조합가능성

Chris Song님 MLOps 강의 일부

 - 각각의 단계에 필요한 툴이나 라이브러리를 독립적으로 사용할 수 있다.

 - End-to-End 파이프라인을 형성하기 위해 함께 구성도 가능

 

2. 이식성

Chris Song님 MLOps 강의 일부

 - 컨테이너 기반 설계 + CLoud native 아키텍쳐 활용

 - 특정 개발환경에 종속될 필요가 없다.

 

3. 확장성

Chris Song님 MLOps 강의 일부

 - Kubernetes 기반으로, 컨테이너 개수와 크기를 클러스터의 요구에 따라 동적으로 확장 가능

 


쿠베플로우 아키텍쳐

Kubeflow architecture / https://otzslayer.github.io/kubeflow/

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를 기반으로 수행이 된다.

 


쿠베플로우 파이프라인

출처 : awscloud

 Python function이 있으면, 함수에 decorator를 달아줄 수가 있다.

 Decorator를 달아주면, pipeline component라는 형태로 추상화가 된다.

 추상화가 되면 docker container image로 정의할 수가 있다.

 

출처 : awscloud

 컴파일러에서 build-python-component라는 명령을 사용하면, decorate된 함수를 docker image로 만들어준다.

 

출처 : awscloud

 다른 여러가지의 컴포넌트와 조합을 해서 파이프라인이라는 것을 만든다.

 즉, 파이프라인은 여러 컴포넌트들의 상관관계로 정의가 된다.

 이 파이프라인을 패키징하면 하나의 파이프라인이 완성이 된다.

 

출처 : awscloud

 파이프라인을 빌드하면 .yaml 파일 하나로 패키징할 수 있음 <- 파이프라인을 "컴파일"한다고 말함

 이 yaml 파일을 zip 또는 tar.gz 형태로 패키징할 수 있음

 

 이 파일을 가져다가 쿠베플로우 대시보드에 등록을 해서 파이프라인을 등록할 수도 있고, kfctl 명령으로 업로드할 수 있음