Airflow vs. Kubeflow

d4v1d·2022년 3월 8일
4

ML: Machine Learning

목록 보기
4/5
post-thumbnail

이미지 출처

개요

데이터 워크플로우를 파이프라인으로 관리하여 작업을 오케스트레이션하는(task orchestration) 대표적인 두 가지 툴 AirflowKubeflow의 특징을 비교한 포스트입니다. 🌊

Data Workflow Management Tool

Data Workflow Management Tool , Airflow 란?
데이터를 전처리, 학습, 예측, 배포하거나 ETL을 하다보면 작업들이 일련의 워크플로우로 연결되어 수행되어야 하는 경우가 많습니다. 이 워크플로우를 파이프라이닝하여 쉽게 관리 및 배포할 수 있도록 도와주는 대표적인 툴이 바로 AirflowKubeflow죠. 이번 포스팅에서는 이 둘의 특징을 소개하고 공통점과 차이점을 알아보려고 합니다!

Airflow


Scalable, Dynamic, Extensible and Elegant
Wikipedia

소개
Apache Airflow는 데이터 엔지니어링 파이프라인을 위한 오픈소스 워크플로우 매니지먼트 플랫폼입니다. Airbnb가 2014년에 시작한 프로젝트로, 시간이 지날 수록 복잡해지는 워크플로우를 관리하기 위해 만들었습니다. 덕분에 Airbnb는 Airflow 내장 UI를 통해 자기들의 워크플로우를 프로그램으로 작성하고 스케줄할 수 있게 되었습니다.

Airflow는 Python으로 작성되었고, 워크플로우 또한 Python으로 작성됩니다! 다른 워크플로우 플랫폼들처럼 XML같은 markup language를 사용하는 대신 Python을 채택함으로써 개발자들은 여러 라이브러리와 클래스를 import하여 그들만의 워크플로우를 만들기가 한층 수월합니다.

특징
Airflow는 워크플로우 오케스트레이션을 관리하기 위해 DAG(Directed Acyclic Graph)를 이용합니다. 작업들(tasks)과 의존성(dependencies)들은 Python으로 정의되어 있고 Airflow가 스케줄링과 실행을 맡아서 관리합니다. DAG가 미리 정의된 스케줄(ex. 매 시간, 매일 등)마다 동작하거나 혹은 특정 외부 이벤트 트리거(ex. Hive에 파일이 생성됨)가 있을 때 동작하도록 설계할 수 있습니다. 기존의 DAG 기반 스케줄러들은 DAG를 생성하기 위해 여러개의 config 파일과 파일 시스템 트리를 만들어야 했지만, Airflow는 단 하나의 Python 파일로 DAG를 생성할 수 있습니다!

  • Pure Python command-line이나 XML을 사용할 필요 없이, Python을 이용하여 워크플로우를 만들고, 스케줄을 관리하고, 동적으로 생성되는 작업들을 반복할 수 있습니다.
  • Useful UI 깔끔한 웹 애플리케이션 UI로 워크플로우를 관리할 수 있습니다.
  • Robust Integrations GCP(Google Cloud Platform), AWS(Amazon Web Services), Azure 등의 환경에서 워크플로우를 실행할 수 있도록 통합된 환경이 갖춰져있습니다.
  • Easy to Use Python만 알면 누구나 워크플로우를 배포할 수 있고, 단순 파이프라이닝뿐 아니라 ML 모델링, 데이터 전송, 인프라 관리 등 다양한 작업을 할 수 있습니다.
  • Open Source 다른 Airflow 유저들과 자신의 개발 경험을 공유할 수 있습니다.

Airflow 컴포넌트

  • Scheduler 작업, DAG들을 모니터링하고, 실행할 작업들을 executor에게 요청합니다.
  • Executors scheduler로부터 요청받은 모든 작업들을 수행합니다.
  • Webserver UI가 제공되어 작업이나 DAG 상태를 확인하고 DB와 상호작용할 수 있으며, 원격 파일 저장소의 로그를 읽을 수 있습니다.
  • Metadata DB executor, webserver, scheduler의 상태를 저장하기 위해 사용되는 DB입니다.

Kubeflow


Simple, Portable, Scalable "on Kubernetes"
Wikipedia

소개
Kubeflow는 쿠버네티스 클러스터에서 머신러닝 워크플로우가 더욱 쉽고 조화롭게 작동할 수 있도록 디자인된, Google에서 시작된 오픈소스 프로젝트입니다. Kubeflow는 on-premise, GCP, AWS, Azure등 쿠버네티스가 돌아가는 곳이라면 어디든 작동할 수 있게끔 설계되어 있습니다. 쿠버네티스를 이용한 ML(Machine Learning) 워크플로우 배포를 쉽고, 편리하고, 확장하기 쉽게 만들어주기 위해 개발된 프로젝트입니다. 또한 ML 프로젝트를 다양한 인프라로 쉽게, 직관적으로 배포하는 방법을 제시합니다.

특징

  • 대화형 Jupyter Notebook을 생성하고 관리할 수 있습니다.
  • TensorFlow를 이용한 모델 학습을 커스터마이즈할 수 있습니다.
  • TensorFlow를 활용한 model serving을 지원하여 모델을 배포할 수 있습니다.
  • Pipeline end-to-end ML 워크플로우를 pipeline으로 관리하여 빠르고 안정적으로 실험할 수 있고, 각 단계 별 스케줄링하고 비교할 수 있습니다.
  • Community Kubeflow 개발자들을 위한 커뮤니티가 활성화되어 있습니다.

Kubeflow 컴포넌트

  • Kubeflow Pipelines 도커 컨테이너 기반의 ML 워크플로우를 쉽고 간편하고 확장하기 쉽게 빌드/배포할 수 있습니다. Pipeline에는 UI, 스케줄 엔진, pipeline을 정의하는 SDK, SDK를 통해 상호작용하는 notebook이 들어있습니다.
  • KFServing 별도의 서버 없이 쿠버네티스에서 예측할 수 있습니다(serverless inferencing).
  • Multi-tenancy 각 사용자가 Kubeflow 구성 요소와 모델 아티팩트만 보고 편집할 수 있도록 작업을 단순화하고, 여러 사용자들의 작업을 서로 분리합니다(인증, 권한 부여, 관리자 등).
  • Training Operators를 통해 ML 모델을 학습할 수 있습니다. (ex. TFJob for TensorFlow, PyTorchJob for PyTorch, ...)
  • Notebooks 하나의 Kubeflow 배포는 여러 개의 (Jupyter) notebook 서버들을 포함할 수 있고, 각 notebook 서버는 여러 개의 notebook들을 포함할 수 있습니다.

Airflow vs. Kubeflow

참고 자료 1 - Airflow vs. Luigi vs. Argo vs. MLFlow vs. KubeFlow
참고 자료 2 - A Comprehensive Comparison Between Kubeflow and Airflow

Pipeline과 DAG의 차이

Pipeline은 각각의 작업(task)이 up/downstream을 최대 하나씩밖에 가지지 못하는, 제한된 형태의 DAG라고 보면 됩니다. Pipeline에서는 모든 작업들이 일렬로 연결되어 있지만, DAG에서는 각 task들이 저마다 다른 dependency를 가지고 있다는 차이점이 있습니다.


보다시피 Airflow와 Kubeflow는 서로 다른 목적을 위해 만들어진 툴이기 때문에, 서로가 대안이 될 수는 없습니다.

공통점

  • ML pipeline 오케스트레이션을 위해 사용될 수 있다. 하지만 접근 방식이 다름!
  • 오픈소스 툴이기 때문에 커뮤니티가 활성화되어있다. (Airflow > Kubeflow)
  • 깔끔한 UI를 제공한다.
  • 워크플로우 혹은 작업을 Python으로 작성한다.

차이점

AirflowKubeflow
형태DAG 기반 워크플로우Pipeline 기반 워크플로우
목적task(pipeline) orchestrationML 학습, 실험 추적 등 ML 작업
특징데이터 파이프라인, ML 모델링, 인프라 관리 등 다양한 작업ML 작업에 특화
환경다양한 환경에서 작업할 수 있음쿠버네티스 환경에서만 작업할 수 있음

정리

Airflow는 범용적인 목적을 가진 task orchestration 툴이고, Kubeflow는 일련의 머신러닝 작업들을 쉽게 자동화해주는 쿠버네티스 전용 툴입니다. 배포 환경이 쿠버네티스를 이용하는지, 그리고 프로젝트 전반에 걸진 워크플로우가 머신러닝 중심인지를 판단하여 적절한 툴을 고르면 됩니다. 🐱

profile
데이터 엔지니어/백엔드 개발자 d4v1d의 개발 일지🐯

2개의 댓글

comment-user-thumbnail
2023년 4월 7일

좋은 내용 감사합니다. 그런데 kubeflow의 파이프라인도 dag형태로 표현 가능하다고 알고 있습니다.
https://www.kubeflow.org/docs/components/pipelines/v1/concepts/graph/

답글 달기
comment-user-thumbnail
2023년 11월 27일

좋은 글 감사합니다. 윗분께서 댓글 이미 다시긴 하셨지만 저도 KFP를 써서 회사에서 파이프라인 작업하고 있는데 선형적으로 모양이 나왔던 적은 거의 없었던 거 같네요ㅋㅋ 뭐하긴 저렇게 직선처럼 생긴 것도 DAG이긴 하니...

답글 달기