如何服务Spark MLlib模型?
apache-spark
machine-learning
10
0

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

例如,在Azure ML中,一旦受过训练,该模型就会作为可从任何应用程序使用的Web服务公开,这与Amazon ML相似。

您如何在Apache Spark中提供服务/部署ML模型?

参考资料:
Stack Overflow
收藏
评论
共 3 个回答
高赞 时间 活跃

一方面,以Spark构建的机器学习模型无法以传统方式为您在Azure ML或Amazon ML中提供服务。

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

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

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

这是三种可能的方式。

当然,您可以考虑一个具有RESTful服务的体系结构,您可以在该体系结构后使用每个示例使用spark-jobserver进行构建以训练和部署,但需要进行一些开发。这不是开箱即用的解决方案。

您可能还使用Oryx 2之类的项目来创建完整的lambda架构,以训练,部署和提供模型。

不幸的是,对上述每个解决方案的描述都非常广泛,并且不适合SO的范围。

收藏
评论

一种选择是使用MLeap在线提供Spark PipelineModel,而无需依赖Spark / SparkContext 。不必使用SparkContext很重要,因为它将将单个记录的评分时间从〜100ms减少到个位数微秒

为了使用它,您必须:

  • 使用MLeap实用程序序列化Spark模型
  • 在MLeap中加载模型(不需要SparkContext或任何Spark依赖项)
  • 用JSON创建输入记录(不是DataFrame)
  • 用MLeap得分记录

MLeap与Spark MLlib中可用的所有管道阶段都很好地集成在一起(在撰写本文时,LDA除外)。但是,如果您使用自定义的Estimators / Transformers,事情可能会变得更加复杂。

请查看MLeap常见问题解答 ,以获取有关自定义转换器/估计器,性能和集成的更多信息。

收藏
评论

您正在比较两个截然不同的事物。 Apache Spark是一个计算引擎,而您已经提到了Amazon和Microsoft解决方案正在提供服务。这些服务可能还带有Spark和MLlib。它们使您免于自己构建Web服务的麻烦,但是您需要支付额外的费用。

许多公司(例如Domino Data Lab,Cloudera或IBM)提供了可以部署在自己的Spark集群上并可以轻松地围绕模型构建服务(具有不同程度的灵活性)的产品。

自然,您可以使用各种开源工具自己构建服务。具体哪个?这一切都取决于您所追求的。用户应如何与模型交互?应该有某种UI还是开玩笑的是REST API?您是否需要更改模型或模型本身的某些参数?这些工作是批量还是实时的?您自然可以构建多合一的解决方案,但这将是一项巨大的努力。

我个人的建议是,如果可以的话,充分利用亚马逊,谷歌,微软等提供的服务之一。需要本地部署吗?检查Domino Data Lab,他们的产品很成熟,可以轻松使用模型(从构建到部署)。 Cloudera更专注于集群计算(包括Spark),但是要使它们成熟还需要一段时间。

[编辑]我建议您看一下Apache PredictionIO ,这是开源的机器学习服务器-具有很多潜力的惊人项目。

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题