MiniKF와 케일을 활용해 Notebook에서 Kubeflow Pipelines로

1. 소개

KubeflowKubernetes용 머신러닝 도구입니다. 이 프로젝트는 Kubernetes에서 머신러닝 (ML) 워크플로의 배포를 간단하고 이식 가능하며 확장 가능하도록 지원하는 데 전념하고 있습니다. 목표는 ML을 위한 최상의 오픈소스 시스템을 다양한 인프라에 배포할 수 있는 간단한 방법을 제공하는 것입니다.

Kubeflow 배포는 어떤 모습인가요?

Kubeflow 배포는 다음을 충족해야 합니다.

  • 이식 가능 - Google Cloud Platform (GCP), 온프레미스 또는 여러 제공업체에 있는 모든 Kubernetes 클러스터에서 작동합니다.
  • 확장 가능 - 변동하는 리소스를 활용할 수 있으며 Kubernetes 클러스터에 할당된 리소스 수에 의해서만 제한됩니다.
  • 컴포저블 - 서비스 워커로 오프라인 또는 품질이 낮은 네트워크에서 작동하도록 개선되었습니다.

느슨하게 결합된 마이크로서비스를 단일 단위로 구성하고 노트북이든 클라우드든 다양한 위치에 배포하는 방법입니다.

이 Codelab에서는 MiniKF를 사용하여 자체 Kubeflow 배포를 만들고 Jupyter 노트북 내에서 Kubeflow Pipelines 워크플로를 실행하는 방법을 안내합니다.

빌드할 항목

이 Codelab에서는 CLI 명령어나 SDK를 사용하지 않고 Kubeflow Pipelines로 복잡한 데이터 과학 파이프라인을 빌드합니다. Kubernetes 또는 Docker에 대한 지식이 없어도 됩니다. 완료되면 인프라에 다음이 포함됩니다.

  • 다음이 자동으로 설치되는 MiniKF (Mini Kubeflow) VM:
  • Kubernetes (Minikube 사용)
  • Kubeflow
  • 범용 Jupyter Notebook을 Kubeflow 파이프라인 워크플로로 변환하는 도구인 Kale ( GitHub)
  • 데이터 버전 관리 및 재현성을 위한 Arrikto Rok

학습할 내용

  • MiniKF로 Kubeflow를 설치하는 방법
  • CLI 명령어나 SDK를 사용하지 않고 Jupyter Notebook을 Kubeflow Pipelines로 변환하는 방법
  • 버튼 클릭으로 노트북 내부에서 Kubeflow Pipelines를 실행하는 방법
  • 노트북과 모든 파이프라인 단계에서 데이터를 자동으로 버전 관리하는 방법

필요한 항목

이 Codelab은 Kubeflow에 중점을 둔 고급 Codelab입니다. 자세한 배경 정보와 플랫폼 소개는 Kubeflow 소개 문서를 참고하세요. 따라서 이와 관련 없는 개념이나 코드 블록은 자세히 설명하지 않고 그냥 넘어가겠습니다. 다만, 필요할 때 복사해서 붙여넣을 수 있도록 제공은 됩니다.

2. 환경 설정

GCP 프로젝트 ID 및 클러스터 이름 설정

프로젝트 ID를 찾으려면 왼쪽 상단의 햄버거 메뉴에 있는 GCP 콘솔의 홈 패널을 방문하세요. 화면이 비어 있으면 메시지가 표시될 때 '예'를 클릭하여 대시보드를 만듭니다.

GCP Console 열기

3fdc4329995406a0.png

프로젝트가 아직 선택되지 않은 경우 프로젝트 선택을 클릭합니다.

e8952c0b96067dea.png

프로젝트를 선택합니다. 하나만 있어야 합니다.

fe25c1925487142.png

3. MiniKF 설치

컴퓨트 인스턴스 만들기

GCP Marketplace에서 'MiniKF'를 검색합니다.

Arrikto의 MiniKF 가상 머신을 선택합니다.

d6b423c1911ea85a.png

Compute Engine에서 실행 버튼을 클릭하고 프로젝트를 선택합니다.

b5eeba43053db4bd.png

구성 및 배포 창에서 MiniKF 인스턴스의 이름을 선택하고 기본 옵션을 그대로 둡니다. 그런 다음 배포 버튼을 클릭합니다.

dc401e2bb5a884d9.png

MiniKF Compute 인스턴스가 부팅될 때까지 기다립니다.

5228086caadc44c6.png

MiniKF에 로그인

MiniKF VM이 실행되면 SSH 버튼을 클릭하여 연결하고 로그인합니다. 화면에 표시된 안내에 따라 minikf 명령어를 실행합니다. 그러면 Minikube, Kubeflow, Rok 배포가 시작됩니다. 완료되기까지 몇 분 정도 걸립니다.

774e83c3e96cf7b3.png

Kubeflow에 로그인하기

설치가 완료되고 모든 포드가 준비되면 MiniKF 대시보드를 방문합니다. MiniKF 사용자 이름과 비밀번호를 사용하여 Kubeflow에 로그인합니다.

251b0bcdbf6d3c71.png

9d49d899bb0b5bd1.png

Chrome 사용자에게는 다음 화면이 표시됩니다.

6258e0f09e46a6c2.png

Firefox 사용자에게는 다음 화면이 표시됩니다.

8cff90ce2f0670bd.png

Safari 사용자에게는 다음 화면이 표시됩니다.

1c6fd768d71c0a92.png

Rok에 로그인

Kubeflow에 로그인한 후 햄버거 아이콘을 클릭하여 왼쪽 메뉴를 엽니다. 스냅샷 저장소로 이동하여 MiniKF 사용자 이름과 비밀번호를 사용하여 Rok에 로그인합니다.

a683198ac4ba900d.png

80aad6ba5d298a7e.png

축하합니다. GCP에 MiniKF를 성공적으로 배포했습니다. 이제 Notebooks를 만들고, ML 코드를 작성하고, Kubeflow Pipelines를 실행할 수 있습니다. 데이터 버전 관리 및 재현성을 위해 Rok를 사용합니다.

4. 노트북 내부에서 파이프라인 실행

이 섹션에서는 타이타닉 예시를 실행합니다. 타이타닉 예시는 타이타닉 난파선에서 생존한 승객을 예측하는 Kaggle 대회입니다.

노트북 서버 만들기

Kubeflow 중앙 대시보드에서 Notebook Servers 링크로 이동합니다.

4115cac8d8474d73.png

새 서버를 클릭합니다.

f9303c0a182e47f5.png

Notebook Server의 이름을 지정합니다.

a2343f30bc9522ab.png

다음 이미지를 선택했는지 확인합니다.

gcr.io/arrikto-public/tensorflow-1.14.0-notebook-cpu:kubecon-workshop

크기가 5GB인 빈 데이터 볼륨을 새로 추가하고 data라는 이름을 지정합니다.

8544d9b05826b316.png

실행을 클릭하여 노트북 서버를 만듭니다.

28c024bcc55cc70a.png

노트북 서버를 사용할 수 있게 되면 연결을 클릭하여 연결합니다.

2f06041475f45d3.png

데이터 및 노트북 다운로드

JupyterLab 방문 페이지가 포함된 새 탭이 열립니다. JupyterLab에서 새 터미널을 만듭니다.

2482011174f7bc75.png

터미널 창에서 다음 명령어를 실행하여 data 폴더로 이동하고 실습의 나머지 부분에 사용할 노트북과 데이터를 다운로드합니다.

cd data/
git clone -b kubecon-workshop https://github.com/kubeflow-kale/examples

이 저장소에는 데이터와 주석이 추가된 노트북이 포함된 선별된 예가 포함되어 있습니다. 사이드바에서 data/examples/titanic-ml-dataset/ 폴더로 이동하여 titanic_dataset_ml.ipynb 노트북을 엽니다.

c85baf68b36c63b2.png

타이타닉 챌린지의 ML 코드 살펴보기

노트북을 단계별로 실행합니다. 라이브러리가 누락되어 코드가 실패합니다.

bf2451fd7407e334.png

터미널로 돌아가 누락된 라이브러리를 설치합니다.

pip3 install --user seaborn

d90593b21425dd12.png

새로고침 아이콘을 클릭하여 노트북 커널을 다시 시작합니다.

a21f5f563b36ce4d.png

올바른 라이브러리가 설치된 상태에서 셀을 다시 실행하고 성공하는지 확인합니다.

노트북을 Kubeflow 파이프라인으로 변환하기

왼쪽 창에서 Kubeflow 아이콘을 클릭하여 Kale을 사용 설정합니다.

3f4f9c93b187b105.png

셀별 종속 항목을 살펴봅니다. 여러 셀이 단일 파이프라인 단계에 포함될 수 있는 방법과 파이프라인 단계가 이전 단계에 종속될 수 있는 방법을 확인하세요.

15cca32444c1f12e.png

컴파일 및 실행 버튼을 클릭합니다.

bde5cef34f00e258.png

스냅샷 진행 상황을 확인합니다.

9408f46abb2493f5.png

파이프라인 실행의 진행 상황을 확인합니다.

9edbde68032f5e4b.png

링크를 클릭하여 Kubeflow Pipelines UI로 이동하고 실행을 확인합니다.

a81646a22584e1b9.png

완료될 때까지 기다립니다.

44bee7dc0d24ec21.png

d377b6d574a4970.png

축하합니다. 노트북에서 시작하여 엔드 투 엔드 Kubeflow 파이프라인을 실행했습니다.

5. 볼륨 스냅샷을 사용한 재현성

결과 검사

두 번째로 마지막 파이프라인 단계인 Results의 로그를 확인합니다. 모든 예측 변수의 점수가 100%로 표시됩니다. 숙련된 데이터 과학자라면 이 점을 즉시 의심스러워할 것입니다. 이는 모델이 일반화되지 않고 학습 데이터 세트에 과적합되고 있음을 나타냅니다. 이는 모델에서 사용하는 데이터에 문제가 있기 때문일 수 있습니다.

2a594032c2dd6ff6.png

이전 상태 재현

다행히도 Rok는 데이터 버전 관리를 처리하고 컴파일 및 실행 버튼을 클릭한 시점의 전체 환경을 재현합니다. 이렇게 하면 데이터와 코드의 타임머신을 갖게 됩니다. 따라서 모델 중 하나를 학습하기 전의 파이프라인 상태를 재개하고 어떤 일이 일어나는지 살펴보겠습니다. randomforest 단계를 살펴본 다음 아티팩트를 클릭합니다.

4f25ca4560711b23.png

마크다운의 단계를 따릅니다. 즉, 해당 링크를 클릭하여 Rok UI에서 스냅샷을 확인합니다.

e533bc781da9355a.png

Rok URL을 복사합니다.

d155d19731b5cedd.png

Notebook Servers 링크로 이동합니다.

aafeab01f3ef0863.png

새 서버를 클릭합니다.

f2265a64e8f9d094.png

이전에 복사한 Rok URL을 붙여넣고 자동 완성 버튼을 클릭합니다.

9ba4d4128a3bdeea.png

노트북 이름을 지정합니다.

7685c3bf35fc74b2.png

다음 이미지를 선택했는지 확인합니다.

gcr.io/arrikto-public/tensorflow-1.14.0-notebook-cpu:kubecon-workshop

실행을 클릭하여 노트북 서버를 만듭니다.

28c024bcc55cc70a.png

노트북 서버를 사용할 수 있게 되면 연결을 클릭하여 연결합니다.

34955a64ae316de1.png

노트북은 생성한 파이프라인 단계의 정확한 셀에서 열립니다.

a1f7c81f349e0364.png

백그라운드에서 Kale은 모든 라이브러리를 가져오고 이전 단계의 변수를 로드하여 노트북의 상태를 재개했습니다.

이전 상태 디버그

이 셀에 print 명령어를 추가합니다.

print(acc_random_forest)

Shift + Return을 눌러 활성 셀을 실행하여 랜덤 포레스트를 재학습하고 점수를 출력합니다. 100입니다.

e2a8a3b5465fcb5d.png

이제 학습 데이터에 이상한 점이 있는지 확인해 보겠습니다. 이 문제를 살펴보고 해결하려면 이전 셀을 선택하고 더하기 아이콘 (+)을 클릭하여 Random Forest 마크다운 위에 셀을 추가합니다.

d1077f32dff9620f.png

다음 텍스트를 추가하고 셀을 실행하여 학습 세트를 출력합니다.

train_df

2854798ff01aed4e.png

죄송합니다. 학습 라벨 ('Survived')이 있는 열이 입력 특성으로 잘못 포함되었습니다. 모델이 '생존' 특성에 집중하고 나머지는 무시하도록 학습되어 입력이 오염됩니다. 이 열은 모델의 목표와 정확히 일치하며 예측 중에는 표시되지 않으므로 모델이 다른 특성에서 학습할 수 있도록 학습 데이터 세트에서 삭제해야 합니다.

버그 수정 추가

이 열을 삭제하려면 셀을 수정하여 다음 명령어를 추가하세요.

train_df.drop('Survived', axis=1, inplace=True)
train_df

9e76c16a862b566.png

Kale을 사용 설정하고 Survived 라벨을 삭제하는 셀이 featureengineering 파이프라인 단계에 포함되어 있는지 확인합니다 (윤곽선 색상이 동일해야 함).

컴파일 및 실행 버튼을 클릭하여 파이프라인을 다시 실행합니다.

링크를 클릭하여 Kubeflow Pipelines UI로 이동하고 실행을 확인합니다.

결과 단계가 완료될 때까지 기다린 후 로그를 확인하여 최종 결과를 확인합니다. 이제 현실적인 예측 점수를 확인할 수 있습니다.

8c6a9676b49e5be8.png

6. 삭제

MiniKF VM 삭제

GCP 콘솔에서 Deployment Manager로 이동하여 minikf-1 배포를 삭제합니다.

7. 축하합니다

축하합니다. Kubeflow (MiniKF), Kale, Rok를 사용하여 엔드 투 엔드 데이터 과학 워크플로를 실행했습니다.

다음 단계

Kubeflow 커뮤니티에 참여하세요.

추가 자료