Engineering/MLOps
[MLOps] 07 Kubeflow
iamzieun
2023. 2. 8. 20:01
Kubeflow
- 성숙한 MLOps를 위해서는?
- Reproducibility: 실행 환경의 일관성 & 독립성
- Job Scheduling: 스케쥴 관리, 병렬 작업 관리, 유휴 자원 관리
- Auto-healing & Auto-scaling: 장애 대응, 트래픽 대응
kubeflow
- Machine Learning Toolkit for Kubernetes
- 각 역할마다 모듈을 쪼개서 개발됨
- Experimental 단계
- 문제 인식 + 데이터 수집 + 데이터 분석
- ML 알고리즘 선택 + 모델 설계
- 실험 + 학습
- hyperparameters 튜닝
- Production 단계
- Experimental 단계
구성 요소
- Central Dashboard: 웹 브라우저를 통해 각각의 micro service에 접속할 수 있는 통합 대시보드
- Notebook Server: kubernetis native하게 jupyter notebook 사용 가능
- KFServing (KServe): ml serving용 framework
- Katib: hyperparameter tuning, neural architecture search
- Training Operators: training of ML models in kubeflow through operators
- Multi Tenancy
Kubeflow Pipelines (KFP)
Pipeline
- 머신러닝 workflow를 DAG 형태로 정의한 것
- kubeflow에 배포 후 run하면 pipeline을 구성하는 각각의 component들이 k8s 위에서 pod로 생성되어 서로 데이터를 주고받으며 흘러감
- 즉, model을 serving까지 보내는데 필요한 모든 작업을 재사용 가능한 단위(component)로 나누고, k8s 위에서 연결시켜주는 역할
Pipeline의 Goal
- End to End Orchestration: ‘모델 연구 및 학습 과정’과 ‘serving 과정’의 괴리가 없도록
- Easy Experimentation: 다양한 configuration에 따라 수많은 시도를 쉽게 해볼 수 있음
- Easy Re-Use: 잘 설계된 kfp component들은 재사용이 가능하므로, 새로 pipeline을 만들 때의 작업 효율이 향상됨
how to make a kubeflow pipeline
- kubeflow pipeline은
- user의 입장에서: 머신러닝 workflow를 DAG 형태로 정의한 것
- kubeflow 입장에서: 하나의 argo workflow라는 custom resource에 불과
- user가 python 형태로 workflow를 작성하고 compile하면 → 쿠버네티스가 이해할 수 있는 형태의 argo workflow yaml 파일을 만들어주는 파이썬 sdk, dsa compiler를 제공
Deep Dive to Kubeflow Pipeline
- Python SDK: DSL(Kubeflow Pipelines domain-specific language)을 이용하여 component를 생성하거나, pipeline을 명시
- DSL compiler: pipeline의 Python 코드를 static configuration (YAML)로 변환
- Pipeline Service: Pipeline Service를 호출함으로써 static configuration (YAML)로부터 pipeline을 작동하게 함
- Kubernetes resources: Pipeline Service가 Kubernetes API server를 호출함으로써 pipeline을 실행하는 데 필수적인 Kubernetes resources(CRDs)를 생성
- Orchestration controllers: pipeline을 완성하는데 필요한 container들을 실행하며, container들은 가상 머신의 쿠버네티스 pod들 내부에서 실행됨
- Artifact storage: pod가 저장하는 두 종류의 data
- Metadata
- Artifacts
- Persistence agent and ML metadata: Persistence Agent는 Pipeline Service에 의해 생성된 쿠버네티스 리소스들을 지켜보고 ML Metadata Service에서 해당 리소스들의 상태(state)를 유지시킴. Persistence Agent는 실행되는 container와 그 input, output을 기록함. input과 output은 container 파라미터나 data artifact URI를 포함함.
- Pipeline web server: 다양한 서비스로부터 데이터를 수집하여 관련 사항들을 보여줌
- 현재 실행중인 pipeline 리스트, pipeline 실행 히스토리, data artifact의 리스트, 실행중인 개별 pipeline으로부터의 디버깅 정보, 실행중인 개별 pipeline의 실행 상태
- reference: https://www.kubeflow.org/docs/components/pipelines/v1/introduction/