빅데이타 & 머신러닝/머신러닝

Kubeflow pipeline 과 TFX 메모

Terry Cho 2020. 11. 17. 00:27

Kubeflow pipeline 과 TFX 메모


TFX

TFX는 Tensorflow Extended 로, 머신러닝 파이프라인을 구현하는데 필요한 여러가지 컴포넌트들을 지원한다.

  • TFDV : 모델 Validation으로, EDA뿐만 아니라 데이터의 특성을 파악하여 저장한후에, 향후에 데이터가 들어 왔을때 Validation이 가능하다
  • TFT : 데이터 Transformation 작업을 한다
  • TFMA : 학습된 모델에 대한 평가 작업을 한다
  • TF-Serving : Prediction RunTime 엔진을 제공한다.
파이프라인 엔진
이렇게 각각의 컴포넌트가 있을때, 이 컴포넌트를 묶어서 오케스트레이션을 해야하는데, 이를 위해서 제공되는 것이 TFX pipeline이다. 실제 런타임 엔진이 있는 것이 아니라 SDK형태를 제공하고, 실제 런타임은 Kubeflow pipeline이나, Airflow를 사용한다.

TFX Standard component
이 파이프라인에서 각 TFX 컴포넌트를 손쉽게 부르려면, TFX 파이썬 라이브러리를 직접호출할 수 없으니, TFX 파이프라인에 맞도록 컴포넌트 형태로 구현을 해서 사용해야 하는데, TFX 컴포넌트들은 standard component 라는 형태로 미리 구현이 되어 있어서 불러만 쓰면 된다. 

Metadata
또한 파이프라인 각 단계별로 아웃풋 결과를 다음 태스크의 인풋으로 전달하기 위해서는 중간 저장소가 필요하고, 파이프라인의 진행 상태등을 저장할 메타 저장소가 필요한데, 이를 지원해주는 것이 metadata 스토어이다

문제점
이렇게 보면, 이미 만들어져 있는 컴포넌트들을 조합해서 파이프라인을 만들고 자동으로 메타데이타 까지 저장해주기 때문에 좋을거 같은데, 여기서 문제가 발생한다.
텐서플로우 세계에서만 좋다는것.
즉 이 프레임웍은 텐서플로우에만 최적화가 되어 있다. PyTorch, XGBoost와 같은 다른 프레임웍을 쓰거나 AWS,GCP,Azure 등의 매니지드 서비스를 호출할 수 없다. 물론 TFX Pipeline에서 Custom component 를 만들어서 호출하면 되지만, 말 그대로 만들어야 된다.

해결책
그래서 해결책으로 고려할 수 있는 것이 tfx pipeline을 사용하지 않고,kubeflow pipeline을 네이티브로 사용하는 방법이다. 이 방법을 사용하면 다른 프레임웍이나 AWS, GCP 서비스를 쉽게 사용할 수 있다. 특히 prebuilt-in 컴포넌트 형태로 이런 서비스를 컴포넌트 화를 해놓았기 때문에 사용이 편리하다. https://github.com/kubeflow/pipelines/tree/master/components
그런데, 여기서 또 다른 문제가 발생한다, 이 컴포넌트들에는 TFX 컴포넌트들이 없다 이 좋은 기능을 또 사용을 못한다는 말인데, 역시 kubeflow pipeline도 커스텀 컴포넌트를 지원한다. 
tfx에 비해서 상대적으로 컴포넌트 개발이 쉽다. python function을 컴포넌트로 정의할 수 있기 때문에 쉽게 개발이 가능하고, 찾아보면 python function 컴포넌트 형태로 TFDV,TFMA등을 호출한 사례를 심심치 않게 찾아볼 수 있다. 

이 경우 고려해야 할 사항이 tfx 의 경우 SDK를  Apache Beam을 사용하기 때문에, 런타임을 Flink나 GCP Data Flow를 사용하면 스케일이 가능한데, 이 부분은 좀 연구를 해봐야 할 분야인듯..

Kubeflow pipeline으로 정리되던 파이프라인 기술이 TFX가 나오면서, 특히 TFX가 파이프라인을 구현하면서 복잡해지는 것 같은 과도기적인 느낌이 오는데, 이는 좀 더 지켜봐야하지 않을까 싶다.