1. 개요
Kubeflow는 Kubernetes + ML flow를 합한 의미로, 파이프라인이라는 ML워크플로를 구축하고 배포하기 위해 제공되는 플랫폼입니다. 개발, 테스트 및 프로덕션 수준 서비스를 위해 다양한 환경에 ML 시스템을 배포하려는 ML 엔지니어 및 운영 팀을 위한 것입니다.
1.1 파이프라인 구성 요소 이해
AI HUB의 파이프라인 워크플로우는 데이터 사전 처리, 데이터 변환, 모델 학습 등과 같은 단계로 구성되어 있습니다. 워크플로우의 구성요소는 입력 매개 변수 세트, 출력 세트 및 컨테이너 이미지의 위치로 구성되어 있습니다. 구성요소의 컨테이너 이미지는 구성 요소의 실행 코드와 코드가 실행되는 환경의 정의를 포함하는 패키지로 이루어져있습니다.
2. 개념적 개요
Kubeflow는 쿠버네티스에서 머신 러닝 워크 플로를 실행하기 위해서 만들어졌습니다. 일반적으로 다음과 같은 이유로 사용할 수 있습니다.
- 이미 쿠버네티스 기반의 인프라가 있거나, 새로운 머신 러닝 플랫폼을 만들려는 경우
- 다양한 환경(예 : 로컬, 온 프레미스 및 클라우드)에서 머신 러닝 모델을 학습하거나 서비스하려는 경우
- 자원(예 : CPU 또는 GPU)를 할당하여 작업을 하려는 경우
- Jupyter 노트북을 사용하여 머신 러닝 작업을 하려는 경우
- Kubeflow에는 Jupyter 노트북 생성 및 관리를 위한 서비스를 이용할 때
- Kubeflow Pipelines는 Docker 컨테이너를 기반으로하는 다단계 ML 워크 플로를 구축, 배포 및 관리할 때
- Kubeflow는 여러 플랫폼에서 ML 학습, 초 매개 변수 조정, 워크로드를 자동으로 작업하려는 경우
더 자세한 내용은 아래의 링크를 참고해주시길 바랍니다.
3. Kubeflow 주요 제품
- Kubeflow’s UI – Central Dashboard
- Jupyter Notebooks
- Metadata
- Frameworks for Training
- Hyperparameter Tuning : Katib
- Pipelines
- Tools for Serving
3.1 Kubeflow’s UI
Kubeflow의 UI 화면으로서, Kubeflow의 구성 요소를 쉽게 접근할 수 있는 대시보드가 포함되어 있습니다. 특정 작업에 대한 바로 가기, 최근 노트북 목록 및 파이프 라인 목록을 한 번에 볼 수 있습니다. 또한, 파이프라인, 노트북, Katib 등 클러스터에서 실행중인 컴포넌트 목록을 볼 수 있습니다.
3.2 메타데이터
Kubeflow에서 실행하는 머신 러닝 워크 플로우의 메타 데이터를 추적 및 관리하는데 사용합니다. 메타데이터 컴포넌트는 Kubeflow 사용자가 머신 러닝 워크 플로에서 생성하는 메타 데이터를 추적하고 관리함으로써, 머신 러닝 워크 플로를 이해하고 관리 할 수 있도록 도와 줍니다.
3.3 Hyperparameter Tuning : Katib
Kubeflow에서 머신 러닝 모델의 하이퍼 파라미터 튜닝을 할 수 있도록 도와줍니다.
Katib는 머신 러닝 모델의 하이퍼 파라미터 및 뉴럴 아키텍처(Neural Architecture)를 자동으로 튜닝할 수 있는 기능을 제공합니다. Katib는 TensorFlow, PyTorch, Apache MXNet, XGBoost 등 다양한 머신 러닝 프레임 워크를 지원합니다.
3.4 Pipelines
Kubeflow 파이프라인은 컨테이너를 기반으로 확장 가능한 ent-to end 머신 러닝 워크 플로를 구축하기 위한 플랫폼입니다. 머신 러닝 파이프라인을 관리하는 기능을 제공하여 ent-to end 오케스트레이션을 지원합니다. 그리고 수 많은 아이디어와 기술을 시도할 수 있도록 시험(trials)과 실험(experiments)을 관리할 수 있는 기능도 제공합니다.
4. GCP에서 Kubeflow를 통한 예시
4.1 python을 통한 Kubeflow Pipelines 배포
1. Navigation Meun → AI Platform → Pipelines 로 이동
2. New Instance 클릭 → Configure 클릭
3. Access to the following Cloud APIs 허용 → Create cluster 클릭(2~3분 소요) → GCP Marketplace 서비스 약관에 동의 → 배포(10분 정도 소요)
4. Navigation Menu → AI Platform → Notebook → New Instance → Tensorflow Enterprise 2.x _ without GPU (default 셋팅)
5. 필수요소 값 가져오기
RPOJECT ID | 5-1) 참고 |
Gcloud Storage name 가져오기 | 5-2) 참고 |
kfp.Client – host url | 5-3) 참고 |
5-1) PROJECT ID 값 가져오기
5-2) Gcloud Storage 이름 가져오기(gshell을 이용)
export PROJECT=$(gcloud config list project --format "value(core.project)")
echo "Your current GCP Project Name is: "$PROJECT
export REGION=us-central1
gsutil mb -l ${REGION} gs://${PROJECT}
gsutil ls
5-3) kfp.Client – host url 값 가져오기
piplelines 중에 배포할 모델의 SETTINGS 클릭 → 박스 안에 있는 kfp.Client(host=’https://**********************’) 값 중 ‘____’ 값 가져오기
6. NOTEBOOKS에서 OPEN JUPYTERLAB 클릭 → Terminal 클릭 → 터미널 창에 아래 코드 입력 후, 데이터 다운로드 확인
git clone https://github.com/kubeflow/pipelines.git
cd pipelines
git checkout d87c3be6114af867760d07f1d70f4d95d4456c52
7. root/pipelines/samples/core/ai_platform/ai_platform.ipynb 열기 → 위에서 구한 필수요소 값 입력
- Project ID / Storage Location 입력
- kfp.client 값은 아래와 같이 변경
8. 코드 전체 실행 → 배포된 모델 및 결과 확인
- 배포가 제대로 완료되면 아래와 같은 그림으로 kubeflow pipeline이 작성됨
- 배포가 완료되면 아래와 같이 cloud storage에 csv파일로 결과값이 저장됨
4.2 Run of [Demo] XGBoost – Iterative model training
1. AI Platform → 파이프라인 → 새 인스턴스 생성 → 파이프라인 대시보드 열기
2. Central Dashboard에서 pipelines 클릭 → [Demo] XGBoost – Iterative model training 클릭
3. 우측 상단에 있는 Create experiment 클릭 → Experiment Name 칸에 실험 이름 입력(ex : test01-2021-04-29) → 옵션들은 default로 두고 start 클릭
4. Runs 선택 후, Run name 중 돌렸던 모델을 클릭 → 상자 우측 상단에 초록색 체크 표시가 있으면, 성공적으로 돌아갔음을 확인할 수 있음
5. 각 단계별 input / output를 박스 클릭하여 확인할 수 있음.
(여기서는 log, table, mse, r , squared r 값 등을 확인할 수 있음)
출처 및 참고사이트
- Kubeflow docs
- kubeflow를 이용한 예제
- https://www.kubeflow.org/docs/distributions/gke/
- https://cloud.google.com/ai-platform/pipelines/docs/connecting-with-sdk?hl=ko&_ga=2.209744988.-877239896.1615783265&_gac=1.114355701.1616481048.CjwKCAjwgOGCBhAlEiwA7FUXkqT7onKpS8QLYdfNHPDllgIgmoGdnEXju60eyO4m8RJZoXldMY6eHBoCK_cQAvD_BwE
- https://cloud.google.com/ai-hub/docs/kubeflow-pipeline?_ga=2.220756817.-877239896.1615783265&_gac=1.195774302.1616481048.CjwKCAjwgOGCBhAlEiwA7FUXkqT7onKpS8QLYdfNHPDllgIgmoGdnEXju60eyO4m8RJZoXldMY6eHBoCK_cQAvD_BwE