如何提供Spark MLlib模型?

我正在评估用于生产基于ML的应用程序的工具,我们的一个选项是Spark MLlib,但是我有一些关于如何在培训之后为模型提供服务的问题?

例如,在Azure ML中,一旦训练完成,该模型将作为一种可从任何应用程序中使用的Web服务公开,这与Amazon ML也是类似的情况。

你如何在Apache Spark中部署ML模型?

一方面,用传统的方式无法像Azure ML或Amazon ML那样服务于使用Spark创build的机器学习模型。

Databricks声称能够使用它的笔记本部署模型,但我还没有尝试过。

另一方面,您可以通过三种方式使用模型:

  • 在应用程序内部进行训练,然后应用预测。 这可以在火花应用程序或笔记本中完成。
  • 训练一个模型,并保存它,如果它实现了一个MLWriter然后加载在应用程序或笔记本,并运行它对您的数据。
  • 使用Spark训练模型并使用jpmml-spark将其导出为PMML格式。 PMML允许不同的统计和数据挖掘工具使用相同的语言。 通过这种方式,可以在工具和应用程序之间轻松移动预测解决scheme,而无需进行自定义编码。 例如从Spark ML到R.

这是三种可能的方式。

当然,您可以考虑一个架构,在这个架构中,您可以使用每个示例的spark-jobserver来构buildRESTful服务,然后使用spark-jobserver进行培训和部署,但需要进行一些开发。 这不是一个开箱即用的解决scheme。

您也可以使用像Oryx 2这样的项目来创build完整的lambda体系结构来训练,部署和提供模型。

不幸的是,描述上面提到的每个解决scheme都是相当广泛的,不符合SO的范围。

你正在比较两个不同的东西。 Apache Spark是一个计算引擎,虽然您提到亚马逊和微软解决scheme提供的服务。 这些服务可能还有MLlib后面的Spark。 他们可以帮助您免除自己创buildWeb服务的麻烦,但是您要多付钱。

像Domino Data Lab,Cloudera或IBM这样的公司提供的产品可以部署在您自己的Spark集群上,并且可以轻松地在您的模型周围构build服务(具有不同程度的灵活性)。

当然你可以用各种开源工具自己构build一个服务。 具体哪个? 这一切都取决于你以后的样子。 用户应该如何与模型进行交互? 是否应该有某种用户界面或开玩笑的REST API? 你需要改变模型或模型本身的一些参数吗? 这些工作更多是批处理还是实时? 你自然可以build立一体化的解决scheme,但这将是一个巨大的努力。

我个人的build议是,尽可能利用亚马逊,谷歌,微软等公司提供的其中一项服务。 需要本地部署? 检查Domino数据实验室,他们的产品是成熟的,并允许轻松使用模型(从build设到部署)。 Cloudera更专注于集群计算(包括Spark),但是它需要一段时间才能成熟。

[编辑]我build议看一看Apache PredictionIO ,开源的机器学习服务器 – 这个惊人的项目很有潜力。