Katib
Kubeflow Components로 동작되며 Hyperparameter tunning을 제공
구성요소
Experiment, Suggestion, Trial, Job으로 구성됨
Experiment
하나의 실행단위로 Job 개념과 같음. k8s 내 커스텀 리소스로 Trial 를 실행하는 역할
- Katib는 HPO 한 세트를 Experiment라는 custom resource로 정의하고 관리 Experimen는 목표로 하는 대상 값의 Hyperparameters 탐색 작업, Hyperparameters를 찾기 위해서는 Experiment 리소스를 생성해야함
- Trial Count : 실행 횟수 (병렬)
- Trial Template : Trial 파드 템플릿
- Objective: Hyperparameters 튜닝의 목표 정의, Hyperparameters 튜닝 시 metric의 최대화/최소화 여부 지정.
- Search Parameter: Hyperparameters 튜닝 작업시 사용해야 할 모든 Hyperparameters 값과 Hyperparameters의 제약 조건을 정의. 예를 들어, Learning rate 값을 결정하고 optimizer로 sgd와 adam을 사용한다고 정의.
- Search Algorithm: Hyperparameters 튜닝 작업시 사용할 알고리즘을 정의함 Random Search, Grid Search, Bayesian Optimization 등 다용한 알고리즘을 사용함. 최적의 Hyperparameters 값을 검색 할 때 사용할 알고리즘.
Trial
최적화 과정의 반복 단위. Experiment의 Trial Count 값 만큼 Trial을 생성하고 순차적으로 실행. 하나의 Trial 에서 하나의 worker job을 실행
- Trial은 제안된 Hyperparameters를 평가하기 위한 하나의 작업(실행 단위)을 의미하는 사용자 리소스.
- 제안된 매개 변수 값들을 Woker Job 인스턴스 할당해서 실행함.
- Experiment는 목표나 설정한 최대 시도 횟수에 도달 할 때까지 Trial을 계속 실행함.
Suggestion
Search Algorithm 으로 생성한 하이퍼파라미터 값의 모음
- 하나의 Experiment 에서 하나의 Suggestion 을 생성
- Katib는 각 Experiment 사용자 리소스 마다 하나의 Suggestion 사용자 리소스를 생성함
- Suggestion은 Search Algorithm이 제안한 Hyperparameters 값들의 세트를 가지고 있음
- Katib는 제안된 Hyperparameters 값들을 세트별로 평가하기 위한 Trial을 작성함
Worker job
파라미터와 Suggestion 값을 이용해 Trial, 각각의 값을 평가하고 계사하는 프로세스. 실제로 학습을 수행하며 K8s Job 과 TFJob, PyTorch 을 사용
Troubleshooting
Invalid value
[500] admission webhook "validator.experiment.katib.kubeflow.org" denied the request: [spec.trialTemplate.trialParameters[0]: Invalid value: "": name and reference must be specified and name must not contain '{' or '}', spec.trialTemplate.trialParameters[1]: Invalid value: "": name and reference must be specified and name must not contain '{' or '}', spec.trialTemplate: Invalid value: "": parameters: [${trialParameters.learningRate} ${trialParameters.momentum}] in spec.trialTemplate not found in spec.trialParameters: [{learningRate } {momentum }]]
learningRate, momentum 등의 파라미터 설정을 완료해야 한다.
[500] admission webhook "validator.experiment.katib.kubeflow.org" denied the request: [spec.trialTemplate.trialParameters[0].reference: Invalid value: "0.01": parameter reference 0.01 does not exist in spec.parameters: [{lr double {0.03 0.01 [] 0.01 uniform}} {num-layers int {64 1 [] 1 uniform}} {optimizer categorical { [sgd adam ftrl] uniform}}], spec.trialTemplate.trialParameters[1].reference: Invalid value: "0.5": parameter reference 0.5 does not exist in spec.parameters: [{lr double {0.03 0.01 [] 0.01 uniform}} {num-layers int {64 1 [] 1 uniform}} {optimizer categorical { [sgd adam ftrl] uniform}}]]
Http failure response for https://kubeflow.osom.run/katib/create_experiment/: 0 Unknown Error
See also
Favorite site
- Github - kubeflow/katib
- Overview | Kubeflow # What is Katib
- Kubeflow 하이퍼파라미터 튜닝 | 카카오클라우드
- (MLOps) 쿠브플로우 카티브(Katib) 하이퍼파라미터 튜닝(1)
- Kubeflow/Katib의 안전한 사용과 커뮤니티를 위해 기여하기 | MakinaRocks Tech Blog
- 자주 겪었던 문제 상황의 예를 들면 다음과 같습니다.
- Experiment의 이름을 정해진 규칙에 어긋나게 생성한 경우
- Experiment의 suggestion algorithm 관련 필드를 잘못 입력한 경우
- Experiment의 primary-container 필드를 잘못 입력한 경우
- Experiment 생성 시 sidecar.istio.io/inject: "true" 를 명시하지 않은 경우
- 자주 겪었던 문제 상황의 예를 들면 다음과 같습니다.