作者:数据取经团——数据栗子
数据取经团(公众号:zlx19930503)专注R、Python数据分析挖掘、可视化、机器学习等
内容概要:
1、搭建opencpu云服务
2、训练R模型,并打包
3、部署模型
正式内容:
搭建OpenCpu Cloud Server
上期探讨了R模型的pojo部署方法(详见:以莺尾花数据集为例,探讨R模型部署之道),今天探讨下如何使用opencpu搭建restful api,本次还是使用iris数据集。
测试环境:Ubuntu 16.04(14.04下亲测可用)
#requires Ubuntu 16.04 (Xenial)
sudo add-apt-repository -y ppa:opencpu/opencpu-2.0
sudo apt-get update
sudo apt-get upgrade
#install opencpu server
sudo apt-get install -y opencpu-server
#optional
sudo apt-get install -y rstudio-server
当然,除了cloud server版本之外,还有single-user版本(通过安装opencpu包来实现)。对云服务的管理有以下命令:
参考资料:https://www.opencpu.org/download.html
训练R模型,并打包
训练R模型
通过glmnet包构建多分类模型:
#加载包
library(glmnet)
#准备数据
x = as.matrix(iris[,1:4])
y = iris[,5]
y <- as.factor(y)
#建立模型
model = glmnet(x,y,family ="multinomial")
save(model, file='model.rda')
将模型保存为rda格式,以备后用。
编写预测函数,并将模型打包
#编写预测函数
predfunc = function(input){
input = as.matrix(input)
result = glmnet::predict.multnet(model,newx =input,type='class',s=0.01)
as.character(result)
}
1、创建一个R project:test(推荐使用rstudio),将上面的预测函数写到R脚本中:
2、测试下预测函数是否可用:
#构建新数据,并预测
newx = data.frame(Sepal.Length=5.1,
Sepal.Width=3.5,
Petal.Length=1.4,
Petal.Width=0.2)
predfunc(newx)
3、将训练好的model.rda放在test文件下的data目录中(如果没有请自己新建一个test文件夹)
4、build package
点击Build下的more-Build Source Package
可以看到build成功,并保存在如下位置:
部署模型
1、为了能让opencpu调用这个包,需要将包安装在global library下
sudo R CMD INSTALL/home/lee/Desktop/test_0.1.0.tar.gz --library=/usr/local/lib/R/site-library
2、除了安装我们制作的包外,还需要安装模型依赖的包(比如:本文中的glmnet包)
依赖包可能存在更多的依赖(比如glmnet依赖foreach、iterators),除了下载后安装外(wget、sudo R CMD INSTALL),还可以通过以下方式实现自动解决依赖问题(切换用户安装):
3、安装完毕后,可以通过如下方式查看:
通过制定预测函数所在位置、需要传入的新数据,就可以进行预测了,预测结果见右上方区域。
还可以通过curl的方式来进行调用:
curl http://192.168.26.137/ocpu/library/test/R/predfunc/json -H "Content-Type:application/json" -d '{"input" :[ {"Sepal.Length":1.1,"Sepal.Width" : 2.5, "Petal.Length":0.4,"Petal.Width":0.9}]}'
关于性能优化的建议
1、将涉及的依赖包preload
修改/etc/opencpu/server.conf
sudo vim /etc/opencpu/server.conf
2、一些其他参数
timelimit.post
(timeout)
rlimit.as
(memlimit)
rlimit.fsize
(disk limit)
rlimit.nproc
(parallelprocess limit)
参考资料:https://www.opencpu.org/posts/scoring-engine/
PS:
本次临时添加了基于opencpu的实现方式,后期会对其他两种方式进行探讨,敬请期待。
微信回复关键字即可学习
回复 R R语言快速入门免费视频
回复 统计 统计方法及其在R中的实现
回复 用户画像 民生银行客户画像搭建与应用
回复 大数据 大数据系列免费视频教程
回复 可视化 利用R语言做数据可视化
回复 数据挖掘 数据挖掘算法原理解释与应用
回复 机器学习 R&Python机器学习入门