基于 PredictionIO 搭建全栈式机器学习平台

Posted 彭宇成

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于 PredictionIO 搭建全栈式机器学习平台相关的知识,希望对你有一定的参考价值。

场景

怎么从零构建自己的机器学习平台(以下简称平台)?

分析

我们不妨从 平台的终端用户 -App开发人员 与 平台自身的开发人员 入手,分析一下,机器学习平台应该具备哪些能力。

对于使用者而言,平台需要简单易接入、能实时提供服务

怎么在app中植入机器学习相关算法,让app变得智能? 对于App开发者而言,我们当然希望植入机器学习算法像调用普通 api 一样简单。事实上,目前成熟的AI类产品正是这么做的,这里参考一下百度AI开放平台:

以上,机器学习类产品需求具备这样的能力:
1)提供 各类 SDK 方便接入用户的请求。
2)能以 json 等格式实时返回相关的数据(即服务,推荐的新闻列表)。

对于自身开发人员来说,平台要可扩展,能接入各类机器学习算法库;机器学习常用的算法应该模板化,算法人员写小量代码甚至不写代码,调整一下相关参数即可完成算法的开发。

方案

发现 PredictionIO这款开源产品比较满足我们的需求。这里以官方自带的 推荐类场景,介绍 基于PredictionIO 如何构建机器学习平台 - 先看整体效果:
注: predictionIO搭建过程文档
[ 官方文档已经够详细了,按照操作一步步来,可能存在的问题主要是 sbt 相关包的下载 ]

推荐类场景

通过 rest API 获取推荐服务
import com.google.common.collect.ImmutableMap;
import com.google.gson.JsonObject;
import org.apache.predictionio.EngineClient;
// create client object
EngineClient engineClient = new EngineClient(<ENGINE DEPLOY URL>);
// query
JsonObject response = engineClient.sendQuery(ImmutableMap.<String, Object>of(
        "user", "1",
        "num",  4
    ));
通过 java SDK 获取推荐服务
返回结果与 restAPI 结果一致。我们可以通过自带的UI界面,看看模型跑的具体算法,以及算法相关的参数: ![这里写图片描述](https://img-blog.csdn.net/20180614160911546?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BFTkdZVUNIRU5HMzIxMDk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)

架构解读


PIO有三种类型的数据:
1) event data : 用户的行为数据。eg、


"eventId":"AWP4XGs3BWDRTgrl7tbG","event":"buy","entityType":"user",
"entityId":"u1","targetEntityType":"item",
"targetEntityId":"i2","properties":,
"eventTime":"2014-11-11T04:34:56.123+08:00",
"creationTime":"2018-06-13T16:56:36.394+08:00"
 

2) model data : 训练好的模型 。
3) meta data : pio build 、pio train 、pio deploy 。

环境搭建

存储: 选用 Elasticsearch 与 HDFS 。其中 ES 存放 meta data 与 event data ; HDFS 保存模型 。
计算: Spark 组件。支持的算法库 Spark MLLib 、OpenNLP …
具体安装过程文档,待补充

算法定制


问题

1) 模型保存到 HDFS 上如何配置?目前是保存到本地上,按照 官网文档中的说明配置,实际运行的时候有问题。
2) 目前,内置的算法模板都是基于 java、scala开发的。用python开发的算法能不能部署到 PIO 上跑?怎么部署。
3) 周期性更新模型的 crontab 模板待开发。

参考

1】PredictionIO 官网

以上是关于基于 PredictionIO 搭建全栈式机器学习平台的主要内容,如果未能解决你的问题,请参考以下文章

也谈基于NodeJS的全栈式开发(基于NodeJS的前后端分离)

数据层全栈式编程架构

如何学习:构建全栈式知识结构

基于NodeJS+Express+mongoDB+Bootstrap的全栈式工程化开发前后端分离博客系统实战

HDFSYarnHive…MRS中使用Ranger实现权限管理全栈式实践

HDFSYarnHive…MRS中使用Ranger实现权限管理全栈式实践