?상명대학교 / 서광규 교수
Kubeflow는 머신 러닝을 위한 클라우드 네이티브(Cloud Native) 플랫폼이다. 구글 내부에서 사용하던 머신 러닝 파이이프 라인을 기반으로 해서 만들어졌다. Kubeflow는 쿠버네티스(Kubernetes) 위에서 작동하므로 자원 관리, 확장 등의 쿠버네티스의 장점을 그대로 이용할 수 있다. Kubeflow 프로젝트는 쿠버네티스에서 머신러닝 워크프로우를 간단하고 이식 가능하며 확장 가능하게 구축하는 데 전념하고 있다. 쿠버플로 목표는 다른 서비스를 재창조하는 것이 아니라 ML을 위한 동급 최강의 오픈 소스 시스템을 다양한 인프라에 배포하는 간단한 방법을 제공하는 것이다. 즉, 쿠버네티스를 실행하는 모든 곳에서 Kubeflow를 실행할 수 있어야 한다.
Kubeflow는 TensorFlow Extended라는 파이프 라인을 기반으로 Google이 내부적으로 TensorFlow를 실행하는 방식의 오픈 소싱으로 시작되었다. 쿠베네티스에서 TensorFlow 작업을 실행하는 단순한 방법으로 시작되었지만 이후 전체 머신 러닝 파이프라인을 실행하기 위한 다중 아키텍처, 다중 클라우드 프레임 워크로 확장되었다. 이 글에서는 쿠버네티스 기반의 머신러닝 플랫폼인 Kubeflow에 대하여 기술하기로 한다.
머신러닝 플랫폼
일반적으로 머신러닝이라고 하면 모델 코드를 만드는 것에 많은 시간이 걸린다고 생각하기만 그림 1에서 보는 바와 같이, 머신러닝 시스템에서 모델 코드가 차지하는 비중은 작다는 것을 알 수 있다. 실제로 머신러닝 모델을 만들어서 서비스에 적용시키는 일은, 모델을 만드는 시간보다 데이터 수집과 분석 그리고 모델을 튜닝하는 등의 반복적인 작업에 많은 시간이 소요된다. 따라서 이러한 일련의 과정을 결합하여 파이프라인으로 구축하게 된다. 그럼에도 불구하고, 서비스가 많아지고, 파이프라인이 많아지면 시스템이 복잡해져서 유지보수가 힘들어지기 시작하는데, 이러한 이유로 머신러닝 플랫폼이 필요하게 된다.

[그림1. 머신러닝 플랫폼, 출처: https://papers.nips.cc/paper/5656-hidden-technical-debt-in-machine-learning-systems.pdf]
실제로 모델을 개발해서 시스템에 배포할 때 까지는 모델 개발 시간보다 데이터 분석에 소요되는 시간 그리고 개발된 모델을 반복적으로 학습하면서 튜닝하는 시간이 훨씬 더 길다. 머신러닝 파이프라인은 데이터 탐색에서 부터, 모델 개발, 테스트 그리고 모델을 통한 서비스와 같이 훨씬 더 복잡한 과정을 거친다. 이러한 머신러닝 파이프라인의 세부 내용을 그림 2 과정을 거치는데, 각 단계별 설명은 다음과 같다.

[그림2. 머신러닝 파이프라인, 출처: https://bcho.tistory.com/1301]
- Data ingestion : 머신러닝에 필요한 학습 데이터를 외부로부터 수집하여 저장하는 단계
- Data analytics : 수집된 데이터를 분석하여, 의미를 찾아내고, 필요한 특징을 찾아내는 단계
- Data Transformation: 수집된 데이터에서 학습에 필요한 데이터만 분류하고, 학습에 적절하도록 컨버팅 하는 단계
- Data Validation : 변환된 데이터가 문제는 없는지 데이터 포맷이나 범위 등을 검증하는 단계
- Data Splitting : 머신러닝 학습을 위해서 데이터를 학습용, 테스트용, 검증용으로 분류하는 단계
- Build a Model : 머신러닝 모델을 만들고 학습하는 단계
- Model Validation : 만들어진 모델을 검증하는 단계
- Training at scale : 더 많은 데이터를 더 큰 인프라에서 학습시켜서 정확도를 높이고, 하이퍼 패러미터 튜닝을 통해서 모델을 튜닝하는 단계
- Roll out : 학습된 모델을 운영환경에 배포하는 단계
- Serving : 배포된 모델을 통해서 머신러닝 모델을 서비스로 제공하는 단계
- Monitoring : 머신러닝 모델 서비스를 모니터링 해서 정확도등에 문제가 없는지 지속적으로 관찰하는 단계
- Logging : 모델에 서비스에 대한 로그 모니터링 단계
Kubeflow를 사용하는 이유
Kubeflow는 쿠버네티스에서 머신 러닝 워크 플로를 실행하기 위해서 만들어졌는데, 다음과 같은 이유로 사용할 수 있다.
- 이미 쿠버네티스 기반의 인프라가 있거나, 새로운 머신 러닝 플랫폼을 만들려는 경우
- 다양한 환경(예 : 로컬, 온 프레미스 및 클라우드)에서 머신 러닝 모델을 학습하거나 서비스하려는 경우
- 자원(예 : CPU 또는 GPU)를 할당하여 작업을 하려는 경우
- Jupyter 노트북을 사용하여 머신 러닝 작업을 하려는 경우
Kubeflow를 사용하면 데이터 과학자에게 인프라가 아닌 모델링에만 집중할 수 있는 환경을 제공해 줄 수 있다. 또한 컨테이너 기반의 독립된 환경에서 연구를 할 수 있기 때문에, TensorFlow, PyTorch, MXNet 등 다양한 프레임워크를 사용할 수 있으며 GPU같은 자원을 이용해서 모델을 분산하여 학습시킬 수도 있다. 그리고 Hyper parameter tuning 과정을 쉽게 자동화할 수 있는 기능도 제공하고 있고, 만든 모델을 실제 서비스에 배포할 수 있는 서빙 도구들도 제공하고 있다.
Kubeflow 컴포넌트 구성 요소
1) IDE 환경
IDE 개발환경으로는 JupyterLab을 지원한다. JupyterLab은 Jupyter 노트북의 확장 버전으로 코드 콘솔뿐 아니라 파일 브라우져나 시각화창 등 확장된 UI를 지원한다.
2) GPU 드라이버
쿠버네티스상에서 GPU를 사용할 수 있도록 GPU 드라이버를 미리 설치해 놓았다. 머신러닝 프레임웍을 사용하면 항상 까다로운 부분이 GPU 드라이버 설정이나 업그레이드인데, 이를 미리 해놓았기 때문에 머신러닝 엔지니어 입장에서 별도의 노력없이 손쉽게 GPU를 사용할 수 있다.
3) 머신러닝 프레임워크
머신러닝 프레임워크로는 TensorFlow, 파이토치, MxNet등을 지원하는데, 플러그인 컴포넌트 형태이기 때문에 앞으로 더 많은 프레임웍을 지원이 가능하게 될 것이다.
4) 데이터 프로세싱
데이터 프로세싱에서 데이타 변환 (Transformation)과 데이터 검증 (Validation)은 TensorFlow의 확장팩인 TFX에서 지원하는 TFDV (Tensorflow Data Validation)과 TFT (Tensorflow Transform)을 이용해서 지원한다.
5) 학습 환경
개발된 모델을 학습할 때 특히 분산학습의 경우에는 TensorFlow 클러스터와 우버에서 개발된 TensorFlow용 분산 학습 플랫폼인 Hornovod를 지원한다.
6) 모델 검증
학습된 모델 검증은 데이터 프로세싱과 마찬가지로 TensorFlow 확장팩인 TFX의 TFMA (Tensorflow Model Analysis)를 지원한다.
7) 하이퍼 패러미터 튜닝
학습된 모델에 대한 하이퍼 패레미터 튜닝은 katLib라는 컴포넌트를 이용해서 지원한다.
8) 모델 서빙
학습이 완료된 모델은 TFX 패키지의 일부인 Tensorflow Serving을 사용하거나 모델 서빙 전문 플랫폼인 SeldonIO를 사용한다. SeldonIO는 TensorFlow뿐만 아니라 Sklearn, Spark 모델, H2O 모델, R 모델 등 다양한 모델을 지원한다.
9) API 서비스
서비스된 모델에 대한 API 키 인증이나 라우팅 등을 위해서 API 게이트웨이가 필요한데, API 게이트웨이로 Ambassador라는 오픈 소스를 이용한다. 이를 통해서 API 키등의 인증을 지원하고, 쿠버네티스 위에 네트워크 플랫폼인 ISTIO를 사용하여, API 서비스에 대한 모니터링 및 서비스 라우팅을 지원하는데, 서비스 라우팅 기능은 새 모델을 배포했을 때 새 모델로 트래픽을 10%만 보내고 기존 모델로 트래픽을 90% 보내서 새 모델을 테스트하는 카날리 테스트나 API 통신에 대한 보안등 여러 기능을 지원한다.
10) 워크플로우
이러한 컴포넌트를 매번 메뉴얼로 실행할 수는 없고, 워크플로우 흐름에 따라서 자동으로 파이프라인을 관리할 수 있는 기능이 필요한데, 이를 워크플로우 엔진이라고 하고, Kubeflow에서는 argo라는 컨테이너 기반의 워크플로우 엔진을 사용한다.
결론
대부분의 중요한 클라우드 서비스 제공자는 모두 클라우드 기반의 인공지능 서비스를 제공하고 있다. 딜로이트 글로벌이 예측하기로 이런 서비스는 2020년에 빠르게 확장될 것이며, 인공지능 소프트웨어를 사용하는 회사 중 83%는 클라우드 기반 인공지능 플랫폼을 통해서 서비스를 제공할 것이라고 한다. 이를 통해 모든 규모의 기업이 인공지능 애플리케이션을 통한 혜택을 얻을 수 있는데 이에는 프로세스 자동화, 예측 분석, 재고 관리, 사기 검출, 고객 지원 등 많은 영역에서 응용 영역이 확대될 것이다. 또 다른 측면에서는 클라우드 서비스에 인공지능 기술을 적용하는 영역이 점차 늘어나고 있음을 확인할 수 있다.
Kubeflow 프로젝트는 쿠버네티스 상에 머신 러닝 워크플로우 배포를 간단하고, 이식가능하며, 확장가능하게 만드는 것이다. 다양한 클라우드 인프라에서 머신러닝을 위한 최고 수준의 오픈 소스 시스템을 채택하는데 가장 직접적인 방식이 되고, 쿠버네티스를 사용하는 곳이면 Kubeflow를 사용하는 목적으로 진행되고 있다.
Kubeflow는 개발중인 버전으로 kubeflow.org 홈페이지서 확인해보면 현재 1.0버전(https://v1-0-branch.kubeflow.org/)이 제공되고 있는데, kubeflow 홈페이지를 방문하여 버전별 개발 내용을 확인하고 사용하는 것이 좋겠다.
참 고 문 헌
- https://www.kubeflow.org/
- https://v1-0-branch.kubeflow.org/
- https://papers.nips.cc/paper/5656-hidden-technical-debt-in-machine-learning-systems.pdf
- Deloitte, “Artificial Intelligence: From expert-only to everywhere,” Dec 11, 2018
저작권정책
K-ICT 클라우드혁신센터의 저작물인 『쿠버네티스 기반의 머신러닝 플랫폼 Kuberflow』는 K-ICT 클라우드혁신센터에서 상명대학교 서광규 교수에게 집필 자문을 받아 발행한 전문정보 브리프로, K-ICT 클라우드혁신센터의 저작권정책에 따라 이용할 수 있습니다.
다만 사진, 이미지, 인용자료 등 제3자에게 저작권이 있는 경우 원저작권자가 정한 바에 따릅니다.
