MLSQL如何支持部署SKLearn,Tensorflow,MLLib模型提供API预测服务

部署成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 贝叶斯模型的功能了。

该接口支持两个参数:

  1. data ,等待预测的向量数组,json格式。支持dense和sparse两种格式的向量。
  2. sql, 选择什么模型进行预测。

典型参数格式如下:

data=[[1,2,3...]] & sql=select nb_predict(feature) as p

其中 feature为一个固定字段,也就是指代data里面的向量。最后接口返回结果如下:

{
    "p": {
        "type": 1,
        "values": [
            1,
            0
        ]
    }
}

最后,项目地址在这里:MLSQL 模型部署

推荐阅读更多精彩内容