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
- Kale - 범용 Jupyter 노트북을 Kubeflow Pipelines 워크플로로 변환하는 도구 ( GitHub)
- 데이터 버전 관리 및 재현성을 위한 Arrikto Rok
학습할 내용
- MiniKF로 Kubeflow를 설치하는 방법
- CLI 명령어 또는 SDK를 사용하지 않고 Jupyter 노트북을 Kubeflow Pipelines로 변환하는 방법
- 버튼 클릭 한 번으로 노트북 내에서 초매개변수 조정과 함께 Kubeflow Pipelines를 실행하는 방법
- 노트북과 모든 파이프라인 단계에서 데이터의 버전을 자동으로 지정하는 방법
필요한 항목
- 소유자 권한이 있는 활성 GCP 프로젝트
Kubeflow에 중점을 둔 고급 Codelab입니다. 자세한 배경 정보와 플랫폼 소개는 Kubeflow 소개 문서를 참고하세요. 따라서 이와 관련 없는 개념과 코드 블록은 설명 없이 넘어가고 필요할 때 간단히 복사하여 붙여넣을 수 있도록 제공해 드립니다.
2. 환경 설정
GCP 프로젝트 설정
아래 단계에 따라 GCP 프로젝트를 만들거나 기존 GCP 프로젝트를 구성하세요. 기존 GCP 프로젝트를 사용하려면 프로젝트가 아래에 설명된 최소 요구사항을 충족하는지 확인하세요. 첫 번째 단계는 GCP Console에서 리소스 관리자를 여는 것입니다.
새 프로젝트를 만들거나 기존 프로젝트를 선택합니다.
다음 최소 요구사항을 확인하세요.
- 프로젝트에 대한 소유자 역할이 있는지 확인합니다.
- 프로젝트에 결제가 사용 설정되어 있는지 확인하세요.
- GCP 무료 등급 또는 $300 크레딧이 제공되는 12개월 체험 기간을 사용하는 경우 무료 등급에서 충분한 리소스를 제공하지 않으므로 MiniKF의 기본 GCP 설치를 실행할 수 없습니다. 유료 계정으로 업그레이드해야 합니다.
GCP 프로젝트 설정에 대한 추가 도움말은 GCP 문서를 참조하세요.
GCP 프로젝트를 설정한 후 MiniKF 설치 안내로 바로 이동합니다.
사전 할당된 GCP 프로젝트 열기
사전 할당된 GCP 프로젝트를 열려면 아래 버튼을 클릭하여 GCP 콘솔로 이동한 다음 왼쪽 상단의 햄버거 메뉴에 있는 홈 패널을 엽니다. 화면이 비어 있으면 프롬프트에서 '예'를 클릭하여 대시보드를 만듭니다.
프로젝트가 아직 선택되지 않은 경우 프로젝트 선택을 클릭합니다.
프로젝트를 선택합니다. 다음이 하나만 있어야 합니다.
3. MiniKF 설치
MinKF를 포함한 컴퓨팅 인스턴스 만들기
GCP Marketplace에서 'MiniKF'를 검색합니다.
Arrikto에서 MiniKF 가상 머신을 선택합니다.
실행 버튼을 클릭하고 프로젝트를 선택합니다.
구성 및 배포 창에서 MiniKF 인스턴스의 이름과 영역을 선택하고 기본 옵션은 그대로 둡니다. 그런 다음 배포 버튼을 클릭합니다.
MiniKF 컴퓨팅 인스턴스가 부팅될 때까지 기다립니다.
MinKF에 로그인
MiniKF VM이 실행되면 연결하고 SSH 버튼을 클릭하여 로그인합니다. 화면에 표시된 안내에 따라 minikf
명령어를 실행합니다. 그러면 Minikube, Kubeflow, Rok의 배포가 시작됩니다. 완료되기까지 몇 분 정도 걸립니다.
Kubeflow에 로그인
설치가 완료되고 모든 포드가 준비되면 MiniKF 대시보드로 이동합니다. MiniKF 사용자 이름과 비밀번호를 사용하여 Kubeflow에 로그인합니다.
Chrome 사용자에게 다음 화면이 표시됩니다.
Firefox 사용자에게 표시되는 화면:
Safari 사용자에게는 다음 화면이 표시됩니다.
Rok에 로그인
Kubeflow에 로그인한 후 햄버거 아이콘을 클릭하여 왼쪽 메뉴를 엽니다. Snapshots를 클릭하고 MiniKF 사용자 이름과 비밀번호를 사용하여 Rok에 로그인합니다.
축하합니다. GCP에 MiniKF를 배포했습니다. 이제 노트북을 만들고, ML 코드를 작성하고, Kubeflow Pipelines를 실행하고, 데이터 버전 관리 및 재현성을 위해 Rok를 사용할 수 있습니다.
4. 노트북 내에서 파이프라인 실행
이 섹션에서는 Udacity AI Nanodegree 프로젝트인 개 품종 식별 예시를 실행합니다. 개의 이미지가 주어지면 최종 모델은 개의 품종 추정치를 제공합니다.
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 배포 패널의 슬라이더를 클릭하여 케일을 사용 설정합니다.
노트북 내에서 셀별 종속 항목을 살펴봅니다. 셀 왼쪽에 있는 색상 막대로 표시된 여러 노트북 셀이 어떻게 단일 파이프라인 단계의 일부가 될 수 있는지, 그리고 셀 위의 라벨에 종속됨으로 표시된 대로 파이프라인 단계가 이전 단계에 어떻게 종속될 수 있는지 확인해 보세요. 예를 들어 아래 이미지는 동일한 파이프라인 단계의 일부인 여러 셀을 보여줍니다. 이 흐름은 빨간색이 동일하며 이전 파이프라인 단계에 종속됩니다.
Compile and Run 버튼을 클릭합니다.
이제 Kale이 노트북을 Kubeflow Pipelines 파이프라인으로 변환하여 여러분의 노트북을 빌드합니다. 또한 Kale은 Rok와 통합되어 현재 노트북의 데이터 볼륨에 대한 스냅샷을 생성하기 때문에 스냅샷의 진행 상황을 볼 수 있습니다. Rok는 데이터 버전을 관리하고 사용자가 Compile and Run 버튼을 클릭했을 때와 마찬가지로 전체 환경을 재현합니다. 이렇게 하면 데이터와 코드를 위한 타임머신이 마련되고, 새로운 Docker 이미지를 빌드할 필요 없이 코드를 개발한 환경과 동일한 환경에서 파이프라인이 실행됩니다.
파이프라인이 컴파일되어 Kubeflow Pipelines에 업로드되었습니다. 이제 링크를 클릭하여 Kubeflow Pipelines UI로 이동하고 실행을 확인합니다.
Kubeflow Pipelines UI가 새 탭에서 열립니다. 실행이 완료될 때까지 기다립니다.
축하합니다. 지금까지 Kubeflow Pipelines에서 노트북에서 시작하여 엔드 투 엔드 파이프라인을 실행했습니다.
5. 초매개변수 조정을 통한 전이 학습
결과 검사
cnn-from-scratch 단계의 로그를 살펴봅니다. Kubeflow Pipelines UI에서 그래프의 단계를 클릭한 다음 로그 탭을 클릭합니다. 이 단계에서는 컨볼루셔널 신경망 (CNN)을 처음부터 학습시킵니다. 학습된 모델의 정확성은 매우 낮으며, 무엇보다 이 단계를 완료하는 데 오랜 시간이 걸렸습니다.
cnn-vgg16 step의 로그를 살펴봅니다. 이 단계에서는 Visual Geometry Group (VGG)에서 학습시킨 신경망인 선행 학습된 VGG-16 모델에서 전이 학습을 사용했습니다. 이전 모델보다 정확성이 훨씬 높았지만 여전히 개선이 가능합니다.
이제 cnn-resnet50 단계의 로그를 살펴보겠습니다. 이 단계에서는 선행 학습된 ResNet-50 모델에서 전이 학습을 사용했습니다. 정확성이 훨씬 더 높습니다. 따라서 이 Codelab의 나머지 부분에서 이 모델을 사용하게 됩니다.
초매개변수 조정
Kubeflow UI의 노트북 서버로 돌아가서 data/kale/examples/dog-breed-classification/
경로에 있는 dog-breed-katib.ipynb
라는 노트북을 엽니다. 이 노트북에서는 Katib을 사용하여 ResNet-50 모델에서 몇 가지 초매개변수 조정 실험을 실행합니다. 노트북 시작 부분에 매개변수를 선언할 셀이 하나 있습니다.
노트북의 왼쪽 창에서 Katib로 HP 조정을 사용 설정하여 초매개변수 조정을 실행합니다.
그런 다음 Set up Katib Job(Katib 작업 설정)을 클릭하여 Katib을 구성합니다.
각 매개변수에 대한 검색 공간을 정의하고 목표를 정의합니다.
Compile and Run Katib Job 버튼을 클릭합니다.
Katib 실험 진행 상황 보기:
보기를 클릭하여 Katib 실험을 확인합니다.
완료를 클릭하여 Kubeflow Pipelines (KFP)에서 실행을 확인합니다.
Katib 실험 페이지에 새로운 시도가 표시됩니다.
KFP UI에는 새로운 실행이 표시됩니다.
방금 무슨 일이 있었는지 자세히 살펴보겠습니다. 이전에 케일은 노트북에서 파이프라인 실행을 생성했고, 지금은 여러 개의 파이프라인 실행을 생성하고 있으며, 각 실행에는 다양한 인수 조합이 공급됩니다.
Katib은 범용 초매개변수 조정 작업을 실행하는 Kubeflow의 구성요소입니다. Katib은 실제로 실행 중인 작업 (Katib 전문 용어에서는 시도라고 함)에 대해 전혀 모릅니다. 케일은 검색 공간, 최적화 알고리즘, 목표만 신경 씁니다. Katib은 간단한 작업 (즉, 포드)을 시도로 실행하는 것을 지원하지만, Kale은 시도가 실제로 Kubeflow Pipelines에서 파이프라인을 실행한 다음 파이프라인 실행에서 측정항목을 수집하도록 shim을 구현합니다.
Katib 실험에서는 시도가 진행되므로 Katib UI에 더 많은 시도가 표시됩니다.
KFP UI에서 더 많은 실행:
Katib 실험이 완료되면 Katib UI에서 모든 시도를 볼 수 있습니다.
KFP UI의 모든 실행은 다음과 같습니다.
노트북으로 돌아가면 Kale 패널의 Katib 실험 바로 옆에 정보 버튼이 표시됩니다.
클릭하면 최상의 결과와 이를 생성한 매개변수가 표시됩니다.
6. 삭제
MinKF VM 폐기
GCP 콘솔에서 Deployment Manager로 이동하여 minikf-on-gcp
배포를 삭제합니다.
7. 축하합니다
수고하셨습니다. Kubeflow (MiniKF), Kale, Rok을 사용하여 엔드 투 엔드 데이터 과학 워크플로를 성공적으로 실행했습니다.
다음 단계
Kubeflow 커뮤니티 가입:
- github.com/kubeflow
- Kubeflow Slack
- kubeflow-discuss@googlegroups.com
- 주간 커뮤니티 통화, Slack, 기타 커뮤니티 세부정보