R模型部署之道:基于OpenCpu Cloud Server

浏览: 1719

本文作者:数据取经团 - 数据栗子

内容概要:

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包来实现)。对云服务的管理有以下命令:

image.png

参考资料: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脚本中:

image.png

2、测试下预测函数是否可用:

#构建新数据,并预测
newx = data.frame(Sepal.Length=5.1,
                               Sepal.Width=3.5,
                               Petal.Length=1.4,
                               Petal.Width=0.2)
predfunc(newx)

image.png

3、将训练好的model.rda放在test文件下的data目录中(如果没有请自己新建一个test文件夹)

image.png

4、build package

点击Build下的more-Build Source Package

image.png

可以看到build成功,并保存在如下位置:

image.png

部署模型

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包)

image.png

依赖包可能存在更多的依赖(比如glmnet依赖foreach、iterators),除了下载后安装外(wget、sudo R CMD INSTALL),还可以通过以下方式实现自动解决依赖问题(切换用户安装):

image.png

3、安装完毕后,可以通过如下方式查看:

image.png

通过制定预测函数所在位置、需要传入的新数据,就可以进行预测了,预测结果见右上方区域。

还可以通过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}]}'

image.png

关于性能优化的建议

1、将涉及的依赖包preload

修改/etc/opencpu/server.conf

sudo vim  /etc/opencpu/server.conf

image.png

2、一些其他参数

timelimit.post (timeout)

rlimit.as (memlimit)

rlimit.fsize(disk limit)

rlimit.nproc (parallelprocess limit)


参考资料:https://www.opencpu.org/posts/scoring-engine/

PS:

本次临时添加了基于opencpu的实现方式,后期会对其他两种方式进行探讨,敬请期待。


推荐 1
本文由 数据取经团 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册