会 SQL 就能搞定 AI!蚂蚁金服重磅开源机器学习工具 SQLFlow

5 月 6 日,在QCon 全球软件开发大会(北京站)2019上,蚂蚁金服副 CTO 胡喜正式宣布开源机器学习工具 SQLFlow,他在演讲中表示:“未来三年,AI 能力会成为每一位技术人员的基本能力。我们希望通过开源 SQLFlow,降低人工智能应用的技术门槛,让技术人员调用 AI 像 SQL 一样简单。”据介绍,SQLFlow 能够抽象出端到端从数据到模型的研发过程,配合底层的引擎及自动优化,具备基础 SQL 知识的技术人员即可完成大部分的机器学习模型训练及预测任务。SQLFlow 由何而来?它与谷歌发布的 BigQueryML 有何不同之处?蚂蚁金服对于 SQLFlow 未来还有哪些规划?InfoQ 第一时间联系到蚂蚁金服 SQLFlow 项目负责人并进行了采访,本文整理自采访问答。

SQLFlow 的目标是将 SQL 引擎和 AI 引擎连接起来,让用户仅需几行 SQL 代码就能描述整个应用或者产品背后的数据流和 AI 构造。其中所涉及的 SQL 引擎包括 MySQL、Oracle、Hive、SparkSQL、Flink 等支持用 SQL 或其某个变种语言描述数据,以及描述对数据的操作的系统。而这里所指的 AI 引擎包括 TensorFlow、PyTorch 等深度学习系统,也包括 XGBoost、LibLinear、LibSVM 等传统机器学习系统。

SQLFlow 开源项目链接:https://sqlflow.org/sqlflow

SQLFlow 的研发团队认为,在 SQLFlow 和 AI 引擎之间存在一个很大的空隙——如何把数据变成 AI 模型需要的输入。谷歌开源的 TensorFlow 项目开了一个好头,TFX Data Transform 和 feature column API 都是意图填补这个空缺的项目。但是这个空缺很大,是各种 SQL 引擎和各种 AI 引擎的笛卡尔积,远不是 TensorFlow 的这两个子项目就足以填补的,需要一个开源社区才行。要填补好这个空缺,需要先让用户意识到其重要性,这也是蚂蚁金服开源 SQLFlow 的意图之一。

SQLFlow 位于 AI 软件系统生态的最顶端,最接近用户,它也位于数据和数据流软件生态之上。

其实,将 SQL 和 AI 连接起来这个想法并非 SQLFlow 原创。谷歌于 2018 年年中发布的 BigQueryML 同样旨在“让数据科学家和分析师只用 SQL 语言就可以实现流行的机器学习功能并执行预测分析”。除了 Google 的 BigQueryML,微软基于 SQL Server 的 AI 扩展,以及 Teradata 的 SQL for DL 同样旨在连接 SQL 和 AI,让人工智能的应用变得像 SQL 一样简单。而 SQLFlow 与上述各个系统最根本的差异在于:SQLFlow 是开源的,以上系统都不是。

开发 SQLFlow 的初衷

蚂蚁金服和很多互联网公司一样,不同产品背后有很多功能都依赖于 AI,比如用户信用的评估就是一套预测模型。到目前为止,每一个这样的功能的实现,都依赖一个工程师团队开发多个子系统——读取数据库或者在线日志流、这两类数据的 join、各种数据筛选、数据到模型输入(常说的 features)的映射、训练模型、用训练好的模型来做预测。整个过程下来耗时往往以月计,如果加班加点放弃写 unit test 代码,可能缩短到以周记。

以上问题正是 SQLFlow 系统希望替工程师们解决的问题。蚂蚁金服拥有数千数据分析师,他们日常工作用的就是 SQL 语言。虽然数据分析师在互联网行业往往不像用 Python、Java、C++ 的工程师那样醒目,但是在很多有面向商业伙伴的业务的公司里,比如 LinkedIn,他们的贡献和人数都能与工程师相匹敌。SQLFlow 最早的初衷,就是希望解决分析师既要操作数据又要使用 AI、往往需要在两个甚至更多的系统之间切换、工作效率低的窘境。

SQLFlow 旨在大幅提升效率,让上述功能实现所花费的时间进一步缩短到能以日计,甚至以小时计的程度。

要达到这样的效率,必须有一种效率极高的描述工作意图的方式。SQL 是一种典型的描述意图,而不描述过程的编程语言。用户可以说我要 join 两个表,但是不需要写循环和构造 hash map 来描述如何 join 两个表。这个特性使得 SQL 能极大地提升开发效率,这正是 SQLFlow 选择扩展 SQL 语法支持 AI 这条思路的原因。

不过,高效率的背后是更大的工程技术挑战。SQLFlow 需要做到能根据用户的意图,自动生成达到意图的 Python、C++、Go 语言的程序。

SQLFlow 的架构设计

设计目标

在连接 SQL 和 AI 应用这一方向上,业内已有相关工作。开发者可以使用像 DOT_PRODUCT 这样的运算符在 SQL 中编写简单的机器学习预测(或评分)算法。但是,从训练程序到 SQL 语句需要进行大量的模型参数复制粘贴的工作。目前在一些商业软件中,已经有部分专有 SQL 引擎提供了支持机器学习功能的扩展。

  • Microsoft SQL Server:Microsoft SQL Server 支持机器学习服务,可以将 R 或 Python 编写的机器学习程序作为外部脚本运行。
  • Teradata SQL for DL:Teradata 也提供了 RESTful 服务,可以通过扩展的 SQL SELECT 语法调用。
  • Google BigQuery:Google BigQuery 通过引入 CREATE MODEL 语句让用 SQL 实现机器学习成为可能。

但上述已有的解决方案都无法解决蚂蚁金服团队的痛点,他们的目标是打造一个完全可扩展的解决方案。

  • 这一解决方案应与许多 SQL 引擎都兼容,而不是只能兼容特定版本或类型的 SQL 引擎。
  • 它应该支持复杂的机器学习模型,包括用于深度学习的 TensorFlow 和用于树模型的 XGBoost。
  • 能够灵活地配置和运行前沿机器学习算法,包括指定特征交叉,无需在 SQL 语句中嵌入 Python 或 R 代码,以及完全集成超参数估计等。

应对上述挑战的关键在于打造一套 SQL 扩展语法。研发团队首先从仅支持 MySQL 和 TensorFlow 的原型开发开始,后续计划支持更多 SQL 引擎和机器学习工具包。

从 SQL 到机器学习

SQLFlow 可以看作一个翻译器,它把扩展语法的 SQL 程序翻译成一个被称为 submitter 的程序,然后执行。 SQLFlow 提供一个抽象层,把各种 SQL 引擎抽象成一样的。SQLFlow 还提供一个可扩展的机制,使得大家可以插入各种翻译机制,得到基于不同 AI 引擎的 submitter 程序。

SQLFlow 对 SQL 语法的扩展意图很简单:在 SELECT 语句后面,加上一个扩展语法的 TRAIN 从句,即可实现 AI 模型的训练。或者加上一个 PREDICT 从句即可实现用现有模型做预测。这样的设计大大简化了数据分析师的学习路径。

此外,SQLFlow 也提供一些基本功能,可以供各种 submitter 翻译插件使用,用来根据数据的特点,推导如何自动地把数据转换成 features。这样用户就不需要在 TRAIN 从句里描述这个转换。


以上这些设计意图在 SQLFlow 的开源代码中都有体现。当然,SQLFlow 开发时间还比较短,仍然存在很多做的不够细致的地方。蚂蚁金服将其开源的另一个目的,就是希望能够和各个 SQL 引擎团队和各个 AI 团队一起打造这座横跨数据和 AI 的桥梁。

基于 Go 语言开发

据介绍,SQLFlow 基于 Go 语言开发,Go 语言的众多优点使其成为了 SQLFlow 研发团队的首选。除了 Go 社区讨论较多的优势以外,以下两点被重点提及:

首先 Go 容易学习却拥有极高的开发效率。它的 keyword 数量比 C 语言还要少,但是描述能力(平均每一行代码能表示的意图)接近 Python。

另一个原因是 Go 的代码库易于长期维护。一项工作用 Python 或者 C++ 来写,会有很多种写法,都能跑。用 Go 来写,往往只有一种写法。这就使得 Go 程序员社区里不会有很多风格共存,也就不需要 Google C++ style 这样的代码规范来限制不许用 C++ 的哪些特性,也不会像 Python 代码开发时那样,各种代码风格之间形成鄙视链,在 code review 过程里带来不必要的争执。

与阿里 PAI 的关系

SQLFlow 研发团队认为,AI 和机器学习的生态可以分为很多层。其中 TensorFlow、PyTorch、XGBoost、LibLinear 这些系统位于最底层,距离终端用户最远,只有很硬核的用户才能熟练掌握和使用,而这部分用户在互联网从业者里占的比例较小。

SQLFlow 和阿里推出的机器学习平台 PAI 均位于生态的最顶层,需要调用下层的技术栈,二者均直接面对最终用户,而这些用户中可能有大量并不具备 AI 背景知识。

PAI 系统通过先进的图形用户界面来解决 AI 难理解、难应用的挑战——比如托拽基础 AI 组件来构造复杂的模型和数据流。

SQLFlow 则通过写 SQL 程序的方式来实现这一目标。有能写下来的程序,就容易存档,容易 Code Review,容易分享知识,容易集思广益,容易高效率迭代。此外,敲键盘写程序比动鼠标拖拽快。

SQLFlow 项目负责人表示,SQLFlow 和 PAI 都是有意思且有意义的尝试,二者的发展都值得持续观察。

SQLFlow 优化工作

SQLFlow 目前依赖 TensorFlow 等底层引擎来实现训练和预测。为了提升 SQLFlow 在机器学习模型的训练和预测性能,蚂蚁金服有一个团队专门做硬件加速 AI 计算的工作,最近已经有了一些令人惊喜的成绩,希望在不久的将来可以和大家分享细节。另外还有一个兄弟项目专门维护蚂蚁金服对 TensorFlow 的功能扩展,也和性能相关。

SQLFlow 项目负责人表示,训练和预测只是整个 AI 产品功能长长的链条中的两个环节。SQLFlow 这个项目是为解决整个链条构建而打造的,其中有很多环节的耗时比 AI 的训练和预测多得多,因此还有极大的性能提升的空间。比如很多 SQL 引擎并不支持让一个分布式 AI 程序并发读取其中的数据,如果 SQLFlow 能够解决类似的吞吐量限制,AI 的总体效率能提高数倍甚至数十倍。

在对机器学习算法的支持方面,SQLFlow 设计的初衷就是要复用各个 AI 引擎各自的模型库。目前 SQLFlow 支持 TensorFlow Estimator 规范的模型。比如 SQLFlow 扩展语法中 SELECT … TRAIN DNNClassifier … 这个写法,DNNClassifier 就是一个 Python class 的名,在这个例子中是一个派生自 tf.Estimator 的 class。SQLFlow 研发团队也正在做支持 Keras 模型的相关工作,团队也在考虑规范 XGBoost 模型的程序写作,使其可以被 SQLFlow 用户方便地调用。

这些工作背后的思路是希望互联网行业常见的三类技术角色:分析师、研究员、工程师的分工更清晰,从而能更专注发挥各自特长:分析师因为了解数据所以写 SQL,调用 DNNClassifier 这样由研究员用 Python 写的模型;研究员不用操心分布式计算和模型到底是如何被分布式训练(或预测)的,这部分工作留给工程师。与此同时,SQLFlow 作为一种粘合剂,把这三类角色的产出有机结合,以便更加高效地构造产品。

SQLFlow 未来规划

SQLFlow 当前已经能够带来研发效率的提升,但尚不完美,目前 SQLFlow 还存在以下问题有待解决:

第一个问题是 parsing。SQLFlow 目前已经对接 MySQL,正在对接 Hive 和 阿里云上的 MaxCompute,将来还希望能对接更多公司正在使用的 SQL 引擎。这些引擎的 SQL 语法大都符合 SQL 标准,但是总有一些自己独特的扩展,而用户往往不知不觉地用到了这些特点。SQLFlow 希望用户能在已有的 SELECT 语句之后,通过简单地添加一个 TRAIN 或者 PREDICT 从句,即可实现数据和 AI 的互联,这就要求 SQLFlow 支持各个 SQL 引擎独到的语法特点。

第二个问题是数据到 feature 的映射的自动化。目前 SQLFlow 是根据 SQL 字段的类型(INT、FLOAT、TEXT、BLOB)来自动化映射到 feature column API,比如 numeric_column 或者 categorical_column_with_vocabulary 或者 bucketized_column。其实很多 TEXT 字段里存储的信息很复杂,可能是一个 yaml 或者 json,所以需要扫描(至少一部分)数据,才能精准地判断这个映射。类似的,一个 BLOB 字段里可能是 protobuf message 的 encoding,encode 的是一个 TensorFlow 的 tensor。

第三个问题是 AI 引擎。 TensorFlow、PyTorch、XGBoost、LibLinear 这些 AI 引擎的分布式计算能力都有一些问题。TensorFlow 原生支持分布式训练,但不支持容错,一个进程挂了,整个作业就挂了。虽然这还可以通过 checkpointing 解决,但是不容错就不能弹性调度,不能弹性调度就意味着集群利用率可能极差。比如一个有 N 个 GPU 的集群上在运行一个作业,使用了一个 GPU;此时一个新提交的作业要求使用 N 个 GPU,因为空闲 GPU 个数是 N-1,所以这个新的作业不能开始执行,而是得一直等数小时甚至数天,直到前一个作业结束、释放那个被占用的 GPU。这么长时间里,集群利用率 < 1/N。关于这个问题的解决方案,百度 PaddleEDL和阿里集团的XDL做了一些很有益的探索。希望业界把过分集中于 AI 运行时间优化的眼光,分一部分到减少等待时间上。

接下来蚂蚁金服将致力于推动 SQLFlow 在蚂蚁金服业务和蚂蚁金服以外的公司的使用,让 SQLFlow 项目成为整个社区的共同工作,从中收获更多的反馈,引导项目的发展方向,也帮助明确各项工作的优先级。

令 SQLFlow 团队感到欣喜的是,虽然 SQLFlow 刚开源,但目前已经有来自美国和中国几大互联网公司的贡献者参与到社区工作中来。由于每个公司使用的 SQL 引擎不同,如果 SQLFlow 核心团队能提供比较好的数据层抽象,那么来自不同公司的贡献者就能比较容易地把 SQLFlow 适配到自己公司的引擎上。类似的,支持多种 AI 引擎的方式也是如此。

此外,SQLFlow 团队希望各个公司的研究员们能够参与到开源项目中来,分享各自的模型,未来 SQLFlow 会支持各种形式的模型,以便分析师使用。

过去这几年,蚂蚁金服一直积极参与开源社区共建,自 2011 年宣布第一波开源项目以来,开源项目数量每年皆有增长。目前蚂蚁金服已有 30 多个开源项目,其中,Ant Design 项目已获三万多 Star,有 600 多人参与项目建设,EggJS 和 SOFA 系列也成为了社区热门。

在 SQLFlow 的 GitHub 项目中,蚂蚁金服提供了 SQLFlow 的安装指引以及快速入门的示例,对此项目感兴趣的开发者不妨一试。也欢迎留言反馈你对 SQLFlow 项目的建议和使用感受。


原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/519036.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是 CD 管道?一文告诉你如何借助Kubernetes、Ansible和Jenkins创建CD管道!

作者 | Magalix翻译 | 火火酱&#xff0c;责编 | Carol来源 | 架构师技术联盟封图 | CSDN付费下载于IC photoCI/CD要解决的是什么问题&#xff1f;CI/CD&#xff08;CI全名Continuous Integration&#xff0c;持续集成&#xff1b;CD全名Continuous Deployment&#xff0c;持续…

使用kettle导入数据到ADB for PostgreSQL

Kettle简介 Kettle(现也称为Pentaho Data Integration&#xff0c;简称PDI)是一款非常受欢迎的开源ETL工具软件&#xff0c;主要用于数据整合、转换和迁移。Kettle除了支持各种关系型数据库&#xff0c;HBase MongoDB这样的NoSQL数据源外&#xff0c;它还支持Excel、Access这类…

Android11vivox21刷机包,vivo x21旧版官方固件rom系统刷机包

这是vivo x21旧版官方固件rom系统刷机包&#xff0c;可以做备用&#xff0c;降级可用&#xff01;&#xff01;vivo x21已经提示更新了&#xff0c;如果你的手机更新之后系统没有之前好用的&#xff0c;可以选择降级用&#xff0c;直接完整版的固件rom包下载&#xff0c;解压出…

集结阿里云数据库最强阵容 DTCC 2019 八大亮点抢先看

2019年5月8日-5月10日&#xff0c;由国内知名IT技术社区主办的数据库技术交流盛会——DTCC 2019将在北京新云南皇冠假日大酒店召开。数据风云&#xff0c;十年变迁&#xff0c;DTCC见证并铭记了国内数据库技术的关键成长历程。作为DTCC的老朋友和全球领先的云计算厂商&#xff…

行!看到抖音上Python程序员晒得工资条,我沉默了......

Python上抖音热搜了&#xff1f;作为短视频爱好者最近刷到了一个Python工程师的工资条然后我默默的打开看了然后我默默的关闭了我想这个工资算下来好像也不算高我就去其他渠道搜索了一下相关的Python工作岗位的工资好吧&#xff0c;都是比这个工资更高的&#xff08;拉勾网3.2日…

为什么强烈禁止开发人员使用isSuccess作为变量名

在日常开发中&#xff0c;我们会经常要在类中定义布尔类型的变量&#xff0c;比如在给外部系统提供一个RPC接口的时候&#xff0c;我们一般会定义一个字段表示本次请求是否成功的。 关于这个"本次请求是否成功"的字段的定义&#xff0c;其实是有很多种讲究和坑的&am…

现代IM系统中的消息系统架构 - 模型篇

前言 在架构篇中我们介绍了现代IM消息系统的架构&#xff0c;介绍了Timeline的抽象模型以及基于Timeline模型构建的一个支持『消息漫游』、『多端同步』和『消息检索』多种高级功能的消息系统的典型架构。架构篇中为了简化读者对Tablestore Timeline模型的理解&#xff0c;概要…

必看!Spark 进阶之路之「SparkSQL」入门概述 | 博文精选

作者 | Alice菌责编 | Carol来源 | CSDN 博客封图 | CSDN付费下载于视觉中国在之前的文章中&#xff0c;我们已经完成了对于Spark核心SparkCore的详细介绍。而今天想为为大家介绍的是SparkSQL的概述。什么是Spark SQL&#xff1f;Spark SQL是Spark用来处理结构化数据的一个模块…

Discord 公司如何使用 Cassandra 存储上亿条线上数据

Discord 是一款国外的类似 YY 的语音聊天软件。Discord 语音聊天软件及我们的 UGC 内容的增长速度比想象中要快得多。随着越来越多用户的加入&#xff0c;带来了更多聊天消息。2016 年 7 月&#xff0c;每天大约有 4 千万条消息&#xff1b;2016 年 12 月&#xff0c;每天超过亿…

Android10弹出截屏对话框,Android一个美丽而聪明的警告对话框SweetAlert

由JavaScript启发SweetAlert安卓对话框截图建立使用SweetAlertDialog最简单的方法是将图书馆作为AAR依赖添加到您的构建。Maven的cn.pedant.sweetalertlibrary1.3aar摇篮repositories {mavenCentral()}dependencies {compile cn.pedant.sweetalert:library:1.3}用法秀物质文明S…

shell脚本触发java程序支持传参补跑_01

文章目录一、java程序1. 创建java项目2. 创建包结构3. 创建java类4. 编译5. 编译后的包结构总览二、shell脚本2.1. 创建基础目录2.2. 上传项目到指定目录2.3. 创建基础脚本2.4. 赋予脚本执行权限三、案例测试3.1. 测试不传参数3.2. 测试传参数一、java程序 1. 创建java项目 i…

深度 | API 设计最佳实践的思考

API 是模块或者子系统之间交互的接口定义。好的系统架构离不开好的 API 设计&#xff0c;而一个设计不够完善的 API 则注定会导致系统的后续发展和维护非常困难。 接下来&#xff0c;阿里巴巴研究员谷朴将给出建议&#xff0c;什么样的 API 设计是好的设计&#xff1f;好的设计…

如果你觉得 Git 很迷惑人,那么这份小抄正是为你准备的!

作者 |Maxence Poutord责编 | Carol来源 | 漫话编程封图 | CSDN付费下载于视觉中国如果你觉得 git 很迷惑人&#xff0c;那么这份小抄正是为你准备的&#xff01;请注意我有意跳过了 git commit、git pull/push 之类的基本命令&#xff0c;这份小抄的主题是 git 的一些「高级」…

android 16 登陆,那些年我们一起养过的电子鸡登陆Android平台

看到下面的图片大家有没有眼前一亮的感觉&#xff0c;这不就是我们那些年一起养过电子鸡(电子宠物)嘛&#xff0c;或许现在的孩子们看来根本没什么可玩的&#xff0c;与iPad&#xff0c;PSP,3DS什么的没法比呀。可就是这个简单的玩具却带给了曾经的我们无穷的乐趣&#xff0c;甚…

Apache Cassandra 在 Facebook 的应用

谁说 Facebook 弃用 Cassandra&#xff1f;相反 Facebook 拥有全世界最大的单个 Cassandra 集群部署&#xff0c;而且他们对 Cassandra 做了很多性能优化&#xff0c;包括 Cassandra on RocksDB 以提升 Cassandra 的响应时间。 在 Instagram &#xff08;Instagram是Facebook公…

AI战“疫“之路:​揭秘高精准无感测温系统的全栈AI 技术

在这个全民抗疫的特殊时期&#xff0c;今年的春节返潮来得比往年迟了许多。如今不少企业结束了远程办公&#xff0c;开始陆续复工&#xff0c;一时间&#xff0c;无论是重点防控的机场、火车站&#xff0c;还是学校、企业、社区等密集型场所&#xff0c;都安排了密集的防疫驻扎…

android翻盘效果,行情艰难,Android初中级面试题助你逆风翻盘,每题都有详细答案...

码个蛋(codeegg) 第 905 次推文作者&#xff1a;夜猫少年链接&#xff1a;https://juejin.im/post/5c8211fee51d453a136e36b0Activity篇1、说下Activity生命周期 &#xff1f;参考解答&#xff1a;在正常情况下&#xff0c;Activity的常用生命周期就只有如下7个onCreate()&…

蚂蚁金服开源的机器学习工具 SQLFlow,有何特别之处?

近日&#xff0c;蚂蚁金服副 CTO 胡喜正式宣布开源机器学习工具 SQLFlow&#xff0c;他在大会演讲中表示&#xff1a;“未来三年&#xff0c;AI 能力会成为每一位技术人员的基本能力。我们希望通过开源 SQLFlow&#xff0c;降低人工智能应用的技术门槛&#xff0c;让技术人员调…

阿里云Kubernetes服务上从零搭建GitLab+Jenkins+GitOps应用发布模型的实践全纪录

关于GitOps的介绍&#xff0c;可以参考 GitOps:Kubernetes多集群环境下的高效CICD实践 1. 在 容器服务控制台 创建kubernetes集群 1.1 新建Kubernetes集群&#xff1a; 1.2 新建命名空间gitops 我们将会把gitlab和jenkins全部部署到此命名空间下 2. 创建GitLab应用 &#x…

炸了!看到抖音上Python程序员晒得工资条,我沉默了......

Python上抖音热搜了&#xff1f;作为短视频爱好者,最近刷到了一个Python工程师的工资条&#xff1a;看完后&#xff0c;我相信大家和我一样&#xff0c;what&#xff0c;Python这么时候值钱了&#xff1f;今天就把真实市场环境给揭开&#xff01;Python岗位大厂30K起&#xff1…