데이터를 걷는 선비

[Kubeflow] 쿠브플로 아키텍처(Kubeflow Architecture) 개요 본문

Machine Learning/MLOps

[Kubeflow] 쿠브플로 아키텍처(Kubeflow Architecture) 개요

세미제로 2023. 8. 14. 20:45

[순서] 

  • 1) Kubeflow 아키텍처 개요
  • 2) Kubeflow Job을 실행하는 방식
  • 3) 머신러닝 메타데이터 서비스
  • 4) 아티팩트 스토리지
  • 5) 주피터 노트북 아키텍처
  • 6) 파이프라인 아키텍처

1)  Kubeflow 아키텍처 개요

 

 

- 위 다이어그램은 쿠브플로의 상위 단계 아키텍처를 나타낸다.

- 쿠브플로 시스템의 시작은 1. CLI를 통한 요청 / 2. kubectl을 통한 요청으로 나뉘며

- 이러한 요청을 통해 쿠버플로 잡(Job) 이 생성된다.

- 쿠브플로 잡은 주피터 노트북과 같은 Kubeflow Notebook일 수 있으며

- 파이프라인(Kubeflow Pipeline)으로 연결된 파이썬 스크립트일 수 있다.

 

아래 아키텍처를 상세히 보며 쿠브플로와 쿠버네티스가 어떻게 작동하는지 알아보자!!


2)  Kubeflow Job을 실행하는 방식

1. CLI

명령 줄 인터페이스에서 파이썬 스크립트 수행 목적으로 kubectl을 사용해 쿠브 플로 잡을 실행할 수 있다.

 

2. 사용자 인터페이스

파이프라인

 

사용자 인터페이스에서 직접 비순환 그래프를 구성하고, 이것을 이용해 쿠브플로에서 오케스트레이션(관리)되는 여러 개를 관리할 수 있다.

 

주피터 노트북

 

또한 주피터 노트북 서버를 실행함으로써 쿠브플로 잡을 실행할 수 있다.


3)  머신러닝 메타데이터 서비스

 

쿠버플로 잡이 실행되며 쌓이는 메타데이터는 쿠버플로 MySQL 데이터베이스에 쌓이게 된다.

이렇게 저장된 메타데이터는 특정 실험에서 실행되는 잡을 추적하도록 도와준다.

 

여기서 메타데이터는 아래와 같은 것들을 의미한다.

- 실행에 대한 메타데이터

- 머신러닝 모델에 대한 데이터

- 데이터셋에 대한 데이터


4)  아티팩트 스토리지

 

마찬가지로 쿠버플로 잡을 실행하며 쌓인 아티팩트역시, 아티팩트 스토리지에 저장된다.

기본적으로 Kubeflow는 Minio라는 오브젝트 스토리지(Object Storage)를 내장으로 아티팩트 스토리지를 사용하고 있다.

 

주로, 아티팩트와 메타데이터의 개념이 헷갈릴 수 있는데, 

파이프라인의 패키지, 뷰, 대규모 메트릭을 가리키며,

거의 비슷하되 저장되는 위치가 다른 점 오브젝트 스토리지(아티팩트)데이터베이스(메타데이터)로 다르다는 점이 특징이다.

 


5)  주피터 노트북 아키텍처

 

- 쿠브플로는 쿠브플로 환경에 네이티브로 만들어진 주피터 노트북에 새로운 웹 유저 인터페이스를 제공한다.

- 쿠브플로의 주피터 노트북이라는 용어는 두 가지를 의미하는데,

- 하나는 데이터 사이언티스트가 사용하는 실제 .ipynb 주피터 노트북 파일을 의미하고, 

- 다른 하나는 주피터 노트북을 실행하는 주피터 노트북 서버(주피터 노트북 컨트롤러)를 의미한다.

 

여기서 주피터 노트북 서버는 

- (1) 주피터 노트북 서버 런처 사용자 인터페이스

- (2) 고유 파드로 실행되는 주피터 노트북 컨트롤러로 구성된다.

 

(1) 주피터 노트북 서버 런처 사용자 인터페이스는 주피터 노트북 관련 리소스를 요청할 수 있는 사용자 웹 인터페이스로

아래와 같이 노트북의 이름 / 네임스페이스 / CPU 자원 / 메모리 자원 / 워크스페이스 볼륨 / 데이터 볼륨 등의 리소스를 설정할 수 있다.

 

(2) 주피터 노트북 컨트롤러는 사용자들의 커스텀 리소스 주피터 노트북을 생성할 수 있게 하는 컨트롤러로, 

쿠버네티스에서 컨테이너 이미지를 사용해 파드로 실행된다.


6)  파이프라인 아키텍처

 

파이프라인 아키텍처를 상세히 하면 아래와 같다.

 

(1) 쿠브플로 파이프라인의 고수준 실행은 정적 설정에서 정적 파이프라인을 생성하기 위해 파이프라인 서비스를 호출한다. 여기서 파이프라인 설정을 위해 Python SDK를 이용해 파이프라인 도메인 특화언어(DSL)을 써야 하며,

이 DSL 컴파일러는 파이프라인 설정을 YAML 파일(정적 설정)으로 바꿔준다.

 

(2) 파이프라인 서비스가 파이프라인 실행에 필요한 쿠버네티스 리소스(CRD)을 준비하고 실행하기 위해 쿠버네티스 API 서버를 호출한다.

 

(3) API 서버가 오케스트레이션 컨트롤러와 쿠버네티스 컨트롤러를 통해 파이프라인 잡을 실행하며

 

(4) 쿠버네티스 자체 기반 데이터는 etcd 에 저장이 되며, 쿠브플로와 관련된 머신러닝 메타데이터와 아티팩트는 각각 데이터베이스와 오브젝트 스토리지에 저장된다.

Comments