Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >谷歌BigQuery ML VS StreamingPro MLSQL

谷歌BigQuery ML VS StreamingPro MLSQL

作者头像
用户2936994
发布于 2018-08-27 07:00:13
发布于 2018-08-27 07:00:13
1.5K00
代码可运行
举报
文章被收录于专栏:祝威廉祝威廉
运行总次数:0
代码可运行

前言

今天看到了一篇 AI前线的文章谷歌BigQuery ML正式上岗,只会用SQL也能玩转机器学习!。正好自己也在力推 StreamingPro的MLSQL。 今天就来对比下这两款产品。

StreamingPro简介

StreamingPro是一套基于Spark的数据平台,MLSQL是基于StreamingPro的算法平台。利用MLSQL,你可以用类似SQL的方式完成数据的ETL,算法训练,模型部署等一整套ML Pipline。MLSQL融合了数据平台和算法平台,可以让你在一个平台上把这些事情都搞定。

运行方式

MLSQL支持Run as Application 和 Run as Service。MLSQL Run as Service很简单,你可以直接在自己电脑上体验: Five Minute Quick Tutorial BigQuery ML 则是云端产品,从表象上来看,应该也是Run As Service。

语法功能使用

BigQuery ML 训练一个算法的方式为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE OR REPLACE MODEL flights.arrdelay
OPTIONS
 (model_type='linear_reg', labels=['arr_delay']) AS
SELECT
 arr_delay,
 carrier,
 origin,
 dest,
 dep_delay,
 taxi_out,
 distance
FROM
 `cloud-training-demos.flights.tzcorr`
WHERE
 arr_delay IS NOT NULL

BigQuery ML 也对原有的SQL语法做了增强,添加了新的关键之,但是总体是遵循SQL原有语法形态的。

完成相同功能,在MLSQL中中的做法如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select arr_delay, carrier, origin, dest, dep_delay,
taxi_out, distance from db.table 
as lrCorpus;

train lrCorpus as LogisticRegressor.`/tmp/linear_regression_model`
where inputCol="features"
and labelCol="label"
;

同样的,MLSQL也对SQL进行扩展和变更,就模型训练而言,改变会更大些。对应的,训练完成后,你可以load 数据查看效果,结果类似这样:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
+--------------------+--------+--------------------+-------------------+-------+-------------+-------------+--------------------+
|           modelPath|algIndex|                 alg|              score| status|    startTime|      endTime|         trainParams|
+--------------------+--------+--------------------+-------------------+-------+-------------+-------------+--------------------+
|/tmp/william/tmp/...|       1|org.apache.spark....|-1.9704115113779945|success|1532659750073|1532659757320|Map(ratingCol -> ...|
|/tmp/william/tmp/...|       0|org.apache.spark....|-1.8446490919033698|success|1532659757327|1532659760394|Map(ratingCol -> ...|
+--------------------+--------+--------------------+-------------------+-------+-------------+-------------+--------------------+

在预测方面,BigQuery ML语法如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT * FROM ML.PREDICT(MODEL flights.arrdelay,
(
SELECT
 carrier,
 origin,
 dest,
 dep_delay,
 taxi_out,
 distance,
 arr_delay AS actual_arr_delay
FROM
 `cloud-training-demos.flights.tzcorr`
WHERE
 arr_delay IS NOT NULL
LIMIT 10))

ML指定模型名称就可以调用对应的预测函数。在MLSQL里,则需要分两步:

先注册模型,这样就能得到一个函数(pa_lr_predict),名字你自己定义。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
register LogisticRegressor.`/tmp/linear_regression_model` as pa_lr_predict options
modelVersion="1" ;

接着就可以使用了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select pa_lr_predict(features) from lrCorpus limit 10 as predict_result;

和数据平台集成

BigQuery ML 也支持利用SQL对数据做复杂处理,因此可以很好的给模型准备数据。MLSQL也支持非常复杂的数据处理。

除了算法以外

“数据处理模型”以及SQL函数

值得一提的是,MLSQL提供了非常多的“数据处理模型”以及SQL函数。比如我要把文本数据转化为tfidf,一条指令即可:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-- 把文本字段转化为tf/idf向量,可以自定义词典
train orginal_text_corpus as TfIdfInPlace.`/tmp/tfidfinplace`
where inputCol="content"
-- 分词相关配置
and ignoreNature="true"
and dicPaths="...."
-- 停用词路径
and stopWordPath="/tmp/tfidf/stopwords"
-- 高权重词路径
and priorityDicPath="/tmp/tfidf/prioritywords"
-- 高权重词加权倍数
and priority="5.0"
-- ngram 配置
and nGram="2,3"
-- split 配置,以split为分隔符分词,
and split=""
;

-- lwys_corpus_with_featurize 表里content字段目前已经是向量了
load parquet.`/tmp/tfidf/data` 
as lwys_corpus_with_featurize;

支持自定义实现算法

除了MLSQL里已经实现的算法,你也可以用python脚本来完成自定义算法。目前通过PythonAlg模块支持SKlearn, Tensorflow, Xgboost, Fasttext等众多python算法框架。Tensorflow则支持Cluster模式。具体参看这里MLSQL自定义算法

部署

BigQuery ML 和MLSQL都支持直接在SQL里使用其预测功能。MLSQL还支持将模型部署成API服务。具体做法超级简单:

  1. 单机模型运行StreamingPro.
  2. 通过接口或者配置注册算法模型 register NaiveBayes./tmp/bayes_modelas bayes_predict;
  3. 访问预测接口
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://127.0.0.1:9003/model/predict? pipeline= bayes_predict&data=[[1,2,3...]]&dataType=vector

MLSQL 可以实现end2end模式部署,复用所有数据处理流程。更多参看MLSQL部署

模型多版本管理

训练时将keepVersion="true",每次运行都会保留上一次版本。具体参看模型版本管理

多个算法/多组参数并行运行

如果算法自身已经是分布式计算的,那么MLSQL允许多组参数顺序执行。比如这个:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
train data as ALSInPlace.`/tmp/als` where
-- 第一组参数
`fitParam.0.maxIter`="5"
and `fitParam.0.regParam` = "0.01"
and `fitParam.0.userCol` = "userId"
and `fitParam.0.itemCol` = "movieId"
and `fitParam.0.ratingCol` = "rating"
-- 第二组参数    
and `fitParam.1.maxIter`="1"
and `fitParam.1.regParam` = "0.1"
and `fitParam.1.userCol` = "userId"
and `fitParam.1.itemCol` = "movieId"
and `fitParam.1.ratingCol` = "rating"
-- 计算rmse     
and evaluateTable="test"
and ratingCol="rating"
-- 针对用户做推荐,推荐数量为10  
and `userRec` = "10"
-- 针对内容推荐用户,推荐数量为10
-- and `itemRec` = "10"
and coldStartStrategy="drop"

这是一个协同推荐的一个算法,使用者配置了两组参数,因为该算法本身是分布式的,所以两组参数会串行运行。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-- train sklearn model
train data as PythonAlg.`${modelPath}` 

-- specify the location of the training script 
where pythonScriptPath="${sklearnTrainPath}"

-- kafka params for log
and `kafkaParam.bootstrap.servers`="${kafkaDomain}"
and `kafkaParam.topic`="test"
and `kafkaParam.group_id`="g_test-2"
and `kafkaParam.userName`="pi-algo"
-- distribute training data, so the python training script can read 
and  enableDataLocal="true"
and  dataLocalFormat="json"

-- sklearn params
-- use SVC
and `fitParam.0.moduleName`="sklearn.svm"
and `fitParam.0.className`="SVC"
and `fitParam.0.featureCol`="features"
and `fitParam.0.labelCol`="label"
and `fitParam.0.class_weight`="balanced"
and `fitParam.0.verbose`="true"

and `fitParam.1.moduleName`="sklearn.naive_bayes"
and `fitParam.1.className`="GaussianNB"
and `fitParam.1.featureCol`="features"
and `fitParam.1.labelCol`="label"
and `fitParam.1.class_weight`="balanced"
and `fitParam.1.labelSize`="26"

-- python env
and `systemParam.pythonPath`="python"
and `systemParam.pythonParam`="-u"
and `systemParam.pythonVer`="2.7";

上面这个则是并行运行两个算法SVC/GaussianNB。因为每个算法自身无法分布式运行,所以MLSQL允许你并行运行这两个算法。

总结

BigQuery ML只是Google BigQuery服务的一部分。所以其实和其对比还有失偏颇。MLSQL把数据平台和算法平台合二为一,在上面你可以做ETL,流式,也可以做算法,大家都统一用一套SQL语法。MLSQL还提供了大量使用的“数据处理模型”和SQL函数,这些无论对于训练还是预测都有非常大的帮助,可以使得数据预处理逻辑在训练和预测时得到复用,基本无需额外开发,实现端到端的部署,减少企业成本。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.07.27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
为什么去开发一个MLSQL
第一个,算法的着眼点是,用最快速的方式清洗一些数据出来,然后接着建模训练,评估预测效果,之后再重复清洗数据,再试验。因为很多算法工程师都是Python系的,对他们来说,最简单的方式自然是写python程序。一旦确认清洗方式后,这种数据清洗工作,最后研发工程师还要再重新用Spark去实现一遍。那么如果让算法工程师在做数据清洗的时候,直接使用PySpark呢?这样复用程度是不是可以有所提高?实际上是有的。但是算法工程师初期用起来会比较吃力,因为PySpark的学习成本还是有的,而且不小。
用户2936994
2018/08/27
6910
为什么去开发一个MLSQL
Your Guide to Python with MLSQL Stack (二)
In the previous post Your Guide to NLP with MLSQL Stack (一), we already have known how to build a RandomForest model to classify text content. The TF/IDF, RandomForest are all built-in algorithms and implemented by Java. In this post, we will show you how to use Python to do the same job.
用户2936994
2019/05/14
5490
Your Guide to Python with MLSQL Stack (二)
写给【工程同学】的MLSQL机器学习教程
http://qwone.com/~jason/20Newsgroups/20news-19997.tar.gz
用户2936994
2022/04/25
3640
写给【工程同学】的MLSQL机器学习教程
MLSQL解决了什么问题
在谈MLSQL解决了什么问题之前,我们先提一个“数据中台”的概念。什么是数据中台呢?数据中台至少应该具备如下三个特点:
用户2936994
2018/12/28
9280
MLSQL解决了什么问题
1、项目难以重现,可阅读性和环境要求导致能把另外一个同事写的python项目运行起来不得不靠运气
用户1332428
2018/07/30
8200
Your Guide to NLP with MLSQL Stack (一)
MLSQL stack supports a complete pipeline of train/predict. This means the following steps can be in the same script:
用户2936994
2019/05/15
5790
算法训练和模型部署如何避免多次重写数据预处理代码
前段时间,我们对接算法的工程师哭丧的和我说,模型生成后一般都要部署成API的形态对外提供服务,但是算法工程师并没有提供如何将一条数据转化特征向量的方法,他能拿到的是代码逻辑以及一些“中间元数据”。数据预处理本来就复杂,翻译也是一件极其困难的事情。我解释了这件事情难以解决的原因,但是显然他还是有些失望。
用户1332428
2018/07/30
7780
MLSQL-ET开发指南
MLSQL具备足够灵活的扩展性,能够同时解决 Data + AI 领域的问题。我们提供了大量的插件,方便用户在数据处理、商业分析和机器学习的不同场景中使用 MLSQL。这些插件类型包括: DataSource、ET、Script、App,我们都可以灵活的通过离线或者线上的方式注册到 MLSQL Engine 中使用。 在 MLSQL 中,ET(Estimator/Transformer的简称)是一个非常重要的概念。通过 ET,我们可以完成非常多的复杂任务。包括:
用户2936994
2022/01/07
7370
MLSQL-ET开发指南
新一代AI平台-MLSQL ,加入开源社区吧!
MLSQL社区希望人人都能够参与进来。开源应该是普惠的,这种普惠应该是在价值的发挥上,以及社区的参与上。我们认为积极的社区参与体现在如下点:
木东居士
2020/04/26
1K0
新一代AI平台-MLSQL ,加入开源社区吧!
MLSQL拥抱BigDL,轻轻松松无编码玩深度学习
原谅我,前半句是真的,后半句是噱头,但是真的很简化了。 MLSQL已经有一个相对来比较完善的Python Runtime,细节可以参看这篇文章,所以玩深度学习是很容易的,不过需要你提供一段tensorflow代码或者项目。
用户2936994
2018/10/15
4640
Your Guide to DL with MLSQL Stack (3)
This is the third article of Your Guide with MLSQL Stack series. We hope this article series shows you how MLSQL stack helps people do AI job.
用户2936994
2019/05/17
5540
MLSQL解决了什么问题
在谈MLSQL解决了什么问题之前,我们先提一个“数据中台”的概念。什么是数据中台呢?数据中台至少应该具备如下三个特点:
木东居士
2020/04/26
7680
MLSQL解决了什么问题
MLSQL是如何集成TensorFlow Cluster的
我们知道MLSQL支持SKLearn,TF等流行的算法框架,不过虽然支持了多个实例同时运行,但其实每个模型都需要跑全部数据。有的时候数据太大,确实是个问题,所以这个时候还是需要引入Cluster的。MLSQL基于Spark,所以问题就变成了如何在Spark里集成TF Cluster了。TFoS 已经实现了类似的功能,但遗憾的是,TFoS完全是用Python编写的,并且每次都需要启动一个新的Spark 实例来运行,overhead 是比较高的。
用户2936994
2018/08/27
3790
MLSQL是如何集成TensorFlow Cluster的
如何实现语法的自解释(MLSQL易用性设计有感)
突然想明白了一件事, 语法应该是自解释的。什么意思呢,就是用户需要有一个学习语法的语法,而这个语法应该极度简单,他只要花上一分钟,甚至依靠直觉就能知道怎么用,透过这个口,以点窥面,让用户具备自主学习其他语法的能力。
用户2936994
2018/09/29
5090
如何实现语法的自解释(MLSQL易用性设计有感)
MLSQL如何支持部署SKLearn,Tensorflow,MLLib模型提供API预测服务
部署成API服务时,除了要把raw数据特征化成向量外,研发还要想着怎么加载模型,产生模型的框架五花八门,比如Tensorflow,SKlearn,Spark MLllib等每个框架都有自己的模型格式。在我司,有一次用Sklearn研发了一个模型,研发资源比较紧张,没办法,算法同学治好自己用Python flask搭建了一个API,然后部署成微服务(多实例来解决并发能力)。
用户2936994
2018/08/27
8410
写给【算法同学】的MLSQL机器学习教程
http://qwone.com/~jason/20Newsgroups/20news-19997.tar.gz
用户2936994
2022/04/25
6680
写给【算法同学】的MLSQL机器学习教程
MLSQL 对Python的支持之路
Python是做机器学习框架一定要支持的。MLSQL很早就支持集成Python脚本做模型的训练和预测。
用户2936994
2018/10/11
7280
使用LIME解释各种机器学习模型代码示例
机器学习模型变得越来越复杂和准确,但它们的不透明性仍然是一个重大挑战。理解为什么一个模型会做出特定的预测,对于建立信任和确保它按照预期行事至关重要。在本文中,我们将介绍LIME,并使用它来解释各种常见的模型。
deephub
2023/11/06
6220
使用LIME解释各种机器学习模型代码示例
Spark整合Ray思路漫谈(2)
首先,大家可以理解为k8s已经解决一切了,我们spark,ray都跑在K8s上。但是,如果我们希望一个spark 是实例多进程跑的时候,我们并不希望是像传统的那种方式,所有的节点都跑在K8s上,而是将executor部分放到yarn cluster. 在我们的架构里,spark driver 是一个应用,我们可以启动多个pod从而获得多个spark driver实例,对外提供负载均衡,roll upgrade/restart 等功能。也就是k8s应该是面向应用的。但是复杂的计算,我们依然希望留给Yarn,尤其是还涉及到数据本地性,然计算和存储放到一起(yarn和HDFS通常是在一起的),避免k8s和HDFS有大量数据交换。
用户2936994
2022/07/21
9860
Spark整合Ray思路漫谈(2)
SQL脚本实现算法模型的训练,预测
搜索团队正好需要计算一些词汇的相似性,这个用Word2Vec是很方便的。于是我立马安排算法团队帮个忙弄下。但回头想想,因为这么点事,打断了算法手头的工作,这简直不能忍。
用户2936994
2018/08/27
1.1K0
SQL脚本实现算法模型的训练,预测
相关推荐
为什么去开发一个MLSQL
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验