prediction io란?

23
Prediction I/O 이도현

Upload: david-lee

Post on 09-Feb-2017

217 views

Category:

Engineering


9 download

TRANSCRIPT

Page 1: Prediction IO란?

Prediction�I/O이도현

Page 2: Prediction IO란?

1.�About�Prediction�I/O

실시간�빅데이터�분석�시스템

오픈-소스�기계학습(Machine�Learning)�서버

Prediction�I/O�에서�제공하는�것들

Processing�Framework�- Apache�Spark�

알고리즘�라이브러리�- MLlib,�Templates�

데이터�-�HBase,�ElasticSearch

Page 3: Prediction IO란?

2.�Prediction�I/O�아키텍처

HBase Elastic Search

Apache Spark

Prediction I/O

Page 4: Prediction IO란?

3.�빅데이터�시스템�구축의�추상화

HBase Elastic Search

Apache Spark

Prediction�I/O

User

Event Server (data storage)

Engine

Event Data

Predicted Result

Query

HTTP

Page 5: Prediction IO란?

4.�Event�Data

Event Server Engine

이벤트�데이터들이�저장되어�있는�공간 이벤트�데이터를�알고리즘을�통해�학습하는�엔진

엔진의�데이터�소스는�이벤트�서버로부터�얻는다

이벤트�데이터는�목표로�하는�예측�결과�데이터를�얻기위해�사용되는�데이터

이벤트�데이터는�사용자의�행동�혹은�배치�데이터로�부터�얻는다

Page 6: Prediction IO란?

5.�사용자와�엔진과의�관계

User EngineQuery

Predicted Result

학습된 예측 데이터가 저장되어있다 (RDD)

(via HTTP)

개발자는 엔진만 별도로 개발하고 이벤트 서버에 등록하면 된다

Page 7: Prediction IO란?

6.�DASE�아키텍처

컴퓨터가 데이터로부터 학습하는데 필요한 부분을 네개로 나눈 패턴 (Prediction I/O에서 정의한 패턴이다)

Data Source & Data Preparator데이터 소스는 배치 혹은 실시간 데이터를 필요한 포맷으로 변환한다데이터 전처리기는 데이터를 학습시키기 이전에 데이터를 전처리 한다

AlgorithmML 알고리즘을 구현한 부분,

파라미터를 설정하고 데이터를 학습한다

예측 결과 데이터형식을 정의한다

Serving예측 결과 데이터를 조합에서 사용자가 필요로 하는 데이터로 조합한다

Evaluation수의 점수(numerical store)를 통해 예측 데이터의 정확도를 측정한다

Page 8: Prediction IO란?

7.�DASE아키텍처와�엔진과의�관계

DASE의 각 부분은 Engine의 구성요소이다

Page 9: Prediction IO란?

8.�Installation�Prediction�I/O

$ bash -c "$(curl -s https://install.prediction.io/install.sh)"

In�Terminal

Page 10: Prediction IO란?

9.�Start�Prediction�I/O�Event�Server

$ pio eventserver

with�MySQL�or�PostgreSQL

$ pio-start-all

with�HBase�&�ElasticSearch

(주의)� � � �, � � �B � �

Page 11: Prediction IO란?

10.�Managing�App�

App이란?�

단순히�Prediction�I/O�시스템이�여러가지�앱�혹은�웹에서�사용�될�수�있으니�

예측�데이터등의�쓰임새를�구분하기�위해�사용하는�단위이다

Page 12: Prediction IO란?

10.�Managing�App�

$ pio app new re2

Create�a�new�app

생성된�앱의�ID와�Access�Key가�생성된다.�후에�Access�Key는�Engine으로�부터�예측결과�

데이터를�얻거나�이벤트�서버에�이벤트�데이터를�등록할�때�구분하는�키로�사용된다

$ pio app delete re2

Delete�a�app

$ pio app list

list�a�app

Page 13: Prediction IO란?

11.�템플릿

비교적�쉽게�머신러닝�시스템을�구축할�수�있도록,��

Prediction�IO�에서�미리�제작된�머신러닝�엔진을�사용할�수�있다

http://templates.prediction.io/

Page 14: Prediction IO란?

11.�템플릿

$ pio template get PredictionIO/<template-name> <target-directory>

템플릿�엔진�가져오기

Page 15: Prediction IO란?

12.�엔진의�구조

코드에서�볼�수�있듯이�엔진은�DASE의�각�부분으로�이루어진다.

engine-dir$ pio build

엔진�빌드하기

빌드가�완료한�후에,�pio�train�커맨드를�사용해서�데이터를�학습�할�수�있다

개발자는�각�부분을�수정하거나�새로�만들어서�엔진을�조립함으로서�시스템을�수정할�수�있다�

(관심사의�분리�:�Separation�of�Concerns)

Page 16: Prediction IO란?

13.�Engine�Training�&�Deploy

engine-dir$ pio train

Training

엔진이�학습된�데이터�모델을�산출한다.

engine-dir$ pio deploy

Deploy

결과�데이터�모델을�가진�엔진�인스턴스를�이벤트�서버에�배포한다�

pio�train�명령어만으로는�실제�서버에�결과를�반영하지�않는다

Page 17: Prediction IO란?

14.�주기적으로�학습하기

0 0 * * * $PIO_HOME/bin/pio train; $PIO_HOME/bin/pio deploy

주기적으로�학습하기

Crontab에�위와�같이�등록하여�매일�자정에�이벤트�서버에�배포된�엔진을�

다시�학습시키고�예측�결과�데이터를�재배포�시킬�수�있다.

Prediction�I/O를�설치할�때,�이메일을�등록된�것을�기억할�것이다,�엔진이�트레이닝에�실패하면�

로그로�남을�뿐만�아니라,�등록된�이메일주소로�이메일을�보내준다.

Page 18: Prediction IO란?

15.�Data�Source

readTraining�메서드는�위에서�살펴봤던�pio�train�커맨드에�의해�실행되는�메서드이다.�

DASE의�각�부분은�오버라이딩�할�수있는�메서드들이�존재하는데�pio�명령어들에�의해�실행�중요한�부분이다

PEventStore는�이벤트�서버에�저장된(정확히는�HBase)�이벤트�데이터들의�저장소를�추상화시킨�것이다.�

이�object(스칼라의�인스턴스�정의방식)를�통해서�RDD를�만들�수�있다

Page 19: Prediction IO란?

16.�Preparator

엔진에서�데이터�학습의�순서를�보면�DataSource�->�Preparator�->�Algorithm�->�Serving�로�실행된다.�

딱히�전처리를�하지�않기때문에�DataSource에서�얻은�TrainingData를�PreparedData로�바꿔서�그대로�리턴한다.

Page 20: Prediction IO란?

17.�Algorithm

train으로�데이터�모델을�먼저�만들고�predict메서드로�예측데이터를�만드는�간단한�구조이다

데이터를�학습하는데�필요한�알고리즘을�정의하는데�사용된다.

Page 21: Prediction IO란?

18.�Serving

Serving은�알고리즘을�통해�완성된�예측�데이터를�사용자가�원하는�형태로��

재가공하는�부분이다.�pio�train명령어에�의해�마지막으로�serve�메서드가�실행된다�

pio�train메서드가�실행되면�엔진이�DASE의�각�인스턴스를�만들어서�관리한다

Page 22: Prediction IO란?

19.�Event�Server�API

지금까지�엔진을�이벤트�서버에�배포하는�방법과�엔진을�수정하는�방법을�기술했습니다�(발표자)

*�Event�Server는�REST방식으로�통신할�수�있는�HTTP서버를�별도로�구동한다�

*�디폴트로�http://localhost:7070/�으로�접근할�수�있다�

*�따라서�다양한�언어에서�HTTP�Client�Library를�사용해�이벤트�서버에�접근해서�학습된�예측�데이터를�얻을�수�있다�

POST�http://localhost:7070/engine.json?accessKey=<accessKey>�

에�바디에�이벤트�데이터를�형식에�맞게�넘겨서�이벤트�데이터를�HBase에�저장하거나��

배포된�Engine으로부터�예측�결과�데이터를�얻을�수�있다.�

REST�API에�대한�자세한�정보는�다음�링크에서�확인할�수�있다�

https://docs.prediction.io/datacollection/eventapi/

Page 23: Prediction IO란?

감사합니다