본 포스팅은 머신러닝 비영리단체 pseudo-lab 활동 중 빌더(스터디장)로 참가한 "kubeflow 발만 담가보기" 스터디 발표 내용을 담고 있다.
ML pipelines
"DevOps"가 유행하면서, CI/CD 파이프라인 적용되는 사례가 많아졌다. 구글에 "DevOps CI/CD" 만 검색해도 여러 블로그에서 개념과 튜토리얼에 대해 기술하고 있는 것을 알 수 있다. 또한 여기에 CT(지속적 학습) 파이프라인 까지 적용한 "MLOps"가 새로운 블루오션이 되었다.
MLOps는 ML 프로젝트에 필요한 요소들을 자동화 하는 것이다. ML 프로젝트에 필요한 요소라함은.. "데이터 관리", "모델 학습", "모델 배포" 그리고 "성능 모니터링" 등이 있다. 그리고 이 과정을 ML 파이프라인 이라한다.
ML 파이프라인 -> ML에 대해 데이터 수집/작업 부터 학습/검증/배포 까지 일련의 과정
kubeflow pipelines
ML 파이프라인은 단순한 코드/함수/container 등으로도 구현이 된다. (e.g., 데이터 전처리 함수 종료 후 모델 학습 함수 호출or 모델 학습 container 종료 후 모델 검증 container 실행) 하지만, 이를 위해서는 이전 step이 끝났는지, 끝난 step 처리 등 여러 부가적인 개발이 필요하다. 따라서 파이프라인 작업을 자동화하고 관리해주는 pipelines orchestration이 각광 받고 있으며, kubeflow pipelines가 그 중 하나이다.
pipeline orchestration에는 Airflow, Luigi 부터 시작해서 Kubeflow, MLFlow 까지 다양한 용도에서 사용할 수 있는 툴이 존재한다. 각 툴의 특징 및 차이는 URL에 잘 정리가 되어있다.
본 포스팅은 5가지 pipeline orchestration 중 kubeflow pipeline에 대해 기술할 예정이며, 평소 관심이 생겼던 MLFlow와 Airflow에서도 익혀본 후, 다음에 포스팅하려고 한다.
Kubeflow pipelines의 설치방법, docs, api 등은 Github를 참고하면 쉽게 습득할 수 있다. 유명세와 유용함에 비해 Star/Fork 수가 너무 적은 것 같기도...?
kubeflow pipelines는 3가지 목적을 갖고 만들어진 툴이다.
1. End to end orchestration
2. Easy Experimentation
3. Easy re-use
즉 쉽고 간편하게 파이프라인의 처음부터 끝까지를 관리 해주는 툴로 직접 사용해봤을때 또한 매우 편리하다는 생각이 들었다. kubeflow pipelines를 직접 사용해보면서 느낀? 특징들이 있다면...
1. 편하지만 불편한(?) Web Dashboard - 딱 필요한 기능들만 존재하는 Dashboard 이지만, 느린 감이 없지 않다.
2. 컨테이너 기반
3. Python SDK(kfp)으로 모든 것이 가능 (e.g., accuracy > baseline 일 경우에만 deploy)
4. 파이프라인 개발 프로세스: Python을 사용하여 파이프라인 개발 -> 업로드 -> 실행 -> 순차적으로 step 실행
Install
설치에는 두 가지 방법이 있다.
1. kubeflow 설치 (pipelines 포함되어 설치)
2. kubeflow pipelines 단독 설치
이 포스팅에는 따로 kubeflow pipelines 설치법을 설명하지 않을 것이다. 단 kubeflow 같은 빠르게 개발되는 툴의 경우 버전 이슈가 꽤 크다. 기존에 kubeflow v1.0 을 사용하였는데, kfp을 통해 pipelines 업로드시 에러가 생기는 이슈가 있어서 kubeflow v1.2를 사용중이다.
kubeflow pipelines 단독 설치시 Installing Pipelines을 참고하면 된다.
Web Dashboard
Web Dashboard을 접근하기 위해서는 포트 포워딩 설정이 필요하다.
$kubectl port-forward svc/istio-ingressgateway 포트번호:80 -n istio-system --address 0.0.0.0
Web Dashboard의 첫 화면은 위와 같다. 파이프라인은 좌측 Pipelines 메뉴를 통해 관리할 수 있다.
"Mnist"라는 파이프라인 이름과 v0.1의 버전 정보를 알 수 있다. 이 화면의 우측 상단 "Upload pipeline"을 통해 새로운 파이프라인 업로드가 가능하다.
v0.1 버전을 클릭했을 시 나오는 화면이다. 파이프라인이 Graph로 시각화 되어있어서, 어떤 step으로 구성되어있는지 한눈에 파악이 가능하다. 해당 파이프라인을 실행할때는 우측 상단의 "Create run" 버튼을 클릭하면 된다.
Create run 클릭시 나타나는 화면이다. 어떤 실험에 속한 run인지 설정해야한다. 즉 실험 밑에 여러 run이 존재하는 것으로 이해하면 된다. Run Type 에는 One-off(한번만 실행), Recurring(반복 실행)을 설정할 수 있다.
Experiments와 Run 리스트이다. 각 Run에는 현재 상태(Status), 시간정보(Duration, Start time), output(accuracy-score)을 한눈에 볼 수 있게 되어있다.
특정 Run을 클릭하면 다음과 같은 실행 status가 표시된 step들과 그 step의 정보를 볼 수 있다. 위 화면은 실행이 끝난 Run의 정보이며, analysis step 을 클릭했을 때 성능이 confusion matrix로 시각화된 것을 볼 수 있다. 각 step의 Logs를 통해 에러 메시지 및 출력한 로그들을 확인할 수 있다.
다음 포스팅에는 Python SDK(kfp)를 이용하여 파이프라인 개발 후 업로드 하는 방법에 대해 소개하려고 한다.
'MLOps' 카테고리의 다른 글
NVIDIA APEX가 빠른 이유 (ft. FP16 vs FP32) (0) | 2021.04.22 |
---|---|
Kubeflow - Pipelines 소개 - 2 (0) | 2021.02.24 |
[Toy] Trigger using Slack (0) | 2021.02.01 |
[Toy] Serving TorchServe in kubeflow pipelines - 2 (0) | 2021.02.01 |
[Toy] Serving TorchServe in kubeflow pipelines - 1 (0) | 2021.02.01 |