PredictionIO:孵化中的開源機器學習服務器
這一次在 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 會實時或批量收集應用程式中的資料,並可以將多個平台中與您應用程式相關的資料整合。
- 向 PredictionIO 引擎提供資料以進行模型的訓練和評估
- 提供整合的資料分析視圖
如同資料庫伺服器,Event Server 也可託管多個應用程式。每個應用程式使用 app_name 來分隔資料。
一旦 Event Server 啟動,您可以將資料發送到特定的 app_name,通過發送 HTTP 請求的 Event API 或 SDK,並由 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 的安裝位置。