🍰Airflow, Kubeflow

데이터 관리를 위한 데이터 오케스트레이션 도구와 ML 워크플로우를 효율적으로 하기 위한 대표적인 MLOps 도구를 소개하려고 합니다.

개요

MLOps 환경을 구축할 때 대표적으로 사용되는 데이터 오케스트레이션 도구인 Airflow와 ML 워크플로우 도구인 Kubeflow 의 특징을 소개하겠습니다.

Airflow란?

Airflow는 DAGs (Directed Acyclic Graphs)로 복잡한 워크플로우를 정의하고 프로그래밍 방식으로 작성, 예약 및 모니터링할 수 있는 Airbnb에서 만든 workflow management 툴 입니다.

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

특징 및 동작원리

Airflow는 워크플로우 오케스트레이션을 관리하기 위해 DAG(Directed Acyclic Graph)를 이용합니다. 작업들(tasks)과 의존성(dependencies)들은 Python으로 정의되어 있고 Airflow가 스케줄링과 실행을 맡아서 관리합니다.

DAG가 미리 정해진 스케줄 마다 혹은 특정 트리거(파일 업로드, 등)에 반응하여 동작하게 설계할 수 있습니다. (실제로 회사에서는 특정 트리거에 반응해야 할 일이 굉장히 많습니다. 😂)

기존의 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 유저들과 자신의 개발 경험을 공유할 수 있습니다.

https://airflow.apache.org/docs/apache-airflow/stable/concepts.html
  • Scheduler : 모든 DAG와 Task에 대하여 모니터링 및 관리하고, 실행해야할 Task를 스케줄링 해줍니다.

  • Web server : Airflow의 웹 UI 서버 입니다.

  • DAG : Directed Acyclic Graph로 개발자가 Python으로 작성한 워크플로우 입니다. Task들의 dependency를 정의합니다.

  • Database : Airflow에 존재하는 DAG와 Task들의 메타데이터를 저장하는 데이터베이스입니다.

  • Worker : 실제 Task를 실행하는 주체입니다. Executor 종류에 따라 동작 방식이 다양합니다.

AAirflow는 개발자가 작성한 Python DAG를 읽고, 거기에 맞춰 Scheduler가 Task를 스케줄링하면, Worker가 Task를 가져가 실행합니다. Task의 실행 상태는 Database에 저장되고, 사용자는 UI를 통해서 각 Task의 실행 상태, 성공 여부 등을 확인할 수 있습니다.

Kubeflow란?

  • Kubeflow는 Kubernetes 용 머신 러닝 툴킷입니다

  • Kubeflow는 on-premise, GCP, AWS, Azure등 쿠버네티스가 돌아가는 곳이라면 어디든 작동할 수 있게끔 설계되어 있습니다.

  • ML 프로젝트를 다양한 인프라로 쉽게, 직관적으로 배포하는 방법을 제시합니다.

특징 및 동작원리

Kubeflow는 새로운 툴들을 만들기보단 kubernetes 오픈소스 생태계에 있는 툴을 가져와 쓸수 있게 만들었습니다.

Cloud나 On-Premise 환경에 상관 없이 동일한 환경에서 개발할 수 있기 때문에 특정 벤더나 플랫폼에 종속되지 않습니다. 예를들어 모델 학습은 On-premise에서 학습하고, 학습된 모델은 cloud에 올려 서비스하는 일도 가능합니다.

Cloud only

On-premise와 cloud를 혼용해서 사용

  • 다양한 인프라에 쉽고 반복 가능한 배포 (예 : local pc에서 실험한 다음 클라우드에 배포)

  • 요구에 따라 가능한 스케일링(auto scailing)

  • 전체 ML 개발 과정 통합 관리, On-premise/cloud 제한 없이 배포 지원

  • ML 워크플로우를 제공하며, 여기서 ML 워크플로우라는 오픈소스는 ML project의 라이프사이클을 관리하는 오픈소스이며, kubeflow는 kubernetes 환경에서 ML 워크플로우를 관리, 배포, 확장하게 도와주는 ML 플랫폼

  • kubernetes 생태계에 있는 오픈소스를 가져와 사용 가능(Argo, Prometheus, 등)

  • kubeflow는 웹으로 접속하는 GUI를 제공해 편리한 UI/UX를 제공함

정리

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

공통점

  • ML pipeline 오케스트레이션을 위해 사용될 수 있다. 하지만 접근 방식이 다름!

  • 오픈소스 툴이기 때문에 커뮤니티가 활성화되어있다. (Airflow > Kubeflow)

  • 깔끔한 UI를 제공한다.

  • 워크플로우 혹은 작업을 Python으로 작성한다.

차이점

Airflow
Kubeflow

형태

DAG 기반 워크플로우

Pipeline 기반 워크플로우

목적

task(pipeline) orchestration

ML 학습, 실험 추적 등 ML 작업

특징

데이터 파이프라인, ML 모델링, 인프라 관리 등 다양한 작업

ML 작업에 특화

환경

다양한 환경에서 작업할 수 있음

쿠버네티스 환경에서만 작업할 수 있음

* Pipeline과 DAG

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

Last updated