MLSQL 对Python的支持之路

前言

Python是做机器学习框架一定要支持的。MLSQL很早就支持集成Python脚本做模型的训练和预测。

训练的使用方式:

load libsvm.`sample_libsvm_data.txt` as data;

train data as PythonAlg.`/tmp/model1`
where
pythonScriptPath="/tmp/train.py"

-- keep the vertion of every model you train
and keepVersion="true"

and  enableDataLocal="true"
and  dataLocalFormat="json"

and  `fitParam.0.batchSize`="1000"
and  `fitParam.0.labelSize`="2"

and validateTable="data"

and `systemParam.pythonPath`="python"
and `systemParam.pythonVer`="2.7"
and `kafkaParam.bootstrap.servers`="127.0.0.1:9092"
;

可以看到,你可以直接指定一个python脚本路径。预测也是同样的:

load libsvm.`sample_libsvm_data.txt` as data;

-- register the model we have trained as a funciton.
register PythonAlg.`/tmp/model1` as npredict options
pythonScriptPath="/tmp/predict.py"
;

-- use the predict udf
select npredict(features) from data
as newdata;

问题

前面的支持方式有三个巨大的缺陷,我们在实际使用过程中也是体会明显:

  1. 没有解决Python环境问题。因为是常驻服务模式,让问题变得更加复杂。
  2. 没有项目的概念。对于自己实现的复杂算法,不大可能放在一个脚本中,而且预测脚本和训练脚本往往会依赖一堆的基础脚本。
  3. 没有区分批预测和API预测。批预测适合在批处理或者流式计算中使用。API预测则适合部署成http 接口。

解决办法

  1. 通过conda解决环境问题,每个项目有自己的python运行环境。
  2. 提出项目的概念,即使配置的是一个脚本,系统也会自动生成一个项目来运行。
  3. 以MLFlow为蓝本,指定了一个项目的标准。标准项目应该在根目录有一个MLproject描述文件。

具体示例项目可以参看这里,对应的MLproject文件如下:

name: tutorial

conda_env: conda.yaml

entry_points:
  main:
    train:
        parameters:
          alpha: {type: float, default: 0.5}
          l1_ratio: {type: float, default: 0.1}
        command: "python train.py 0.5 0.1"
    batch_predict:
        parameters:
          alpha: {type: float, default: 0.5}
          l1_ratio: {type: float, default: 0.1}
        command: "python batchPredict.py"
    api_predict:
        parameters:
          alpha: {type: float, default: 0.5}
          l1_ratio: {type: float, default: 0.1}
        command: "python predict.py"

用户需要提供三个核心脚本:批处理,批预测,API预测。具体如何写可以看看示例项目。我们现在来看看怎么使用这个项目:

首先是训练部分:

load csv.`/Users/allwefantasy/CSDNWorkSpace/mlflow/examples/sklearn_elasticnet_wine/wine-quality.csv` 
where header="true" and inferSchema="true" 
as data;

train data as PythonAlg.`/tmp/abc` where pythonScriptPath="/Users/allwefantasy/CSDNWorkSpace/mlflow/examples/sklearn_elasticnet_wine"
 and keepVersion="true"
 and  enableDataLocal="true"
 and  dataLocalFormat="csv"
 ;

非常简单,你只要指定项目地址即可。接着我们做批量预测:

predict data as PythonAlg.`/tmp/abc`;

这里我们无需指定项目地址,原因是在/tmp/abc里已经保存了所有需要的元数据。

接着我们部署一个API服务, 通过http接口利用如下语句注册模型:

 register PythonAlg.`/tmp/abc` as pj;

接着就可以预测了(我写了段程序模拟请求)

import org.apache.http.client.fluent.{Form, Request}

object Test {
  def main(args: Array[String]): Unit = {
    val sql = "select pj(vec_dense(features)) as p1 "

    val res = Request.Post("http://127.0.0.1:9003/model/predict").bodyForm(Form.form().
      add("sql", sql).
      add("data", s"""[{"features":[ 0.045, 8.8, 1.001, 45.0, 7.0, 170.0, 0.27, 0.45, 0.36, 3.0, 20.7 ]}]""").
      add("dataType", "row")
      .build()).execute().returnContent().asString()
    println(res)
  }
}

完成。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏乐沙弥的世界

Oracle RAC OCR 与健忘症

    OCR就好比Windows的一个注册表,存储了所有与集群,RAC数据库相关的配置信息。而且是公用的配置,也就是说多个节点共享相同的配置信息。因此该配置应...

15050
来自专栏人工智能

分布式TensorFlow入坑指南:从实例到代码带你玩转多机器深度学习

通过多 GPU 并行的方式可以有很好的加速效果,然而一台机器上所支持的 GPU 是有限的,因此本文介绍了分布式 TensorFlow。分布式 TensorFlo...

26970
来自专栏用户2442861的专栏

Tesseract:训练

http://www.zmonster.me/2015/05/05/tesseract-training.html

18910
来自专栏小小挖掘机

windows下使用word2vec训练维基百科中文语料全攻略!(一)

训练一个聊天机器人的很重要的一步是词向量训练,无论是生成式聊天机器人还是检索式聊天机器人,都需要将文字转化为词向量,时下最火的词向量训练模型是word2vec,...

29760
来自专栏Deep learning进阶路

caffe随记(四) --- mnist示例超详细讲解

这个mnist手写体数字识别的例子可以说是caffe中的 Hello World。mnist最初用于支票上的手写数字识别,针对mnist识别的专门模型是Lene...

28900
来自专栏李想的专栏

使用腾讯云“自定义监控”监控 GPU 使用率

本文旨在通过使用腾讯云的“自定义监控”服务来自行实现对 GPU 服务器的 GPU 使用率的监控。

1.3K130
来自专栏数据和云

性能优化:B*Tree 索引中的数据块分配(五)

黄玮(Fuyuncat) 资深Oracle DBA,个人网www.HelloDBA.com,致力于数据库底层技术的研究,其作品获得广大同行的高度评价. 编辑手记...

30360
来自专栏性能与架构

Nginx的I/O性能为什么比Apache更高效?

Nginx与Apache的I/O性能差距源于他们采用不同的I/O模型 Apache - select模型 Nginx - epoll模型 特点对比 se...

395100
来自专栏小巫技术博客

Building TensorFlow on Android(译)

17510
来自专栏机器学习算法与Python学习

支持向量机Python实现(附源码与数据)

之前的文章已经将支持向量机的原理讲解的比较清楚了,今天这篇文章主要是基于Python实现支持向量机,具体的数据集和源代码如下所示(文末附有本文使用的数据集和源代...

44950

扫码关注云+社区

领取腾讯云代金券