部署成API服务时,除了要把raw数据特征化成向量外,研发还要想着怎么加载模型,产生模型的框架五花八门,比如Tensorflow,SKlearn,Spark MLllib等每个框架都有自己的模型格式。在我司,有一次用Sklearn研发了一个模型,研发资源比较紧张,没办法,算法同学治好自己用Python flask搭建了一个API,然后部署成微服务(多实例来解决并发能力)。
有没有一种办法,可以一键部署多个不同类型框架训练出来的模型呢?答案是有的,目前MLSQL支持部署SKlearn,Tensorflow,Spark Mllib等三种类型框架的模型,完全无需任何开发。举个例子,通过MLSQL训练了一个SkLearn算法的模型,假设是贝叶斯,我们看看部署流程:
用local模式启动StreamingPro:
./bin/spark-submit --class streaming.core.StreamingApp \
--master local[2] \
--name predict_service \
streamingpro-spark-2.0-1.0.0.jar \
-streaming.name predict_service \
-streaming.job.file.path file:///tmp/query.json \
-streaming.platform spark \
-streaming.rest true \
-streaming.driver.port 9003 \
-streaming.spark.service true
这个时候该服务会监听9003端口,向http://127.0.0.1:9003/run/script
接口注册已经训练好的模型:
register SKLearn.`/tmp/model` as nb_predict;
现在这个模型就已经可以对外提供服务了。你可以通过访问http://127.0.0.1:9003/model/predict
获得SkLearn 贝叶斯模型的功能了。
该接口支持两个参数:
- data ,等待预测的向量数组,json格式。支持dense和sparse两种格式的向量。
- sql, 选择什么模型进行预测。
典型参数格式如下:
data=[[1,2,3...]] & sql=select nb_predict(feature) as p
其中 feature为一个固定字段,也就是指代data里面的向量。最后接口返回结果如下:
{
"p": {
"type": 1,
"values": [
1,
0
]
}
}
最后,项目地址在这里:MLSQL 模型部署