我正在评估用于生产ML应用程序的工具,其中之一是Spark MLlib,但我对训练后如何提供模型有一些问题?
例如,在Azure ML中,一旦训练完成,模型会被公开为Web服务,可以从任何应用程序中使用,并且在Amazon ML中也是类似的情况。
在Apache Spark中,如何提供/部署ML模型?
我正在评估用于生产ML应用程序的工具,其中之一是Spark MLlib,但我对训练后如何提供模型有一些问题?
例如,在Azure ML中,一旦训练完成,模型会被公开为Web服务,可以从任何应用程序中使用,并且在Amazon ML中也是类似的情况。
在Apache Spark中,如何提供/部署ML模型?
MLWriter
),然后在应用程序或笔记本中加载并运行它以针对数据。一种选择是使用 MLeap 在线提供一个 Spark PipelineModel,而且不需要依赖于 Spark/SparkContext。不必使用 SparkContext 是重要的,因为它将单个记录的评分时间从约 100 毫秒降至一位数微秒。
要使用它,您必须:
MLeap 与 Spark MLlib 中所有可用的 Pipeline Stages 都很好地集成在一起(写作时除了 LDA 外)。但是,如果您正在使用自定义 Estimators/Transformers,则可能会变得更加复杂。
有关自定义 Transformer/Estimator、性能和集成的更多信息,请查看 MLeap FAQ。
[编辑] 我建议查看Apache PredictionIO,这是一个开源的机器学习服务器 - 一个非常棒且具有很大潜力的项目。
我已经成功让它工作了。注意事项:Python 3.6+使用Spark ML API(不是MLLIB,但应该可以以相同的方式工作)
基本上,按照MSFT's AzureML github提供的示例进行操作。
警告:代码原样会进行配置,但在示例的run()
方法末尾存在错误:
#Get each scored result
preds = [str(x['prediction']) for x in predictions]
result = ",".join(preds)
# you can return any data type as long as it is JSON-serializable
return result.tolist()
应该是:
#Get each scored result
preds = [str(x['prediction']) for x in predictions]
#result = ",".join(preds)
# you can return any data type as long as it is JSON-serializable
output = dict()
output['predictions'] = preds
return json.dumps(output)
另外,我完全同意MLeap的评估答案,这可以使过程运行得更快,但我仍然想特别回答这个问题。