반응형
AI가 연구의 영역에서 실용 영역으로 침투하기 시작하면서, AI로 구성된 서비스를 어떻게 잘 제공할 것인지에 대한 수요가 높아지고 있다. 특히, chat-gpt로 AI 영역에서 엔지니어링의 중요성이 대두된 만큼, AI 서비스의 수집부터, 제공까지의 워크플로우를 어떻게 관리할 것인지에 대한 관심이 높아졌다. Kubeflow는 이런 상황 속에서 등장하고 발전했다. (처음 등장한 지는 조금 오래됐다 - 2018년)
ML workflow 란?
- Kubeflow를 알기 위해서는 ML workflow를 이해할 필요가 있다. ML workflow는 머신러닝 알고리즘을 개발하고, 이를 통해 만든 서비스를 배포하기까지의 일련의 과정들을 모두 포함한다. (사실, 머신러닝 & 딥러닝을 구분해야하지만, 해당 글에서는 머신러닝으로 줄여서 이야기한다.)
- 일반적으로 ML workflow는 다음과 같은 단계로 나뉜다.
- 데이터 수집 : DB or Online 등에서 데이터를 수집한다.
- 데이터 검증 : 수집한 데이터를 검증한다.
- 데이터 전처리 : 수집한 데이터에서 노이즈 제거 & 결측치 대체 & 스케일링, Normalization & Augmentation 등을 수행한다.
- 모델 학습 : 머신러닝 알고리즘을 선택하고, 전처리된 데이터를 사용하여 모델을 학습한다.
- 배포 : 모델을 실제 운영 환경에 배포하고 사용한다.
Kubeflow 란?
- Kubeflow의 시작은 구글에서 머신러닝에 사용되는 리소스를 효율적으로 관리하기 위해, Tensorflow Extended(TFX)을 사용하면서 처음으로 시작되었다. 후에 여러 개발자들이 모여서, 오픈소스 프로젝트로 공개되었다.
- Kubeflow는 이름에서 알 수 있듯, Kubernetes에서 동작하는 ML 워크플로우 툴이다. Kubernetes는 머신러닝 Job에 굉장히 적합한 플랫폼인데, 이유는 다음과 같다.
- 머신러닝의 학습 및 배포에는 다른 서비스에 비해, 리소스 자원의 활용이 크다. 따라서, 리소스를 어떻게 잘 컨트롤하여, 학습하고 배포할 것인지가 중요하다. → Kubernetes의 유연성 컨트롤
- 머신러닝 & 딥러닝은 환경 구축이 H/W나 OS, 라이브러리 버전 등에 따라 다 다르다. (머신러닝, 딥러닝 학습을 해본 사람들이면, 환경 구축에 정말 많은 시간이 소요된다는 것을 알 수 있을 것이다.) → Kubernetes의 장점인 확장성 & 유연성
- Kubeflow는 그 자체가 새로운 서비스라기보다는, Kubernetes 플랫폼 위에서 동작하기 위한, ML workflow에 필요한 여러 오픈소스 툴들을 모아놓은 것이다.
- 내가 생각하는 Kubeflow의 가장 큰 장점은, 서비스 구성 및 엔지니어링등에 상대적으로 약한 AI researcher들의 부담을 줄여주는 것이라고 생각한다. (운영단에 제공하는 서비스가 아니라면, Kubeflow의 필요성은 조금 약하다고 생각한다. 다만, Kubernetes 환경에서 모델을 학습하는 경우에는 쓰지 않을 이유가 없다.)
Kubeflow의 구조
- 아래 그림은 Kuberflow 홈페이지에 있는 Kuberflow 아키텍처에 대한 Conceptual Overview이다.
- 맨 아래, 어떤 플랫폼에서든 Kubernetes를 활용할 수 있다는 것을 강조하고, 그 위에 Kubeflow가 올라가 있다는 것을 보여준다.
- 즉, Kubernetes 환경 위에서 여러 ML workflow component 들을 묶어서, Kubeflow로 제공해 주고, 그 위에 Pytorch나 Tensorflow등 다양한 언어를 활용해서 Kubeflow를 운영할 수 있다는 것을 강조하고 있다.
- 그림의 우측에 Istio(트래픽 관리, 보안 등), Argo(워크플로우 관리), Prometheus(모니터링), Spartakus(사용자 데이터 수집) 등을 함께 활용하여, 운영 환경의 안정성을 높일 수 있다는 것을 보여준다.
Kubeflow의 Component
- Kubeflow는 여러 ML workflow 툴들의 집합이라고 위에서 소개했다. 어떤 것이 있는지 알아보자.
- 우선, ML workflow를 크게 2개로 분류할 수 있다. 알맞는 모델을 찾기 위한 실험 단계와, 선택된 모델을 가지고 서비스를 운영하는 단계이다.
- 실험 단계에서는 다음과 같은 Component 들을 제공한다.
- Jupyter Notebook : Kubernetes 위에서 Jupyter Notebook을 사용해서, 모델을 개발 & 실험해볼 수 있게 해준다.
- Fairing : 모델의 생성 & 학습 & 배포등을 Kubernetes Cluster로 쉽게 요청할 수 있게 해준다. (즉, 모델을 Docker Image 형태로 Kubernetes에 뿌려준다.)
- Katlib : 하이퍼파라미터 최적화 & 뉴럴 아키텍쳐 탐색을 지원함. (각기 다른, 하이퍼파라미터와 아키텍쳐를 설정해서, 원하는 결과가 나올때까지 실험해 볼 수 있음)
- 운영 단계에서는 다음과 같은 Component들을 제한다.
- Pipelines : ML workflow(수집 & 검증 & 전처리 & 학습 & 배포)를 end-to-end로 만들어 주는 툴 (Argo를 사용한다.)
- Metadata : Kubeflow Pipelines에서 실행되는 ML workflow에 대한 metadata를 관리하는 서비스
- KFServing : Kubernetes 위에서 머신러닝 서빙(Serving)을 위해 사용하는 툴
- TensorRT : 미리 학습된 모델의 정확도를 유지하면서, Inference 속도를 최적화해주는 툴
- Pytorch : 파이토치
- TFServing : Tensorflow 모델의 서빙(Serving)을 위해 사용하는 툴
- Seldon : 머신러닝 모델의 배포 및 관리를 위한 툴
- Tensorboard : 머신러닝 모델 디버깅 & 시각화 툴
Kubeflow의 UI
- Kubeflow는 Command 명령어로 구동 가능하다. 하지만, Command 명령어로 Kubeflow 내에 있는 기능을 각각 사용할 것이라면, Kubeflow를 사용하는 의미(통합성 & 편의성 등...)가 덜하다고 생각한다.
- Kubeflow의 UI는 편하면서, 불편하다. 메뉴에 있는 각 Component들을 각각 사용하기에는 편한데, 그 사이에 어떠한 연관성이 있는지 등등은 드러나지 않는다. (어느 메뉴들은 같이 사용해야하고, 어느 메뉴는 독립적이고...)
- Kuberflow는 "Central Dashboard"라는 UI를 통해, 각 component를 쉽게 접근 할 수 있도록 해준다.
- Home: Home이다.
- Notebook Servers: Jupyter Notebook 서버를 사용할 수 있게 해준다.
- TensorBoards: Tensorboard를 쉽게 사용 할 수 있게해준다.
- Models: 배포된 KFServing 모델들을 관리한다.
- Volumes: Cluster의 저장소를 관리한다.
- Experiments (AutoML): Katlib(하이퍼파라미터 튜닝 등)을 사용할 수 있게 해준다.
- Experiments (KFP): 실험용 Kuberflow Pipeline(KFP)을 사용할 수 있게 해준다.
- Pipelines: end-to-end Kuberflow Pipeline(KFP)을 사용할 수 있게 해준다.
- Runs: Kuberflow Pipeline(KFP)의 실행을 관리한다.
- Recurring Runs: Kuberflow Pipeline(KFP)의 반복적 실행을 관리한다.
- Artifacts: Metadata를 확인 할 수 있게 해준다.
Kubeflow를 보면서, 느낀 것은 아직은 ML workflow의 end-to-end를 책임지기에는 역부족이지만, 앞으로 발전해 간다면 정말 유용하게 사용될 것 같다. 아무래도, 각 Component가 독립적으로 개발되어서, Component 간에 연결이 완벽하지 않다는 느낌을 자주 받았다. Component 간의 연결성이나, kubeflow 자체의 서비스 등을 제공한다면 더 좋을 것 같다. 우선, 다음 장부터 Kubeflow를 설치해 보기로 한다.
'MLops' 카테고리의 다른 글
MLops 등장: Hidden Technical Debt in Machine Learning Systems 논문 리뷰 (17) | 2024.02.18 |
---|---|
Kubeflow (2) - Katlib (1) | 2023.04.11 |
Kubeflow (1) - 설치 (Windows 11 - WSL로 설치) (3) | 2023.03.28 |