如何提供Spark MLlib模型?

Lui*_*eal 35 machine-learning apache-spark apache-spark-mllib

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

例如,在Azure ML中,一旦经过培训,该模型将作为Web服务公开,可以从任何应用程序中使用,这与Amazon ML类似.

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

eli*_*sah 19

一方面,使用spark构建的机器学习模型无法以传统方式在Azure ML或Amazon ML中提供服务.

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

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

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

这是三种可能的方式.

当然,你可以想到一个架构,你可以在其中使用RESTful服务,你可以使用spark-jobserver来构建每个示例来训练和部署,但需要一些开发.这不是一个开箱即用的解决方案.

您也可以使用像Oryx 2这样的项目来创建完整的lambda架构来训练,部署和提供模型.

不幸的是,描述上述每个解决方案都是相当广泛的,并不适合SO的范围.


Mar*_*ace 8

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

要使用它,您必须:

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

MLeap与Spark MLlib中提供的所有管道阶段(在撰写本文时除了LDA之外)完美集成.但是,如果您使用自定义Estimators/Transformers,事情可能会变得复杂一些.

有关自定义变换器/估算器,性能和集成的更多信息,请查看MLeap常见问题解答.