1. 소개
| Kubeflow는 Kubernetes용 머신러닝 도구입니다. 이 프로젝트는 Kubernetes에서 머신러닝 (ML) 워크플로의 배포를 간단하고 이식 가능하며 확장 가능하도록 지원하는 데 전념하고 있습니다. 목표는 ML을 위한 최상의 오픈소스 시스템을 다양한 인프라에 배포할 수 있는 간단한 방법을 제공하는 것입니다. |
Kubeflow 배포는 어떤 모습인가요?
Kubeflow 배포는 다음을 충족해야 합니다.
- 이식 가능 - Google Cloud Platform (GCP), 온프레미스 또는 여러 제공업체에 있는 모든 Kubernetes 클러스터에서 작동합니다.
- 확장 가능 - 변동하는 리소스를 사용할 수 있으며 Kubernetes 클러스터에 할당된 리소스 수에 의해서만 제한됩니다.
- 구성 가능 - 선별된 ML 프레임워크 및 라이브러리 중에서 선택하여 독립적인 단계를 전체 ML 워크플로로 구성할 수 있습니다.
Kubeflow를 사용하면 느슨하게 결합된 마이크로서비스를 단일 단위로 구성하고 노트북, 온프레미스, 클라우드 등 다양한 위치에 배포할 수 있습니다.
이 Codelab에서는 MiniKF를 사용하여 자체 Kubeflow 배포를 만든 다음 하이퍼파라미터 조정으로 Kubeflow Pipelines 워크플로를 실행하여 모델을 학습시키고 서빙하는 방법을 안내합니다. 이 모든 작업은 Jupyter 노트북 내에서 실행됩니다.
빌드할 항목
이 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를 실행하는 방법
- 노트북과 모든 파이프라인 단계에서 데이터를 자동으로 버전 관리하는 방법
필요한 항목
- 소유자 권한이 있는 활성 GCP 프로젝트
이 Codelab은 Kubeflow에 중점을 둔 고급 Codelab입니다. 자세한 배경 정보와 플랫폼 소개는 Kubeflow 소개 문서를 참고하세요. 따라서 이와 관련 없는 개념이나 코드 블록은 자세히 설명하지 않고 그냥 넘어가겠습니다. 다만, 필요할 때 복사해서 붙여넣을 수 있도록 제공은 됩니다.
2. 환경 설정
GCP 프로젝트 설정
GCP 프로젝트를 만들거나 기존 GCP 프로젝트를 구성하려면 다음 단계를 따르세요. 기존 GCP 프로젝트를 사용하려면 프로젝트가 아래에 설명된 최소 요구사항을 충족해야 합니다. 첫 번째 단계는 GCP Console에서 리소스 관리자를 여는 것입니다.
새 프로젝트를 만들거나 기존 프로젝트를 선택합니다.

다음 최소 요구사항을 확인하세요.
- 프로젝트에 대한 소유자 역할이 있어야 합니다.
- 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.
- GCP 무료 등급 또는 $300 크레딧이 제공되는 12개월 무료 체험 기간을 사용하는 경우 무료 등급에서는 충분한 리소스를 제공하지 않으므로 기본 GCP 설치의 MiniKF를 실행할 수 없습니다. 유료 계정으로 업그레이드해야 합니다.
GCP 프로젝트 설정에 대한 자세한 내용은 GCP 문서를 참고하세요.
GCP 프로젝트를 설정한 후 MiniKF 설치 안내로 바로 이동하세요.
사전 할당된 GCP 프로젝트 열기
사전 할당된 GCP 프로젝트를 열려면 아래 버튼을 클릭하여 GCP 콘솔로 이동하고 왼쪽 상단의 햄버거 메뉴에 있는 홈 패널을 엽니다. 화면이 비어 있으면 메시지가 표시될 때 '예'를 클릭하여 대시보드를 만듭니다.

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

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

3. MiniKF 설치
MiniKF를 포함한 Compute 인스턴스 만들기
GCP Marketplace에서 'MiniKF'를 검색합니다.
Arrikto의 MiniKF 가상 머신을 선택합니다.

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

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

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

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

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


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

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

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

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


축하합니다. GCP에 MiniKF를 배포했습니다. 이제 노트북을 만들고, ML 코드를 작성하고, Kubeflow Pipelines를 실행하고, Rok를 사용하여 데이터 버전 관리 및 재현성을 확보할 수 있습니다.
4. 노트북 내에서 파이프라인 실행
이 섹션에서는 Udacity AI Nanodegree의 프로젝트인 Dog Breed Identification 예시를 실행합니다. 최종 모델은 개 이미지가 주어지면 개의 품종을 추정합니다.
Kubeflow 클러스터에서 노트북 서버 만들기
Kubeflow 중앙 대시보드에서 Notebooks 링크로 이동합니다.

새 서버를 클릭합니다.

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

다음 Docker 이미지를 선택했는지 확인합니다 (이미지 태그는 다를 수 있음).
gcr.io/arrikto/jupyter-kale:f20978e
크기가 5GB인 빈 데이터 볼륨을 새로 추가하고 data라는 이름을 지정합니다.

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

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

데이터 및 노트북 다운로드
JupyterLab 방문 페이지가 포함된 새 탭이 열립니다. JupyterLab에서 새 터미널을 만듭니다.

터미널 창에서 다음 명령어를 실행하여 data 폴더로 이동하고 실습의 나머지 부분에 사용할 노트북과 데이터를 다운로드합니다.
cd data/ git clone https://github.com/kubeflow-kale/kale
클론된 저장소에는 데이터와 주석이 추가된 노트북이 포함된 선별된 예시가 포함되어 있습니다.
사이드바에서 data/kale/examples/dog-breed-classification/ 폴더로 이동하여 dog-breed.ipynb 노트북을 엽니다.

견종 식별 예의 ML 코드 살펴보기
지금은 데이터 세트를 다운로드하는 셀을 실행하지 마세요. 방금 클론한 저장소에 포함된 더 작은 데이터 세트를 사용할 것이기 때문입니다. 집에서 이 예제를 원하는 속도로 실행하는 경우 데이터 세트를 다운로드해도 됩니다.
imports 셀을 실행하여 필요한 라이브러리를 모두 가져옵니다. 라이브러리가 누락되어 코드가 실패합니다.

일반적으로 새로 설치된 라이브러리를 포함하여 이 노트북을 Kubeflow 파이프라인으로 실행하려면 새 Docker 이미지를 만들어야 합니다. 다행히도 Rok와 Kale은 개발 중에 설치한 라이브러리가 Rok의 스냅샷 기술과 Kale이 스냅샷 볼륨을 파이프라인 단계에 마운트하는 덕분에 파이프라인으로 이동하도록 합니다.
다음 셀을 실행하여 누락된 라이브러리를 설치합니다.

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

올바른 라이브러리가 설치된 상태에서 imports 셀을 다시 실행하고 성공하는지 확인합니다.
노트북을 Kubeflow Pipelines의 파이프라인으로 변환하기
노트북의 왼쪽 창에서 Kubeflow 아이콘을 클릭하여 Kale을 사용 설정합니다.

Kale 배포 패널에서 슬라이더를 클릭하여 Kale을 사용 설정합니다.

노트북 내에서 셀별 종속 항목을 살펴봅니다. 여러 노트북 셀이 단일 파이프라인 단계에 포함될 수 있는 방법(셀 왼쪽의 색상 막대로 표시)과 파이프라인 단계가 이전 단계에 종속될 수 있는 방법(셀 위의 depends on 라벨로 표시)을 확인하세요. 예를 들어 아래 이미지는 동일한 파이프라인 단계에 속하는 여러 셀을 보여줍니다. 색상이 빨간색으로 동일하며 이전 파이프라인 단계에 종속됩니다.

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

이제 Kale이 노트북을 Kubeflow Pipelines 파이프라인으로 변환하여 노트북을 빌드합니다. 또한 Kale은 Rok와 통합되어 현재 노트북의 데이터 볼륨 스냅샷을 생성하므로 스냅샷 진행 상황을 확인할 수 있습니다. Rok는 데이터 버전 관리를 처리하고 컴파일 및 실행 버튼을 클릭했을 때와 동일한 전체 환경을 재현합니다. 이렇게 하면 데이터와 코드의 타임머신이 생기고 새 Docker 이미지를 빌드하지 않고도 코드를 개발한 동일한 환경에서 파이프라인이 실행됩니다.

파이프라인이 컴파일되어 Kubeflow Pipelines에 업로드되었습니다. 이제 링크를 클릭하여 Kubeflow Pipelines UI로 이동하고 실행을 확인합니다.

Kubeflow Pipelines UI가 새 탭에서 열립니다. 실행이 완료될 때까지 기다립니다.


축하합니다. 노트북에서 시작하여 Kubeflow Pipelines에서 엔드 투 엔드 파이프라인을 실행했습니다.
5. 초매개변수 조정을 사용한 전이 학습
결과 검사
cnn-from-scratch 단계의 로그를 확인합니다. (Kubeflow Pipelines UI의 그래프에서 단계를 클릭한 다음 로그 탭을 클릭합니다.) 이 단계에서는 컨볼루셔널 신경망 (CNN)을 처음부터 학습시켰습니다. 학습된 모델의 정확도가 매우 낮으며 이 단계를 완료하는 데 시간이 오래 걸립니다.

cnn-vgg16 단계의 로그를 확인합니다. 이 단계에서는 사전 학습된 VGG-16 모델(Visual Geometry Group(VGG)에서 학습한 신경망)에 전이 학습을 사용했습니다. 정확도는 이전 모델보다 훨씬 높지만 여전히 개선할 수 있습니다.

이제 cnn-resnet50 단계의 로그를 살펴보세요. 이 단계에서는 사전 학습된 ResNet-50 모델에 전이 학습을 사용했습니다. 정확도가 훨씬 높습니다. 따라서 이 모델을 이 Codelab의 나머지 부분에서 사용합니다.

하이퍼파라미터 조정
Kubeflow UI의 노트북 서버로 돌아가 dog-breed-katib.ipynb (경로 data/kale/examples/dog-breed-classification/)이라는 노트북을 엽니다. 이 노트북에서는 Katib을 사용하여 ResNet-50 모델에 대한 하이퍼파라미터 조정 실험을 실행합니다. 메모장 시작 부분에 매개변수를 선언하는 셀이 하나 있습니다.

노트북의 왼쪽 창에서 Katib을 사용한 HP 조정을 사용 설정하여 초매개변수 조정을 실행합니다.

그런 다음 Katib 작업 설정을 클릭하여 Katib을 구성합니다.

각 매개변수의 검색 공간을 정의하고 목표를 정의합니다.

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

Katib 실험의 진행 상황을 확인합니다.

보기를 클릭하여 Katib 실험을 확인합니다.

완료를 클릭하여 Kubeflow Pipelines (KFP)에서 실행을 확인합니다.

Katib 실험 페이지에 새 트라이얼이 표시됩니다.

KFP UI에는 새 실행이 표시됩니다.

방금 일어난 일을 자세히 살펴보겠습니다. 이전에는 Kale이 노트북에서 파이프라인 실행을 생성했지만 이제는 각각 다른 조합의 인수가 제공되는 여러 파이프라인 실행을 생성합니다.
Katib은 범용 초매개변수 조정 작업을 실행하는 Kubeflow 구성요소입니다. Katib은 실제로 실행 중인 작업 (Katib 용어로 트라이얼이라고 함)에 관해 아무것도 알지 못합니다. Kale은 검색 공간, 최적화 알고리즘, 목표만 신경 씁니다. Katib은 간단한 작업 (즉, 포드)을 트라이얼로 실행하는 것을 지원하지만 Kale은 트라이얼이 실제로 Kubeflow Pipelines에서 파이프라인을 실행한 다음 파이프라인 실행에서 측정항목을 수집하도록 하는 shim을 구현합니다.
Katib 실험에서 트라이얼을 생성하면 Katib UI에 더 많은 트라이얼이 표시됩니다.

KFP UI에서 더 많은 실행이 표시됩니다.

Katib 실험이 완료되면 Katib UI에서 모든 트라이얼을 볼 수 있습니다.

KFP UI의 모든 실행:

노트북으로 돌아가면 Kale 패널 내 Katib 실험 바로 옆에 정보 버튼이 표시됩니다.

클릭하면 최상의 결과와 이를 생성한 매개변수가 표시됩니다.

6. 삭제
MiniKF VM 삭제
GCP 콘솔에서 Deployment Manager로 이동하여 minikf-on-gcp 배포를 삭제합니다.
7. 축하합니다
축하합니다. Kubeflow (MiniKF), Kale, Rok를 사용하여 엔드 투 엔드 데이터 과학 워크플로를 실행했습니다.
다음 단계
Kubeflow 커뮤니티에 참여하세요.
- github.com/kubeflow
- Kubeflow Slack
- kubeflow-discuss@googlegroups.com
- 주간 커뮤니티 통화, Slack, 기타 커뮤니티 세부정보
