ML 워크플로우를 구성해주는 kubeflow에 대해 알아보고 설치해 보겠습니다. 사용되는 수많은 오퍼레이터 중 notebook 을 배포하는 오퍼레이터에 대해서 살펴보겠습니다.
Kubeflow 개요
- Kubeflow 개요
- Kubeflow = Kubernetes + ML flow
- 모델개발, 학습, 배포 및 추론 과정의 복잡한 ML Workflow를 Kubernetes환경에서 지원하는 오픈소스 플랫폼이다.
- Kubeflow 주요 기능
- ML 개발에 필요한 다양한 학습 환경 제공 (IDE)
- ML 프레임워크를 포함한 Jupyter Lab 뿐만 아니라 Rstudio, Visual Studio Code 등 여러 IDE 환경을 제공한다.
- 모델 튜닝 (Katib)
- 하이퍼파라미터 최적화를 위한 Katib 제공
- 모델 서빙 (KFServing)
- 유연하고 확장 가능한 모델 배포 및 및 추론 지원
- 다양한 모델 서버를 활용한 서빙을 지원하며, 모델 서비스를 위한 endpoint api 생성
- 파이프라인 (Pipeline)
- ML workflow 생성과 실행 관리
- 각 step을 graph로 표현하여 실행 모니터링 및 공유 가능
- Pipeline UI 및 Python SDK를 활용해 파이프라인 구성
- Fairing
- 작업한 모델을 로컬 클라우드에 train/deploy할 수 있는 라이브러리
- ML 개발에 필요한 다양한 학습 환경 제공 (IDE)
Kubeflow 설치
쿠베플로우는 kustomize 를 사용해 편리한 설치를 지원하고 있습니다. kustomize는 쿠버네티스 리소스를 customize 할 수 있는 도구 입니다. 기본적으로 쿠버네티스 클러스터 및 스토리지 클래스가 구성되어 있다는 가정하에 설치를 시작하겠습니다.
- Install kustomize
curl -s "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh" | bash
sudo mv kustomize /usr/local/bin/
kustomize version
- kubeflow 깃허브 소스 다운로드
git clone https://github.com/kubeflow/manifests.git
- Install kubeflow
while ! kustomize build example | kubectl apply -f -; do echo "Retrying to apply resources"; sleep 10; done
설치하다가 training operator 가 oom killed 에러를 출력할 때가 있는데 이땐 training operator의 requst.memory.limit을 50Mi 정도로 늘려주면 문제를 해결할 수 있다.
kubeflow 관련 다양한 리소스가 배포된 것을 확인할 수 있다.
kubeflow 가 제공하는 자세한 기능에 대해서는 https://www.kubeflow.org/docs/started/ 를 참고해주세요
Notebook 생성하기
쿠베플로우는 내부적으로 이스티오 서비스 매쉬를 사용하고 있습니다. 설치 시 자동으로 배포된 Istio-ingressgateway 가 노출한 NodePort로 쿠베플로우 대시보드에 접속합니다.
- 쿠베플로우 대시보드 로그인 화면
default user 계정은 user@example.com / 12341234 입니다.
오른쪽 상단에 위치한 Notebook 을 클릭합니다. 노트북 메뉴는 ML연구에 필요한 개발환경을 생성하는 역할을 합니다.
+ New Notebook 을 눌러 노트북을 생성해 보겠습니다. 원하는 사양의 노트북 정보를 입력하고 생성 합니다.
생성 버튼을 누르면 노트북이 생성을 시작합니다. 생성이 완료되면 Status 버튼이 초록색 체크문양으로 바뀝니다.
Connect 버튼을 클릭하면 생성한 노트북에 접속할 수 있습니다.
노트북은 생성되어 있을 동안 서버자원을 점유하고 있습니다. 이러한 이유로 장시간 사용하지 않을 경우 STOP 버튼을 눌러 노트북을 중지시켜 자원을 반환해야 합니다. 아래 보이는 것처럼 노트북을 중지하면 생성되었던 파드가 Terminating하게 됩니다. 여기서 의문이 생길수 있습니다. 중지한 나의 노트북 정보는 어디에 저장 될까요 ?
쿠베플로우는 notebook 이라는 CR로 사용자 노트북 정보를 저장합니다. notebook 매니페스트를 살펴보면 위에서 입력했던 정보들이 저장되어 있는 것을 확인할 수 있습니다. 해당 CR을 수정한 후 노트북을 재생성하면 변경된 값으로 파드가 생성됨을 확인할 수 있습니다.
매니페스트의 CPU 요청 코어수를 1에서 2코어로 변경해보겠습니다.
아래처럼 노트북의 요청 코어수가 2개로 변경되었습니다.
이처럼 notebook-controller 는 노트북 정보를 담은 커스텀 리소스를 모니터링하면서 desired state로 유지시키는 역할을 담당합니다.
마지막으로 쿠버네티스의 오퍼레이터 동작짤을 보며 마무리 하겠습니다.
정리하며
스터디에서 오퍼레이터 패턴을 학습하고 난 뒤 쿠버네티스 위에 동작하는 대다수의 서비스가 오퍼레이터를 사용하는 것을 알게 되었습니다. 덕분에 내가 몰랐던 내용도 보이기 시작했고 예전보다 깊이있게 분석하고 트러블슈팅을 할 수 있는 힘이 생겼습니다. 배운 내용을 기반으로 쿠버네티스 위에서 서비스를 운영할 때 나에게 필요한 오퍼레이터를 직접 만들수 있도록 연습을 더 할 예정입니다. 유익한 시간과 양질의 교육 제공해준 가시다님 감사합니다 ~
'Kubernetes' 카테고리의 다른 글
kubernetes 스터디 2주차 (0) | 2023.03.18 |
---|---|
kubernetes 스터디 1주차 (1) | 2023.03.11 |
Kafka Operator 설치 및 테스트 (0) | 2022.06.11 |
kubernetes prometheus operator 설치 및 알림 정책추가 (0) | 2021.02.15 |
컨테이너(Container) & 가상머신(VM) 비교 (0) | 2020.08.31 |