Kubeflow Pipeline 개념

노하람·2021년 11월 19일
0
post-custom-banner

쿠버플로우 파이프라인은 컨테이너 기반의 엔드 투 엔드 ML 워크플로우를 만들고 배포할 수 있는 k8s 플랫폼입니다.
컨테이너 기반으로 구성되어 있기 때문에 확장성 및 재사용성이 좋습니다.
k8s의 자원을 관리하기 위해 백엔드 프레임워크로 argo 라는 워크플로우 툴을 사용합니다.

쿠버플로우 파이프라인은 아래와 같이 구성되어 있습니다.

  • 실험(Experiment), 잡(Job), 런(Run)을 추적하고 관리하는 UI
  • ML 워크플로 단계별 스케쥴링 엔진
  • 파이프라인과 그 컴포넌트들을 생성하는 SDK
  • SDK와 연동하는 쥬피터 노트북

그리고 쿠버플로 파이프라인이 지향하느 바는 다음과 같습니다.

  • 쉬운 파이프라인 구성
  • 쉬운 파이프라인 생성 : Trial/Experiments 컴포넌트들을 통해 다양한 기술을 적용할 수 있습니다.
  • 쉬운 재사용 : 컨테이너 기반이기 때문에 한번 작성해둔 파이프라인 컴포넌트는 어디서든 재사용이 가능합니다.

파이프라인

파이프라인은 워크플로의 컴포넌트들과 그것을 그래프 형태로 결합하는 것을 포함한 ML 워크플로우의 한 형식이라고 설명할 수 있습니다.
또한 파이프라인을 실행하기 위한 입,출력에 대한 정의도 포함됩니다.

사용자는 파이프라인을 개발한 후 쿠버플로우 파이프라인을 통해 업로드/공유를 할 수 있습니다.
사용자가 작성한 파이프라인 컴포넌트는 도커이미지로 패키징되며, 그래프의 결합 형태에 따라 순서대로 실행됩니다.

파이프라인이 실행되면 시스템은 각 단계에 맞는 쿠버네티스 파드를 실행시킵니다.
그리고 그 파드는 설정된 컨테이너를 실행 시키고, 컨테이너 안에 있는 애플리케이션을 실행시킵니다.(파드는 컨테이너를 담습니다.)
스케쥴러에 따라서 순서대로 컨테이너들이 실행됩니다.

아키텍처

파이프라인 실행은 다음과 같이 진행됩니다.

  • Python SDK: 파이프라인 DSL(Domain Specific Language)을 통해서 컴포넌트를 작성합니다.
  • DSL Compiler: 파이썬 코드를 쿠버네티스 리소스 양식(YAML)로 변환합니다.
  • Pipeline Service: 쿠버네티스 리소스 양식에서 파이프라인을 생성하기 위해 Pipeline Service를 호출합니다.
  • k8s resources: Pipeline Service가 쿠버네티스 API 서버를 호출하여 파이프라인을 실행하기 위한 k8s 리소스를 생성합니다.(Create Resource)
  • Orchestration controllers: 오케스트레이션 컨트롤러는 생성된 k8s 리소스에 정의된 파이프라인을 실행하기 위한 컨테이너를 실행합니다. 이 컨테이너는 k8s 파드에서 실행됩니다.
  • Artifact storage: 실행된 파드는 파이프라인의 실험정보들을 담는 Meta-data를 준비된 database(mysql) 서버에 담고, 그 외의 큰 사이즈의 정보들인 Artifacts를 Minio 서버나 혹은 클라우드 스토리지에 저장합니다.
  • Pipeline Web Server : 실행된 파이프라인은 웹 UI를 통해 진행 상황과 생성되는 데이터 및 정보들을 보여줍니다.

컴포넌트

컴포넌트는 ML 워크플로우의 한 단계를 수행하는 코드 집합입니다.
인풋, 아웃풋, 이름, 상세구현 등 함수와 유사합니다.
파이프라인 DSL로 작성된 파이썬 코드가 YAML 파일로 컴파일되는데
쿠버플로우 파이프라인의 컨테이너 컴포넌트 데이터 모델 형식으로 변환됩니다.

Metadata, Interface, Implentation 이라는 필드들로 구성되며,
여기에는 파이프라인의 이름, 인풋/아웃풋 타입 등이 기재됩니다.
자세한 내용은 쿠버플로우 레퍼런스를 참고합니다.

  • 메타데이터: 이름, 설명 및 기타 메타데이터.
  • 인터페이스(입력 및 출력): 이름, 유형, 기본값.
  • 구현: 입력 인수가 주어지면 구성 요소를 실행하는 방법입니다.

그래프

그래프는 파이프라인 UI에서 파이프라인의 런타임 실행을 나타내는 그림입니다.

파이프라인을 실행했거나 실행중이면 단계가 색깔로 구분되어 표시됩니다.(실행 대기중인 그래프는 보이지 않습니다.)
파이프라인을 잇는 화살표는 파이프라인의 상-하위 관게를 나타냅니다.
그래프 내의 각 노드는 파이프라인 내의 단계에 해당하며 그에 따른 레이블이 지정됩니다.

런(Run), 리커링 런(Recurring Run)

Run은 파이프라인의 단일 실행 단위입니다.
즉, 런은 파이프라인 명세를 실행합니다.
객체와 인스턴스 관계라고 보시면 됩니다.
파이프라인 UI를 통해서 상세 정보를 확인할 수 있습니다.

리커링 런(Recurring run)은 파이프라인을 주기적으로 실행하는 런입니다.
Cron 형태도 가능하며 특정 기간을 정의할 수도 있습니다.
배치성 작업이나 모니터링 작업에 적합합니다.
이 반복적인 작업은 런 트리거(Run Trigger)가 담당합니다.

런 트리거(Run Trigger)

런 트리커는 런을 새롭게 생성해야 하는지 말아야 하는지를 시스템에게 알래주는 플래그(Flag)입니다.
두가지 타입의 런 트리거가 제공됩니다.
1. Periodic: 간격 기간의 스케쥴링을 제공합니다. 매 30분마다 실행같은 식입니다.
2. Cron: Cron 형태의 스케쥴링을 제공합니다.

스텝(Step)

스텝은 파이프라인에서 하나의 컴포넌트의 실행을 뜻합니다.
복잡한 파이프라인에서 컴포넌트들은 중첩되어 실행되기도 하며,
if/else 분기에 따라서 선택적으로 실행되기도 합니다.

Experiment

파이프라인을 실행하는 워크스페이스입니다.
파이프라인 실행의 논리적 그룹으로 보아도 상관은 없습니다.
파이프라인 설치시 default라는 experiment가 생성됩니다.
특별한 experiment를 정하지 않는 한, run은 default에서 실행됩니다.

Output Artifact

아티팩트는 파이프라인 컴포넌트의 출력입니다.
아티팩트를 통해서 파이프파린의 다양한 구성 요소가 어떻게 작동하는지 이해할 수 있습니다.
아티팩트는 데이터의 일반 텍스트보기에서 풍부한 대화식 시각화에 이르기까지 다양합니다.

파이프라인 인터페이스

파이프라인은 총 3가지의 인터페이스를 제공합니다. 각 인터페이스를 통해 ML 워크플로우를 생성, 실행 가능합니다.

  • Web UI 에서 실행할 수 있는 일은 아래와 같습니다.
    - 준비된 파이프라인 샘플 실행
    - 압축형태의 파이프라인을 업로드(URL 형태도 가능)
    - Experiment, Run, Recurring Run을 생성
    - 런의 결과, 그래프, 설정 등의 탐색
    - Experiment내의 런끼리의 비교
    - Google AI Hub에서 파이프라인 가져오기(GCP)

  • Python SDK
    - 쿠버플로우 파이프라인은 파이프라인을 생성할 수 있는 파이썬 SDK를 제공합니다.

    • SDK를 통해 파이프라인 생성 및 실행까지 할 수 있습니다.
    • 파이프라인이 설치되어 있는 쿠버네티스 클러스터에 접속할 수 있는 로컬 호스트의 PyCharm(IDE)이나 쥬피터 노트북 등에서 사용할 수 있습니다.
  • REST API
    - 쿠버플로 파이프라인 REST API는 외부 시스템에서 유용하게 활용할 수 있습니다.

    • 예를 들어 CI/CD 과정 중에 어떤 조건이 만족된다면 파이프라인 실행을 요청할 수도 있습니다.

파이프라인 단독설치

파이프라인은 쿠버플로가 설치될 때 같이 설치되지만 단독 설치도 가능합니다.
단, 아직 공식 홈페이지에서는 GCP 기반 가이드만 제공하며 버전이 높아지면 다른 플랫폼에 대한 가이드도 제공될 예정입니다. (GCP, GKE 사용자라면 가이드라인을 따라 단독설치가 가능합니다.)

파이프라인 SDK 설치

참고
파이프라인 SDK는 파이썬 패키지로 구성되어 잇습니다. 파이썬 3.5버전 이상의 환경에서 설치가 가능합니다. pip 명령어로 설치합니다.
저는 Python 3.7.11 버전에서 진행해보겠습니다.
pip3 install kfp --upgrade

명령을 실행하면 파이프라인 라이브러리들과 실행파일인 dsl-complie과 kfp가 /usr/local/bin과 같은 실행 가능한 결로로 복사됩니다.

아래 코드를 통해 설치가 완료되었는지 확인해보세요.
which kfp, which dsl-compile

파이프라인 SDK 패키지 둘러보기

파이프라인 SDK 패키지는 크게 5개의 영역으로 나뉘어 있습니다.
물론 버전에 따라 메소드나 클래스들의 변화는 있을 수 있습니다.

  1. kfp.compiler: 파이프라인 컴포넌트를 빌드하는 클래스와 메소드들의 패키지

    • .Compiler.compile: 파이썬 DSL 코드를 파이프라인 YAML 파일로 변환
  2. kfp.components: 파이프라인 컴포넌트들을 다루는 클래스와 메소드들의 패키지

    • .func_to_container_op: 파이썬 함수를 파이프라인 컴포넌트로 변환
profile
MLOps, MLE 직무로 일하고 있습니다😍
post-custom-banner

0개의 댓글