模型部署概述
数据科学项目的生命周期通常以迭代方式执行以下主要阶段:
- 业务理解(Business understanding)
- 数据采集和理解(Data acquisition and understanding)
- 建模(Modeling)
- 部署(Deployment)
- 客户接受度(Customer acceptance )
学术界很多数据科学项目,包括模型建立、特征选择及模型验证等过程,基本上完成了模型评价也就意味着项目结束。而在工业界商业应用中,模型部署才标志着一个项目开发的阶段性结束。
模型部署的价值主要体现在以下两点:
- 赋予数据科学模型处理新数据的能力,可以是实时的流数据,或者是积累的批数据。
- 在实际应用场景中完成模型效果与性能的反馈,为模型调整提供依据,实现建模开发流程的闭环。
模型不能只停留在线下的分析报告中,训练好的模型如何应用到生产环境?
这里小编介绍几个有关R语言模型部署生产环境应用的方法,其他语言模型也都有对应工具,很多都是想通的。比如Python在深度学习方面的模型部署,由TensorFlow 社区开发的 Tensorflow Lite 工具能翻译转换 tensorflow 预训练模型至 TensorFlow Lite 文件格式,然后用其他的接口来调用模型文件实现部署。也可以用 httpserver、flask、django 等搭建网络框架来部署。
以下是R语言模型部署的几种常见方式:
一是最简单的是离线部署,如
Rscript model.R
。二是用其他语言来调用R脚本,比如Java、Python等。
三是生成PMML(Predictive Model Markup Language)文件,目前主流的一些R语言模型均支持PMML,比如xgboost、lightGBM等,其他语言不需要调用R脚本,只需调用统一的PMML文件就可以,它适合应用在实时、大规模数据量的场景。
四是用R shiny,这个与R生态浑然一体,完全可以不了解其他语言。
五是web端的部署,比如做成REST API的方式供其他语言调用,或直接做成web应用供其他人访问。
其他更多R语言模型的部署方式可参考:CRAN Task View: Model Deployment with R
R语言模型云端/服务器部署
这里主要针对于R语言模型的web端部署,即通过在服务器上开启一个服务的方式来部署模型。
httpuv
httpuv是相对比较底层的R包,熟练使用需要掌握前端知识,并且需要用到RCurl、httr相关爬虫包的一些东西,不太建议这种方式进行模型的部署。
httpuv使得在R中处理http以及websocket请求成为现实,作为基础包,后续的httpuv、opencpu、fiery 和 plumber等都是基于它进行的二次开发。
httpuv文档:https://github.com/rstudio/httpuv
jug
jug是一个微型的轻量级框架,基于httpuv包,为的是部署R代码更简单。它不是一个高效的框架,作用是轻松为R代码创建API,简单灵活。目前开发已终止。
jug文档:http://bart6114.github.io/jug/index.html
opencpu
openCPU应用程序是包含在R包中的静态网页(html、css、js),它们通过openCPU API连接此包中的R函数。openCPU的响应时间比较长。
使用openCPU做模型部署遵循以下一般的开发流程:
- 把要上线的功能写个 R 包
- 编译安装 R 包
- 开启 opencpu 的服务器部署模型
- 连接该端口
openCPU文档:https://www.opencpu.org/api.html
fiery
fiery(热情似火)用复杂度换取服务的灵活性,可以在 R 代码中嵌编辑 html 代码来定制服务。响应时间比openCPU快很多。
fiery文档:https://github.com/thomasp85/fiery
plumber
响应速度很快。学习曲线平缓,对于缺乏 http 请求与 html 语言的小白也不妨碍入门使用这个包。
plumber文档:https://www.rplumber.io/
Rserve
Rserve基于TCP/IP协议,允许R与其他语言通信,提供远程连接、认证、文件传输等功能。可以设计R做为后台服务,处理统计建模、数据分析、绘图等的任务。
Rseve文档:https://rforge.net/Rserve/
RestRserve
RestRserve 是一个 R Web API 框架,用于构建高性能且可靠的微服务和应用后端。在类UNIX系统和Rserve后端上,RestRserve并行处理请求:每个请求都在一个单独的分支中(归功于Simon Urbanek)。由于并行,其响应速度号称比plumber还快20倍。
RestRserve文档: https://restrserve.org/articles/RestRserve.html https://github.com/rexyai/RestRserve
结语
模型部署完毕,可以用mailR和Rweixin两个R包来和邮件与微信通信,用于线上化部署的监测。
当然不止模型部署,其他数据工程项目也是可以用这样方式来调用R的,本质上是调R包或函数。
参考资料: