쿠버네티스 + mlflow(머신러닝) = Kubeflow 란 무엇인가

2023. 1. 13. 15:07machine learning

728x90
반응형

Kubernetes에서 실행되는 확장 가능하고 이식 가능한 분산 ML 플랫폼

  • 실제 ML 시스템의 극히 일부만이 ML 코드로 구성됨. 필요한 주변 인프라는 방대하고 복잡함.
  • Kubeflow 의 목적은 머신러닝 워크플로우를 Kubernetes 에 배포하는 것을 단순화 시키는 것
  • Kubeflow 가 해결하는 문제
    • 더 빠르고 일관된 배포
    • 더 강력한 보안을 위한 포트 및 구성 요소 액세스에 대한 더 나은 제어
    • 과잉 프로비저닝 리소스로부터 보호, 비용 절감
    • 완료 후 할당이 해제되지 않는 작업으로부터 보호하여 비용 절감
    • 워크플로우 오케스트레이션 및 메타 데이터 수집
    • 중앙 집중식 모니터링 및 로깅
    • 모델을 안전하게 대규모로 프로덕션으로 이동하기위한 인프라
    • AI 조직을 대규모로 관리하면서 동일한 제어 품질을 유지할 수 있음 
  • MDLC(Model development life cycle) 전 단계를 지원 (데이터 탐색, 피쳐 준비, 모델 학습/튜닝, 서빙, 테스팅, 버져닝)
  • 모든 컴포넌트를 연결하는 통합된 end-to-end 파이프라인 시스템을 지원

컨테이너를 사용하는 이유

  • 컨테이너가 제공하는 isolation 을 통해 머신러닝 단계들을 이식 가능하고 재현 가능하게 해줌
    • 재현 가능하지 않다면 다른 사람에게 또는 훗날 작업자 스스로에게 동작 가능한 형태로 전달할 수 없어 문제가 됨
  • 한 서버를 같이 쓸 때 의존성 충돌을 해결해줄 수 있음
  • 다른 사람이 쓰고있는 GPU를 피하기 위해 수동으로 작업하는 문제를 해결할 수 있음
  • 이미지로 만들어 놓으면 다른 서버로 이전할 때 별 다른 작업이 필요 없음
  • 다른 사람들이 잘 만들어 놓은 이미지를 손 쉽게 사용 가능
  • 배포를 위해 추가 작업을해야하는 수고를 덜 수 있음

Kubernetes를 사용하는 이유

  • 컨테이너의 배포, 확장, 관리를 자동으로 해주는 시스템
  • 머신러닝 단계 별로 다른 수량과 종류의 리소스를 요청 가능하게 해줌
    • 예를 들면, 데이터 준비에는 여러 대의 머신이 유리하고 모델 학습에는 GPU 가 유리함
  • 이런 유연함은 특히 클라우드 환경에서 유용함 - 고 비용의 리소스를 필요할 때만 사용하여 비용절감 가능

Kubeflow’s Design and Core Components

  • Composability (결합성)
    • Kubeflow의 핵심 컴포넌트들은 이미 친숙한 데이터 사이언스툴로 부터 왔다
  • Portability (이식성)
    • 컨테이너 기반 설계 및 Kubernetes 의 장점 덕분에 Kubeflow는 어느 특정 개발환경에 얽매일 필요가 없다
    • laptop 에서 실험하고 프로토타입핑한 뒤 노력 없이 production 에 배포할 수 있다
  • Scalability (확장성)
    • Kubernetes를 사용하여 요구에 따라 동적으로 확장 가능하다. 컨테이너와 머신의 숫자와 크기를 바꾸면 된다.

Data Exploration with Notebooks

  • MDLC는 항상 데이터 탐색과 함께 시작한다 - 도표를 그리고, 분할하고, 조작
  • Jupyter 는 그러한 탐색을 위한 도구와 환경을 지원하는 강력한 도구이다
  • Kubeflow 에서 Jupyter Notebooks 은 Fairing 을 통해 Kubernetes 에 training jobs 을 제출할 수 있다

Data/Feature Preparation

  • 머신러닝 알고리즘은 좋은 데이터가 필요하고 데이터의 추출, 변환, 저장을 위한 특별한 도구가 필요하다
  • 일반적으로 입력 데이터를 필터, 정규화, 준비하여 통찰력있는 features 를 추출한다
  • Kubeflow 는 이를 위해 몇몇 도구들을 지원한다
    • Apache Spark (인기 있는 빅데이터 도구 중 하나)
    • TensorFlow Transform (TensorFlow Serving 과 통합하여 보다 쉬운 추론을 제공)

Training

  • features 가 준비되면 모델을 빌드하고 학습하기 위한 준비가 된 것이다
  • Kubeflow 는 다양한 학습 프레임워크를 지원한다
    • TensorFlow, PyTorch, Apache MXNet, XGBoost, Chainer, Caffe2, Message passing interface (MPI)

Hyperparameter Tuning

  • 머신러닝에서 하이퍼파라미터는 학습 과정을 좌우하는 변수들이다
    • 예를 들면, 모델의 learning rate 가 어떤지? 신경망에 얼마나 많은 hidden layers 와 neurons 이 있는지?
    • 이 파라미터들은 학습 데이터의 일부는 아니지만 모델 학습의 성능에 큰 영향을 미칠 수 있다
  • Kubeflow 를 이용하여 확실하지 않은 학습 모델로 시작하고 하이퍼파라미터 검색 공간을 정의하면 Kubeflow 가 나머지 작업을 처리 - 다른 하이퍼파라미터를 사용하는 학습 작업을 생성, 측정항목을 수집, 결과를 모델 DB에 저장하여 그 것들의 성능을 비교할 수 있음

Model Validation

  • 모델을 production 에 배포하기 전에, 어떻게 돌아가는지 아는 것이 중요하다
  • 하이퍼파라미터 튜닝에 쓰인 것과 같은 도구가 모델 validation 을 위해 cross-validation 을 수행한다
  • 기존 모델을 업데이트할 때 A/B 테스팅 같은 기술을 모델 추론에 사용하여 모델을 온라인으로 검증할 수 있다

Inference/Prediction

  • 모델 트레이닝 후 다음 단계는 예측 요청을 다룰 수 있도록 클러스터에 모델을 서빙하는 것이다
  • Kubeflow 는 data scientist 들이 프로덕션 환경에서 대규모로 머신러닝 모델을 배포하는 것을 쉽게해준다
  • 현재 Kubeflow 는 TensorFlow Serving 및 Seldon Core와 같은 기존 솔루션 외에도 모델 서빙을 위한 다중 프레임 워크 컴포넌트 KFServing 을 제공한다
  • Kubeflow 에서 다양한 유형의 모델을 서빙하는 것은 꽤 간단하다. 많은 경우 컨테이너를 직접 빌드하거나 커스터마이즈할 필요가 없고 간단히 Kubeflow에게 모델이 어디에 저장되어 있는지, 서버가 요청 들을 서비스할 준비가 되었는지 알려주면 된다
  • 모델이 서빙되면 성능을 모니터링 하는 것이 필요하고 업데이트 되어야 한다. 이러한 모니터링과 업데이트는 Kubeflow 의 cloud native design 을 통해 가능하다.
  • KFServing 의 핵심 가치
    • 통합 데이터 플레인 및 사전 구축 된 모델 서버를 사용하여 조직 전체에서 모델 서비스를 표준화하도록 지원
    • 추론 서비스 / 서버를 배포, 모니터링하고 추론 워크로드를 확장하는 단일 방법
    • 데이터 과학자가 모델을 프로덕션에 배포하는 데 걸리는 시간을 크게 단축

Pipelines

실험의 재사용 및 관리를 위해 Kubeflow 는 MDLC 를 머신 러닝 파이프라인으로 취급하고 이를 그래프로 구현 함

  • 다단계 워크플로우를 위한 오케스트레이션 엔진
  • 파이프라인 구성 요소와 상호작용하는 SDK
  • 사용자가 실험을 시각화 및 추적하고 결과를 공동 작업자와 공유할 수 있는 사용자 인터페이스

Kubeflow 모범 사례

작업 종속성 관리

  • 빠른 TensorFlow 작업을 위해 준비되어있는 Docker 이미지 사용 가능. kubectl 을 통해 파이썬 코드 컨테이너를 실행하고 컨테이너내에서 의존성을 빌드.
  • 그러나 Docker 와 같은 도구에 익숙하지 않은 일부 노트북 사용자는 여전히 사용자 지정 의존성이있는 노트북 서버를 시작해야 할 수 있다.
  • Kubeflow 에서 노트북의 의존성을 관리하기 위한 두 가지 방법이 있음.
    • pip 를 사용하여 노트북 셀 안에서 의존성을 동적으로 설치
    • 이미 내장 된 의존성으로 사용자 지정 노트북 Docker 이미지를 빌드
  • 이 동일한 의존성 집합을 계속 사용할 것이라는 것을 알고 있다면 특정 Jupyter 노트북에 대한 고유한 Docker 이미지를 빌드할 수 있다.
  • 고유한 Docker 이미지를 빌드하는 다른 이유들
    • pip 을 실행하기위해 필요한 권한이 환경에 없는 경우
    • 클러스터에서 인터넷 접속이 되지 않는 경우

사용자 지정 노트북 Docker 이미지 빌드

FROM gcr.io/kubeflow-images-public/tensorflow-2.1.0-notebook-gpu:1.0.0
COPY requirements.txt .
USER rootRUN apt -y install libspatialindex-dev
RUN pip3 --no-cache-dir install -r requirements.txt
USER jovyan
  • GPU 를 이미 지원하는 TensorFlow 2.1 노트북 이미지를 사용
  • 이미 존재하는 이미지를 활용하여 Kubeflow팀이 이미 해놓은 작업의 이점을 누리고 단지 필요한 의존성만 추가하면 됨
  • Docker 빌드 후 레지스트리(e.g. Docker Hub) 로 푸시
  • Kubeflow 의 노트북 서버 구성 페이지의 Custom Image 필드에서 사용 가능 
728x90
반응형