( reference : 쿠브플로우, 쿠버네티스에서 머신러닝이 처음이라면! )
[ 2. Kubeflow Components ]
Contents
- 2.0 서론
- 2.1 Dashboard
- 2.2 Notebook Servers
- 2.3 Fairing
- 2.4 Katib
- 2.5 Pipeline
- 2.6 Training of ML models
- 2.7 Serving Models
2.4 Katib
2.4.1 소개
- 역할 2가지
- 1) Hyperparameter Optimization ( HyperOpt )
- 2) Neural Architecture Search ( NAS )
- kubeflow 설치 시, Jupyter notebook과 함께 쉽게 실행할 수 있는 컴포넌트
2.4.2 Hyperparameter tuning
Hyperparameter의 예시
- learning rate
- dropout rate
- # of layer
- cost function
\(\rightarrow\) 이 tuning 과정을 자동화 할 수 있도록 도와줌!
2.4.3 Neural Architecture Search ( NAS )
AutoML의 하나인 NAS : 최적의 NN을 디자인하기 위해 사용
다양한 방법으로 NAS를 실행
- Katib는 강화학습 기반으로 탐색을 함
2.4.4 Architecture
Katib는 크게 4가지 개념으로 구성
- 1) Experiment : 최적화 “실행 단위” ( 하나의 job )
- 총 5개의 영역으로 나뉨
- 1-1) Trial Count
- 1-2) Trial Template
- 1-3) Objective
- 1-4) Search Parameter
- 1-5) Search Algorithm
- 2) Trial : 최적화 과정의 “반복 단위”
- 1-1)의 Trial Count 만큼 Trial이 생성됨
- 하나의 Trial에서 하나의 Worker Job이 실행됨
- 3) Suggestion :
- 1-3)의 Search Algorithm을 통해 생성된 하이퍼파라미터 값의 모음(후보)
- 하나의 Experiment 당 하나의 Suggestion이 생성됨
- Experiment에서 설정된 Paramter & Algorithm이 만들어낸 value를 각 trial에 제공
- 4) Worker Job :
- paramter & suggestion 값을 가지고 trial를 평가하며, 목표값을 계산
2.4.5 Experiment
- CRD (Customer Resource Definition)으로 정의
example
apiVersion: "kubeflow.org/v1alpha3"
kind: Experiment
metadata:
namespace: kubeflow
labels:
controller-tools.k8s.io: "1.0"
name: handson-experiment-1
spec:
parallelTrialCount: 5 #----------------(1)
maxTrialCount: 30 #----------------(2)
maxFailedTrialCount: 3 #---------------(3)
objective: #---------------------------(4)
type: maximize
goal: 0.99
objectiveMetricName: Validation-accuracy
additionalMetricNames:
- accuracy
- loss
- Validation-loss
algorithm: #---------------------------(5)
algorithmName: random
trialTemplate: #-----------------------(6)
goTemplate:
rawTemplate: |-
apiVersion: batch/v1
kind: Job
metadata:
name:
namespace:
spec:
template:
spec:
containers:
- name:
image: brightfly/katib-job:handson
command:
- "python"
- "/app/katib_keras_mnist.py" #-----------------(7)
- "="
restartPolicy: Never
parameters: #-----------------------------------------(8)
- name: --learning_rate
parameterType: double
feasibleSpace:
min: "0.01"
max: "0.03"
- name: --dropout_rate
parameterType: double
feasibleSpace:
min: "0.1"
max: "0.9"
- (1) parallelTrialCount : 병렬로 실행될 trial의 수
- (2) maxTrialCount : 최대로 실행될 trial의 수
- (3) maxFailedTrialCount : Trial의 실패 한도 수
- (4) objective : 수집할 대상에 대한 metric
- (5) algorithm : hyperparamter search algorithm
- (6) trialTemplate : trial의 template
- (7) 설정한 파라미터의 iteration 구문
- (8) hyperparameter의 입력 값
하나의 Trial 실행하기 :
$ python /app/katib_keras_mnist.py -learning_rate=0.012--dropout_rate=0.381
2.4.6 검색 알고리즘
- 1) grid search
- 2) random search
- 3) bayesian optimization
- 4) HYPERBAND
- 5) Hyperopt TPE
- 6) NAS based on reinforcement learning
2.4.7 Metric collector
각 trial의 metric ( ex. accuracy, loss 등 ) 을 수집한다
collector의 타입을 정의
- 1) stdout ( default 값)
- 2) file
- 3) tensorflow Flow Event
- 4) custom
- 5) None
2.4.8 Component
Katib는 여러 종류의 component로 구성됨
각 component는 kubernetes의 deployment로 실행
- katib-manager
- katib-db
- katib-ui
- katib-controller
2.5 Pipeline
2.5.1 소개
-
컨테이너 기반의 end-to-end ML workflow를 만들고 배포할 수 있는 쿠버네티스 플랫폼
( 컨테이너 기반 : 확장성 & 재사용성 good )
-
kubernetes의 자원을 관리하기 위해, 백엔드 프레임워크로 argo라는 worflow tool을 사용
kubeflow pipeline의 구성
- 1) experiment, job, run을 추적/관리하는 UI
- 2) ML workflow 단계별 scheduling 엔진
- 3) pipeline & 그 component들이 생성하는 SDK
- 4) SDK와 연동하는 jupyter notebook
kubeflow pipeline이 지향하는 바
- 1) 쉬운 pipeline 구성
- 2) 쉬운 pipeline 생성
- 3) 쉬운 재사용
2.5.2 Pipeline
-
workflow의 component들이 “그래프 형태로 결합”된 것
-
입/출력에 대한 정의도 포함
-
pipeline을 통해 업로드/공유 가능
-
pipeline component는 docker image로 패키징
& 그래프 결합 형태에 따라 순서대로 실행
-
과정 )
- 파이프라인이 실행되면,
- 각 단계에 맞는 pod를 실행
- 각 pod는 설정된 container를 실행
- containter 안에 있는 application이 실행됨
- 각 pod는 설정된 container를 실행
- 각 단계에 맞는 pod를 실행
- scheduler에 따라 순서대로 container들이 실행됨
- 파이프라인이 실행되면,
2.5.3 Component
- ML workflow의 한 단계 수행하는 코드 집합
- 함수와 유사
- input, output, 이름, 상세 구현
2.5.4 Graph
- pipeline UI에서 runtime 실행을 나타내는 그림
2.5.5 Run, Recurring Run
- Run : pipeline의 단일 실행 단위
- Recurring Run : pipeline을 주기적으로 실행하는 run
2.5.6 Run Trigger
Run의 새로운 생성 여부를 알려주는 flag
2가지 type의 Run Trigger
- 1) periodic : 간격 기반의 scheduling
- 2) cron
2.5.7 Step
- step : pipeline에서 “하나의 component의 실행”
이후 생략
2.6 Training of ML models
- kubernetes job 뿐만 아니라, 다양한 ML 학습 모델 지원
- ex) TFJob, Pytorch, MPI, MXNet, Chainer 학습 등
2.7 Serving Models
2.7.1 개요
2가지의 serving system을 제공
- 1) KFServing ( 추천 )
- kubeflow ecosystem에 포함된 프로젝트
- 2) Seldon Core
- kubeflow의 초기부터 지원
2.7.2 KFServing
- kubernetes에서 severless 추론을 가능하게 함
- ML framework를 운영 환경에서도 쉽게 사용