쿠버플로우 파이프라인은 컨테이너 기반의 엔드 투 엔드 ML 워크플로우를 만들고 배포할 수 있는 k8s 플랫폼입니다.
컨테이너 기반으로 구성되어 있기 때문에 확장성 및 재사용성이 좋습니다.
k8s의 자원을 관리하기 위해 백엔드 프레임워크로 argo 라는 워크플로우 툴을 사용합니다.
쿠버플로우 파이프라인은 아래와 같이 구성되어 있습니다.
그리고 쿠버플로 파이프라인이 지향하느 바는 다음과 같습니다.
파이프라인은 워크플로의 컴포넌트들과 그것을 그래프 형태로 결합하는 것을 포함한 ML 워크플로우의 한 형식이라고 설명할 수 있습니다.
또한 파이프라인을 실행하기 위한 입,출력에 대한 정의도 포함됩니다.
사용자는 파이프라인을 개발한 후 쿠버플로우 파이프라인을 통해 업로드/공유를 할 수 있습니다.
사용자가 작성한 파이프라인 컴포넌트는 도커이미지로 패키징되며, 그래프의 결합 형태에 따라 순서대로 실행됩니다.
파이프라인이 실행되면 시스템은 각 단계에 맞는 쿠버네티스 파드를 실행시킵니다.
그리고 그 파드는 설정된 컨테이너를 실행 시키고, 컨테이너 안에 있는 애플리케이션을 실행시킵니다.(파드는 컨테이너를 담습니다.)
스케쥴러에 따라서 순서대로 컨테이너들이 실행됩니다.
파이프라인 실행은 다음과 같이 진행됩니다.
파이프라인을 실행하기 위한 컨테이너를 실행
합니다. 이 컨테이너는 k8s 파드에서 실행됩니다.컴포넌트는 ML 워크플로우의 한 단계를 수행하는 코드 집합입니다.
인풋, 아웃풋, 이름, 상세구현 등 함수와 유사합니다.
파이프라인 DSL로 작성된 파이썬 코드가 YAML 파일로 컴파일되는데
쿠버플로우 파이프라인의 컨테이너 컴포넌트 데이터 모델 형식으로 변환됩니다.
Metadata, Interface, Implentation 이라는 필드들로 구성되며,
여기에는 파이프라인의 이름, 인풋/아웃풋 타입 등이 기재됩니다.
자세한 내용은 쿠버플로우 레퍼런스를 참고합니다.
그래프는 파이프라인 UI에서 파이프라인의 런타임 실행을 나타내는 그림입니다.
파이프라인을 실행했거나 실행중이면 단계가 색깔로 구분되어 표시됩니다.(실행 대기중인 그래프는 보이지 않습니다.)
파이프라인을 잇는 화살표는 파이프라인의 상-하위 관게를 나타냅니다.
그래프 내의 각 노드는 파이프라인 내의 단계에 해당하며 그에 따른 레이블이 지정됩니다.
Run은 파이프라인의 단일 실행 단위입니다.
즉, 런은 파이프라인 명세를 실행합니다.
객체와 인스턴스 관계라고 보시면 됩니다.
파이프라인 UI를 통해서 상세 정보를 확인할 수 있습니다.
리커링 런(Recurring run)은 파이프라인을 주기적으로 실행하는 런입니다.
Cron 형태도 가능하며 특정 기간을 정의할 수도 있습니다.
배치성 작업이나 모니터링 작업에 적합합니다.
이 반복적인 작업은 런 트리거(Run Trigger)가 담당합니다.
런 트리커는 런을 새롭게 생성해야 하는지 말아야 하는지를 시스템에게 알래주는 플래그(Flag)입니다.
두가지 타입의 런 트리거가 제공됩니다.
1. Periodic: 간격 기간의 스케쥴링을 제공합니다. 매 30분마다 실행같은 식입니다.
2. Cron: Cron 형태의 스케쥴링을 제공합니다.
스텝은 파이프라인에서 하나의 컴포넌트의 실행을 뜻합니다.
복잡한 파이프라인에서 컴포넌트들은 중첩되어 실행되기도 하며,
if/else 분기에 따라서 선택적으로 실행되기도 합니다.
파이프라인을 실행하는 워크스페이스입니다.
파이프라인 실행의 논리적 그룹으로 보아도 상관은 없습니다.
파이프라인 설치시 default라는 experiment가 생성됩니다.
특별한 experiment를 정하지 않는 한, run은 default에서 실행됩니다.
아티팩트는 파이프라인 컴포넌트의 출력입니다.
아티팩트를 통해서 파이프파린의 다양한 구성 요소가 어떻게 작동하는지 이해할 수 있습니다.
아티팩트는 데이터의 일반 텍스트보기에서 풍부한 대화식 시각화에 이르기까지 다양합니다.
파이프라인은 총 3가지의 인터페이스를 제공합니다. 각 인터페이스를 통해 ML 워크플로우를 생성, 실행 가능합니다.
Web UI 에서 실행할 수 있는 일은 아래와 같습니다.
- 준비된 파이프라인 샘플 실행
- 압축형태의 파이프라인을 업로드(URL 형태도 가능)
- Experiment, Run, Recurring Run을 생성
- 런의 결과, 그래프, 설정 등의 탐색
- Experiment내의 런끼리의 비교
- Google AI Hub에서 파이프라인 가져오기(GCP)
Python SDK
- 쿠버플로우 파이프라인은 파이프라인을 생성할 수 있는 파이썬 SDK를 제공합니다.
REST API
- 쿠버플로 파이프라인 REST API는 외부 시스템에서 유용하게 활용할 수 있습니다.
파이프라인은 쿠버플로가 설치될 때 같이 설치되지만 단독 설치도 가능합니다.
단, 아직 공식 홈페이지에서는 GCP 기반 가이드만 제공하며 버전이 높아지면 다른 플랫폼에 대한 가이드도 제공될 예정입니다. (GCP, GKE 사용자라면 가이드라인을 따라 단독설치가 가능합니다.)
참고
파이프라인 SDK는 파이썬 패키지로 구성되어 잇습니다. 파이썬 3.5버전 이상의 환경에서 설치가 가능합니다. pip 명령어로 설치합니다.
저는 Python 3.7.11 버전에서 진행해보겠습니다.
pip3 install kfp --upgrade
명령을 실행하면 파이프라인 라이브러리들과 실행파일인 dsl-complie과 kfp가 /usr/local/bin과 같은 실행 가능한 결로로 복사됩니다.
아래 코드를 통해 설치가 완료되었는지 확인해보세요.
which kfp
, which dsl-compile
파이프라인 SDK 패키지는 크게 5개의 영역으로 나뉘어 있습니다.
물론 버전에 따라 메소드나 클래스들의 변화는 있을 수 있습니다.
kfp.compiler: 파이프라인 컴포넌트를 빌드하는 클래스와 메소드들의 패키지
kfp.components: 파이프라인 컴포넌트들을 다루는 클래스와 메소드들의 패키지