PredictionIO:孵化中的開源機器學習服務器

EREN
erens-tech-book
Published in
8 min readOct 7, 2017

這一次在 DataCon 2017 中參加了幾項議程,其中對 Apache PredictionIO 架構及整合 有興趣,閱讀了一下文件。

當我們在架構一個機器學習系統時,背後隱藏了一些技術債,其系統周邊的基礎設施實際上很龐大。

Hidden Technical Debt in Machine Learning Systems

一個建立於 Big Data 系統上的機器學習堆疊包含:

  • Apps

API Service Server

  • Algorithms

e.g. Spark MLlib, DeepLearning4J, Tensorflow, Caffe, …

  • Processing

e.g. Hadoop, Spark, Storm, …

  • DataStore

e.g. RDB,Hadoop HDFS, HBase, Redshift, Elasticsearch, …

PredictionIO

Apache PredictionIO 是一個開源的機器學習架構,建立在最進步的開源堆疊,為開發人員與資料科學家創建任何機器學習任務的預測引擎,它能夠提供:

  • 在生產時,使用客製化的模板快速建置和部署引擎為 Web 服務。
  • 部署為 Web 服務後,便提供實時的動態查詢。
  • 系統性評估和調整多個引擎變體。
  • 批次或實時來統一多個平台的資料,並用於綜合預測分析。
  • 對系統流程與預先建立的評估措施,加速其機器學習模型的建置。
  • 支援機器學習和資料處理庫,如 Spark MLLib 和 OpenNLP。
  • 實作自己的機器學習模型,並將它無縫地併入您的引擎。
  • 簡化資料基礎設施的管理。

Apache PredictionIO 可與 Apache Spark、MLlib、HBase、Spray、Elasticsearch 搭配,簡化並加速可擴展之機器學習基礎設施的管理。

架構

PredictionIO 由以下元件組成:

  • PredictionIO Platform:機器學習堆疊,用於建構、評估和部署機器學習演算法引擎。
  • Event Server:機器學習分析層,用於統整來自多個平台(Platform)的事件(Event)。
  • Template Gallery:供您下載各種不同的機器學習應用程式的引擎模板。

Event Server

PredictionIO 的 Event Server 會實時或批量收集應用程式中的資料,並可以將多個平台中與您應用程式相關的資料整合。

  1. 向 PredictionIO 引擎提供資料以進行模型的訓練和評估
  2. 提供整合的資料分析視圖

如同資料庫伺服器,Event Server 也可託管多個應用程式。每個應用程式使用 app_name 來分隔資料。

一旦 Event Server 啟動,您可以將資料發送到特定的 app_name,通過發送 HTTP 請求的 Event APISDK,並由 Access Key 識別。

在一些情況下,您可能希望引擎從另一個資料儲存區而不是 Event Server 來讀取資料,您能通過一些修改來實現。

Engine

引擎涵蓋多個機器學習演算法。它負責讀取訓練資料並建構預測模型,然後將其部署為 Web 服務,部署的引擎透過 REST API 實時回應來自應用程式的查詢。

PredictionIO 的 Template gallery 提供多種機器學習任務的引擎模板,您可以輕鬆地從這些模板建立一個或多個引擎。

模板的元件 Data Source、Data Preparator、Algorithm(s) 和 Serving 都可以通過您的需求來客製化

安裝 Apache PredictionIO

最低版本需求

  • Apache Hadoop 2.6.5 (optional, required only if YARN and HDFS are needed)
  • Apache Spark 1.6.3 for Hadoop 2.6
  • Java SE Development Kit 8

及以下的選用:

  • PostgreSQL 9.1

  • MySQL 5.1

  • Apache HBase 0.98.5
  • Elasticsearch 1.7.6

您要運行的機器至少配派 2GB 的記憶體。

如果你使用 Linux 的 Apache Spark Local Mode(沒有任何配置的預設模式),您可能會無法運行。在此案例,請將您的 Apache Spark 配置為 Standalone Cluster Mode

安裝

您可以使用原始碼或 Docker 進行安裝:

下載原始碼

$ gpg --import KEYS$ gpg --verify apache-predictionio-0.12.0-incubating.tar.gz.asc apache-predictionio-0.12.0-incubating.tar.gz

您應該獲得以下輸出:

gpg: Signature made Tue Sep 26 22:55:22 2017 PDTgpg:                using RSA key 7E2363D84719A8F4gpg: Good signature from "Chan Lee <chanlee@apache.org>" [ultimate]

建構原始碼

預設會針對下列版本進行建構:

  • Scala 2.11.8
  • Spark 2.1.1
  • Hadoop 2.7.3
  • Elasticsearch 5.5.2
$ tar zxvf apache-predictionio-0.12.0-incubating.tar.gz$ cd apache-predictionio-0.12.0-incubating$ ./make-distribution.sh

您應該獲得以下輸出:

...PredictionIO-0.12.0-incubating/sbt/sbtPredictionIO-0.12.0-incubating/conf/PredictionIO-0.12.0-incubating/conf/pio-env.shPredictionIO binary distribution created at PredictionIO-0.12.0-incubating.tar.gz

提取您剛建置的二進位分配:

$ tar zxvf PredictionIO-0.12.0-incubating.tar.gz

從 0.11.0 開始,PredictionIO 可以針對不同的版本進行建構:

  • Scala 2.10.x, 2.11.x
  • Spark 1.6.x, 2.0.x, 2.1.x
  • Hadoop 2.4.x, 2.5.x, 2.6.x, 2.7.x
  • Elasticsearch 1.7.x, 5.x

以下針對 Scala 2.11.8、Spark 2.1.0 及 Elasticsearch 5.3.0 進行建構:

$ ./make-distribution.sh -Dscala.version=2.11.8 -Dspark.version=2.1.0 -Delasticsearch.version=5.3.0

安裝依賴套件

PredictionIO 的預設配置:

$ mkdir PredictionIO-0.12.0-incubating/vendors

Spark 是 PredictionIO 的預設處理引擎:

$ wget http://d3kbcqa49mib13.cloudfront.net/spark-2.1.1-bin-hadoop2.6.tgz$ tar zxvfC spark-2.1.1-bin-hadoop2.6.tgz PredictionIO-0.12.0-incubating/vendors

您可以編輯 PredictionIO-0.12.0-incubatin/conf/pio-env.sh 並更改 SPARK_HOME 變數來指向 Spark 的安裝位置。

參考資料

http://2017.datacon.tw/agenda/

http://sssslide.com/speakerdeck.com/takahiro/building-a-recommendation-engine-with-spark-and-apache-predictionio

https://medium.freecodecamp.org/building-an-recommendation-engine-with-apache-prediction-io-ml-server-aed0319e0d8

http://blog.mokayo.com/predictionio/

--

--

EREN
erens-tech-book

“I’m quite illiterate, but I read a lot. “ — J.D.Salinger, The Catcher in the Rye