Kubeflow 소개

Kubeflow 살펴보기

Kubeflow는 머신 러닝을 위한 클라우드 네이티브(Cloud Native) 플랫폼입니다. 구글 내부에서 사용하던 머신 러닝 파이이프 라인을 기반으로 해서 만들어졌습니다. Kubeflow는 쿠버네티스(Kubernetes) 위에서 작동합니다. 그래서 자원 관리, 확장 등의 쿠버네티스의 장점을 그대로 이용할 수 있습니다.

다음은 Kubeflow 사이트(https://www.kubeflow.org/docs/about/kubeflow/)에 나와 있는 소개글을 번역한 내용입니다.

Kubeflow 프로젝트는 쿠버네티스에서 머신 러닝 워크 플로를 간단하고 이식 가능하며 확장 가능하게 구축하는 데 전념하고 있습니다. 우리의 목표는 다른 서비스를 재창조하는 것이 아니라 ML을위한 동급 최강의 오픈 소스 시스템을 다양한 인프라에 배포하는 간단한 방법을 제공하는 것입니다. 쿠버네티스를 실행하는 모든 곳에서 Kubeflow를 실행할 수 있어야합니다.

Kubeflow가 있다면, 주피터를 사용하여 모델을 개발할 수 있습니다. 그리고 페어링(fairing)과 같은 Kubeflow 도구를 사용하여, 컨테이너 이미지를 만들고, 쿠버네티스 자원을 활용하여 모델을 학습할 수 있습니다. 모델이 만들어지면 KFServing 같은 것을 사용하여 추론(inference)을 위한 서버를 만들고 배포할 수 있습니다.

이 글은 Kubeflow를 사용하여, 머신 러닝 관련 작업을 간단하고 효율적으로 사용하는 방법에 대해서 설명하고자 합니다.

머신 러닝 플랫폼

Hidden Technical Debt in Machine Learning Systems (https://papers.nips.cc/paper/5656-hidden-technical-debt-in-machine-learning-systems.pdf) 라는 논문에 아래와 같은 그림이 있습니다.

대부분의 사람들은 머신 러닝에 대해서 생각할때, 모델 코드를 만드는 것에 많은 시간을 보낸다고 생각하고 있습니다. 위의 그림에서 알 수 있듯이, 머신 러닝 시스템에서 모델 코드가 차지하는 비중은 얼마되지 않습니다.

실제로 머신 러닝 모델을 만들어서 서비스에 적용시키는 일은, 모델을 만드는 시간보다 데이터 수집과 분석 그리고 모델을 튜닝하는 등의 반복적인 작업이 더 많이 소모됩니다. 그래서 이러한 일련의 과정을 묶어서 파이프라인으로 구축하게됩니다. 하지만, 서비스가 많아지고, 파이프라인이 많아지면 시스템이 복잡해져서 유지보수가 힘들어지기 시작합니다. 이러한 이유로 머신 러닝 플랫폼이 필요하게 되는 것입니다.

Kubeflow를 사용하는 이유

Kubeflow는 쿠버네티스에서 머신 러닝 워크 플로를 실행하기 위해서 만들어졌습니다. 일반적으로 다음과 같은 이유로 사용할 수 있습니다.

  • 이미 쿠버네티스 기반의 인프라가 있거나, 새로운 머신 러닝 플랫폼을 만들려는 경우
  • 다양한 환경(예 : 로컬, 온 프레미스 및 클라우드)에서 머신 러닝 모델을 학습하거나 서비스하려는 경우
  • 자원(예 : CPU 또는 GPU)를 할당하여 작업을 하려는 경우
  • Jupyter 노트북을 사용하여 머신 러닝 작업을 하려는 경우

Kubeflow를 사용하면 데이터 과학자에게 인프라가 아닌 모델링에만 집중할 수 있는 환경을 제공해 줄 수 있습니다. 그리고 컨테이너 기반의 독립된 환경에서 연구를 할 수 있기 때문에, TensorFlow, PyTorch, MXNet 등 다양한 프레임워크를 사용할 수 있습니다. GPU 같은 자원을 이용해서 모델을 분산 학습 시킬 수 도 있습니다.

또한 Hyper parameter tuning 과정을 쉽게 자동화할 수 있는 기능도 제공하고 있으며, 만든 모델을 실제 서비스에 배포할 수 있는 서빙 도구들도 제공하고 있습니다.

Kubeflow 컴포넌트(Component)

Kubeflow의 대표적인 컴포넌트는 다음과 같습니다.

  • Kubeflow’s UI – Central Dashboard
  • Jupyter Notebooks
  • Metadata
  • Frameworks for Training
  • Hyperparameter Tuning : Katib
  • Pipelines
  • Tools for Serving
  • Profile

Central Dashboard

Kubeflow의 UI 화면으로서, Kubeflow의 구성 요소를 쉽게 접근할 수 있는 대시보드가 포함되어 있습니다.

대시보드에는 다음과 같은 기능이 포함되어 있습니다.

특정 작업에 대한 바로 가기, 최근 노트북 목록 및 파이프 라인 목록을 한 번에 볼 수 있습니다.

파이프라인, 노트북, Katib 등 클러스터에서 실행중인 컴포넌트 목록을 볼 수 있습니다.

Kubeflow UIs

대시보드에서 볼 수 있는 컴포넌트 목록은 다음과 같습니다.

  • Home : Kubeflow 대시보드로 이동합니다.
  • Pipelines : Kubeflow 파이프라인 대시보드로 이동합니다.
  • Notebook Servers : 주피터 노트북 목록 화면으로 이동합니다.
    • Katib : 하이퍼파라메터 튜닝을 하는 Katb 화면으로 이동합니다.
  • Artifact Store : 아티펙트 저장소 호면으로 이동합니다.
  • Manage Contributors : 쿠버네티스 네임스페이스에 접근할 수 있는 사용자를 관리할 수 있는 화면으로 이동합니다.

메타데이터 (Metadata)

Kubeflow에서 실행하는 머신 러닝 워크 플로우의 메타 데이터를 추적 및 관리하는데 사용합니다.

메타데이터 컴포넌트는 Kubeflow 사용자가 머신 러닝 워크 플로에서 생성하는 메타 데이터를 추적하고 관리함으로써, 머신 러닝 워크 플로를 이해하고 관리 할 수 ​​있도록 도와 줍니다.

Kubeflow v1.0 버전에 포함된 메타데이터 컴포넌트는 beta 상태입니다.

Jupyter Notebooks

Kubeflow에서 주피터 노트북을 사용할 수 있도록 도와줍니다.

주피터 노트북을 생성하고 관리 할 수 있는 기능을 제공합니다.

Frameworks for Training

Kubeflow에서 머신 러닝 모델을 학습할 수 있도록 도와줍니다.

Kubeflow에서 제공하는 학습 프레임워크는 다음과 같습니다.

  • Chainer Training
  • MPI Training
  • MXNet Training
  • PyTorch Training
  • TensorFlow Training (TFJob)

Hyperparameter Tuning : Katib

Kubeflow에서 머신 러닝 모델의 하이퍼 파라미터 튜닝을 할 수 있도록 도와줍니다.

Katib는 머신 러닝 모델의 하이퍼 파라미터 및 뉴럴 아키텍처(Neural Architecture)를 자동으로 튜닝할 수 있는 기능을 제공합니다. Katib는 TensorFlow, PyTorch, Apache MXNet, XGBoost 등 다양한 머신 러닝 프레임 워크를 지원합니다.

Kubeflow v1.0 버전에 포함된 메타데이터 컴포넌트는 beta 상태입니다.

Pipelines

Kubeflow 파이프라인은 컨테이너를 기반으로 확장 가능한 ent-to end 머신 러닝 워크 플로를 구축하기 위한 플랫폼입니다.

머신 러닝 파이프라인을 관리하는 기능을 제공하여 ent-to end 오케스트레이션을 지원합니다. 그리고 수 많은 아이디어와 기술을 시도할 수 있도록 시험(trials)과 실험(experiments)을 관리할 수 있는 기능도 제공합니다.

Tools for Serving

Kubeflow는 두 가지 모델 서빙 시스템인 KFServing과 Seldon Core를 사용할 수 있습니다. KFServing과 Seldon Core는 다중 프레임워크 모델 서빙을 지원합니다. 그리고 TensorFlow Serving와 NVIDIA TensorRT Inference Server 같은 독립형 모델 제공 시스템을 사용할 수 있습니다.

  • KFServing
  • Seldon Serving
  • NVIDIA TensorRT Inference Server
  • TensorFlow Serving

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다