在生产中部署预测模型似乎没有太多选择,考虑到大数据的爆炸性增长,这是令人惊讶的。
据我所知,开源PMML可用于将模型导出为XML规范。然后,这可以用于数据库内评分/预测。但是,为了完成这项工作,您需要使用Zementis的PMML插件,这意味着该解决方案不是真正的开源。是否有更简单的开放方式将PMML映射到SQL进行评分?
另一种选择是使用JSON而不是XML来输出模型预测。但在这种情况下,R模型会在哪里?我假设它总是需要映射到SQL ...除非R模型可以与数据位于同一服务器上,然后使用R脚本运行该传入数据?
还有其他选择吗?
答案 0 :(得分:20)
以下列出了迄今为止我在生产中部署R模型时发现的备选方案。请注意,使用这些产品的工作流程在彼此之间存在很大差异,但它们都以某种方式用于促进将受过训练的R模型作为服务公开的过程:
答案 1 :(得分:15)
答案实际上取决于您的生产环境。
如果你的“大数据”在Hadoop上,你可以试试这个相对较新的开源PMML“评分引擎”,名为Pattern。
否则你别无选择(缺少编写自定义模型特定代码),而是在服务器上运行R.您可以使用save
将拟合模型保存在.RData文件中,然后load
并在服务器上运行相应的predict
。 (这肯定会很慢,但你总是可以尝试在其上投入更多硬件。)
你如何做到这一点取决于你的平台。通常有一种方法可以添加用R编写的“自定义”函数。术语是UDF(用户定义函数)。在Hadoop中,您可以将这些函数添加到Pig(例如https://github.com/cd-wood/pigaddons),或者您可以使用RHadoop编写简单的map-reduce代码来加载模型并在R中调用predict
。如果您的数据在Hive中,您可以使用Hive TRANSFORM来调用外部R脚本。
还有一些特定于供应商的方法可以将用R编写的函数添加到各种SQL数据库中。再次在文档中查找UDF。例如,PostgreSQL有PL/R。
答案 2 :(得分:6)
您可以使用管道工(https://github.com/trestletech/plumber)为您的R脚本创建RESTful API。
我使用部署信用模型作为示例写了一篇关于它的博客文章(http://www.knowru.com/blog/how-create-restful-api-for-machine-learning-credit-model-in-r/)。
一般情况下,我不建议使用PMML,因为您使用的软件包可能不支持转换为PMML。
答案 3 :(得分:1)
来自Yhat的Elise。
与@ Ramnath和@ leo9r一样,我们的软件允许您通过REST API端点直接将任何R(或Python)模型放入生产中。
我们处理实时或批处理,以及与流程相关的所有模型测试和版本控制+系统管理。
如果您正在考虑如何将R模型投入生产(我们的数据sci团队在使用Yhat之前重新编码为PHP),那么我们与VIA SMS共同撰写的case study可能会有用。
干杯!
答案 4 :(得分:1)
通常的做法是在R中对新的/更新的数据集进行评分,并仅将结果(ID,分数,概率,其他必要字段)移动到生产环境/数据仓库中。
我知道这有其局限性(不经常更新,依赖IT,数据集大小/计算能力限制)并且可能不是许多(您的老板)正在寻找的最前沿答案;但对于许多用例而言,这种方法效果很好(而且成本友好!)。
答案 5 :(得分:1)
问题最初提出已经过去了几年。
对于快速原型,我认为目前最简单的方法是使用 Jupyter Kernel Gateway 。这使您可以将REST端点添加到Jupyter笔记本中的任何单元。这适用于R和Python,具体取决于您使用的内核。
这意味着您可以通过Web界面轻松调用任何R或Python代码。与Docker结合使用时,它适合微服务方法来部署和扩展您的应用程序。
这是一篇文章,从头到尾介绍您如何使用Jupyter Kernel Gateway快速设置Jupyter Notebook。
Learn to Build Machine Learning Services, Prototype Real Applications, and Deploy your Work to Users
对于将解决方案迁移到 生产,2019年的主要方法是使用Kubeflow。 Kubeflow是由Google创建并维护的,它使得“缩放机器学习(ML)模型并将其部署到生产中的过程变得尽可能简单”。
从他们的网站上:
您调整配置以选择要用于 ML工作流的每个阶段的平台和服务:数据准备,模型训练,预测服务和服务管理。 您可以选择本地或在云环境中部署工作负载。