( 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이 실행됨
    • 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를 운영 환경에서도 쉽게 사용

Categories:

Updated: