本文中用到的所有demo我都已经发布到了Github,需要的同学可以自行下载:
https://github.com/kingliantop/azurelabs/tree/master/RServerDemo
一般来讲数据科学家会在本地或者开发服务器开发机器学习模型,然后需要把它通过某种方式发布出去,以便于开发人员能够使用。微软的mrsdeploy package提供了一套方便的工具帮助用户建立远程连接,将R语言发布为RESTful Web Service,本文简单介绍如何实现。
发布R机器学习模型为Web Service
# If on R Server 9.0, load mrsdeploy package now
library(mrsdeploy)
# Create glm model with `mtcars` dataset
carsModel <- glm(formula = am ~ hp + wt, data = mtcars, family = binomial)
# Produce a prediction function that can use the model
manualTransmission <- function(hp, wt) {
newdata <- data.frame(hp = hp, wt = wt)
predict(carsModel, newdata, type = "response")
}
# test function locally by printing results
print(manualTransmission(120, 2.8)) # 0.6418125
# Use `remoteLogin` to authenticate with R Server using
# the local admin account. Use session = false so no
# remote R session started
remoteLogin("http://42.159.238.196:12800",
username = "admin",
password = "YOURPASS!",
session = FALSE)
serviceName <- paste0("mtService", round(as.numeric(Sys.time()), 0))
# Publish as service using `publishService()` function from
# `mrsdeploy` package. Name service "mtService" and provide
# unique version number. Assign service to the variable `api`
api <- publishService(
serviceName,
code = manualTransmission,
model = carsModel,
inputs = list(hp = "numeric", wt = "numeric"),
outputs = list(answer = "numeric"),
v = "v1.0.0"
)
4. 如果上述语句执行没有问题,那么恭喜你,你的模型就算发布成功了,如果你想了解你所发布的模型的详情,可以使用如下语句显示,可以看到服务地址,:
print(api$capabilities())
应用程序调用R模型服务接口
R语言的服务模型发布完之后,就需要让开发人员使用机器学习模型。应用的开发语言可能是多种多样的,比如python,Java,C#,nodeJS等等,因为在上面发布的模型是RESTFul web service的,你当然可以用各种语言直接写REST call来处理,但你要处理认证,输入,输出等问题,相对来讲比较繁琐,如果有SDK就好了:)是的,但问题是怎么快速的产生各个语言的SDK呢?总不能每个机器学习模型做一套吧?
Microsoft R使用的是业界通用的Swagger文件来提供对外标准接口定义,Swagger是遵循OpenAPI规范的一个RESTFul API管理工具,语言无关,通过Swagger文件可以快速的生成各个语言的SDK,Swagger的详细介绍请参考:
> swagger <- api$swagger()
> cat(swagger, file = "d:\swagger.json", append = FALSE)
上述操作默认将swagger文件保存在D盘下,你可打开看看文件内容,定义了可以执行的各个操作。
3. 安装Autorest,首先需要安装NodeJS,然后使用NPM安装:
npm install -g autorest
4. 安装完成后,可以使用autorest --help来看看使用帮助:
5. 我们使用Autorest工具,通过swagger.json文件,来生成python的SDK:
7. 运行setup.py进行安装,会将相应的python包安装到系统路径:
login = models.LoginRequest("admin","YOURPASSWORD!")
mtp = mt.MtService1495184382("http://42.159.115.154:12800")
token=mtp.login(login)
print(token)
input = models.InputParameters(120,2.8)
headers=default_headers()
headers['Authorization'] = "{} {}".format(token.token_type, token.access_token)
result = mtp.manual_transmission(input,headers)
print(result.output_parameters)
前面是测试打印的token,得到预期的输出结果0.641812:
从本系列描述可以看到,通过使用Microsoft R Client和Server,可以快速的实现机器学习模型的构建,测试,可视化,发布以及使用,也可以进行大规模部署,将在后续文章中介绍。