MLflow 기초개념 및 사용실습

2019-05-08

Data_Engineering_TIL_(20190508)

study program : https://www.fastcampus.co.kr/extension_des

[학습목표]

  • 머신러닝 플랫폼 이해

  • MLflow 이해

[학습기록]

1. 머신러닝 플랫폼 개요

  • 머신러닝이 대중화 되었지만 생각보다 복잡하고 할일이 많다는 인식이 증대되었다. 예를 들어 모델성능도 계속 모니터링 해야하고, 새로운 데이터가 들어오면 또 주기적으로 재학습해야하고 이렇게 하다보면 지난주에 만든모델, 이번주에 만든모델, cost function 바꿔본 모델 이런식으로 하나의 프로젝트에 여러가지 버전의 모델이 나올 것이다.

  • 데이터 정리 -> 머신러닝 모델 개발 -> 성능 평가 -> 배포 및 서빙 이후로도 모델 성능 모니터링 -> 재학습 패턴이 반복되어 여러버전의 모델이 생성

따라서 이 여러모델에 대한 관리의 어려움이 증대됨. 실제로는 상당히 복잡해진다.

  • 이런 과정을 효과적으로 컨트롤할 도구가 필요해졌고 그것을 도와주는 툴이 머신러닝 플랫폼이다.

  • 2019년 상반기 현재 아직까지 뚜렷하게 두각이 보이는 플랫폼이 있지 않다. 아직까지 현재 개발중이다.

2. 대표적인 머신러닝 플랫폼

아직 개발 초기단계로 대중적으로 널리쓰이기에는 성숙한 기술은 아니다.

1) MLflow

  • Databricks에서 개발중

  • 모델관리, 서빙, 배포가 주요기능

  • 여러가지 모델 관리하는 기능이 다양함

  • 관련 URL : https://mlflow.org/docs/latest/quickstart.html

2) Kubeflow

  • 구글에서 개발중

  • Kubernetes를 이용한 배포에 특화됨. 머신러닝 모델을 배포할때 쿠버네티스 도커로 이미지를 만들어서 쿠버네티스에 올리고 이게 설정된채로 배포를 하면 바로 서빙을 할 수 있다. 서비스 사용자의 요청이 많으면 스케일업할때 유용하게 쓸 수 있다.

  • 모델하나가 있으면 어떻게 쉽게 배포하고 어떻게 Scalability하게 서빙할 수 있을지 고민한 플랫폼

  • Kubeflow 는 단일 모델의 배포 / Scalability에 집중하고 있는 플랫폼

  • 관련 URL : https://github.com/kubeflow/examples/tree/master/mnist

3. MLflow 주요개념

1) MLflow Tracking

  • 머신러닝 코드의 여러가지를 기록하고 UI로 살펴볼 수 있게 하는 기능

  • 파라메터, 코드 버전, 지표들, 결과 파일들 등

2) MLflow Projects

  • 머신러닝 학습 코드를 패키징하여 재사용, 재현 가능하게 만든 포맷

  • 프로젝트를 실행하기 위한 API, CLI 도구 제공

  • mlflow run 명령어로 실행가능

3) MLflow Models

  • 학습된 모델을 여러 환경에서 실행될 수 있도록 패키징한 포맷

4. MLflow 사용실습

1) 실습 프리뷰

설치 및 실행 -> 예제 데이터를 이용한 프로젝트 생성 -> MLflow Tracking UI 실행 -> 서빙 -> 서빙 동작확인

2) 실습 상세네용

step 1) mlflow 설치

터미널에서 pip install mlflow 명령어 실행

터미널에서 mlflow가 설치되면 적당한 위치에 git clone https://github.com/mlflow/mlflow.git 명령어 실행

step 3) 예제 데이터로 새로운 프로젝트 생성을 위해서 sklearn_elasticnet_wine 폴더로 이동

mlflow/examples/sklearn_elasticnet_wine 폴더로 이동

step 4) sklearn_elasticnet_wine 데이터로 두가지 버전의 모델 생성

mlflow run . -P alpha=0.5 명령어 실행

(트레인 데이터를 이용해서 모델을 트레인하는 명령어)

그 다음에 mlflow run . -P alpha=0.001 명령어 실행

결론적으로 파라미터가 다른 두개의 모델을 만듬

mlflow run 을 통해서 모델을 생성하면 아래 디렉토리처럼 모델이 생성된다.

3

step 5) MLflow Tracking UI 실행

MLflow Tracking UI는 학습한 모델들을 비교할 수 있는 기능을 제공한다.

mlflow ui 명령어 실행

그리고 웹브라우져 띄우고 127.0.0.1:5000 으로 접속하면 아래와 같이 학습된 모델들을 비교할 수 있다.

아래 그림처럼 생성한 모델을 검색하고, 필터링하고, 결과를 csv로 받아볼 수도 있고 편리하게 볼 수 있다.

1

step 6) 원하는 임의의 모델을 serving하기

다시말해서 생성한 모델을 사용자가 prediction을 할 수 있도록 서버를 띄워주는 것이다.

터미널을 하나 새로 띄워서 sklearn_elasticnet_wine 폴더로 이동한 다음에 mlflow pyfunc serve -r (UI에서 원하는 RUN ID 추출) -m model -p 5001 명령어 실행

UI에서 원하는 RUN ID 추출법은 아래 그림에서 빨간색 박스 부분을 복붙하면 된다.

터미널에서 아래의 그림과 같이 입력해주면 된다.

2

step 7) 동작 확인

터미널을 하나 새로 띄워서 sklearn_elasticnet_wine 폴더로 이동한 다음에

curl -d ‘{“columns”:[“fixed acidity”,”volatile acidity”,”citric acid”,”residual sugar”,”chlorides”,”free sulfur dioxide”,”total sulfur dioxide”,”density”,”pH”,”sulphates”,”alcohol”], “data”:[[7,0.27,0.36,20.7,0.045,45,170,1.001,3,0.45,8.8]]}’ -H ‘Content-Type:application/json; format=pandas-split’ -X POST localhost:5001/invocations

명령어 실행하면 아래와 같이 예측값을 출력해준다.

REST API에 제이슨형태의 데이터를 날려서 결과를 리턴받는 형태다.

curl 이라는 도구는 HTTP 서버에다 요청을 만들어서 날릴 수 있는 커맨드라인 도구이다. 그래서 curl로 POST 명령어(무언가를 업로드 하는 명령어인데 통상 요청에 데이터를 같이 첨부할때 post를 쓴다.)로 아까 서버띄운 로컬호스트 5001번에다가 invocations라는 기본이름으로 만들어준다.

그래서 포스트명령어를 날려주면 서버가 데이터에 맞게 결과를 리턴해준다. 그래서 생성한 모델이 요구하는 피쳐의 데이터를 첨부해서 날려주는 명령어이다.

4