greenplum存储过程_「揭秘GP」Greenplum的⼈⼯智能应⽤
场景:MADlib。。。
Pivotal Greenplum —— 全世界⾸个开源、多云数据平台,专为⾼级分析⽽打造。作为⼀个开放的数据计算平台,它集成了对数据进⾏挖掘和分析的⾼级功能,通过这些功能,⽤户可以直接在Greenplum数据库⾥使⽤⾼级分析算法,对数据进⾏分析和处理。 本篇⽂章将从最近较热的⼈⼯智能应⽤场景说起,详细为⼤家介绍如何运⽤ Greenplum 的内置算法进⾏机器学习,帮助企业或⽤户从1到N,快速处理分析海量数据,获得⾏业洞察。 ⾸先来讲 Greenplum,我相信⼤家对 Greenplum 多少有些了解。Greenplum 是⼀个MPP架构的分布式数据库,其特点是可以做⾮常⼤规模的数据计算,它可以在⼏百个节点的服务器规模的集内做数据的拓展,并且可以在PB级,就是⼀千个T或者⼏千个T的数据容量上,做快速的数据存储和计算。
传统来讲,它是⼀个数据库,但实质上 Greenplum 不只是⼀个数据库,因为我们在库内集成了很多⾼级分析的功能。这些⾼级分析的功能,可以使⽤户更⽅便的使⽤数据,因为数据本⾝要进⾏挖掘才能产⽣价值,对于传统的友商,⽐如说像 Oracle、MySQL 或者SQLServer 这样的数据库产品来讲,它可能只是⼀个数据库,您只能对数据进⾏传统的,基于SQL的分析。但在 Greenplum,作为⼀个开放的数据计算平台,我们在库内集成了⾮常多的数据挖掘和分析功能,通过这些功能,您不再需要把数据从库内拿出来,直接在Greenplum 数据库⾥就可以使⽤⾼级分析算法,对数据进⾏分析和处理。
在 Greenplum 内部我们集成了对地理信息的处理算法包、对⽂本处理的组件、对 Python 或者 R 等⼀些数据科学家使⽤的算法包、图计算算法包以及机器学习的算法包等等。今天重点要介绍的就是 Greenplum 库内集成的机器学习算法包和⽂本处理组件。通过这种库内的集成算法,客户可以直接在库内对数据进⾏挖掘,不⽤把数据搬进搬出数据库,从⽽提⾼数据的使⽤效率,降低数据挖掘的成本。
⽬前 Pivotal 研发⼈员正在试图实现对集成深度学习算法库内集成,接下来我们⼀起看下 Greenplum ⽬前在对机器学习领域的已有功能以及正在研发的路线图。
可扩展的机器学习算法库:MADlib
在 Greenplum ⾥⾯集成的基于机器学习或者⼈⼯智能分析的算法包,叫 MADlib。您也许听说过 MADlib 扩展包,这个扩展包已经是Apache 基⾦会顶级开源项⽬,这个组件⾥⾯集成了⼤量的基于传统数学分析统计的算法、图计算的算法以及⼀些常见的机器学习的算法。
MADlib 可扩展的机器学习算法库hg(scn)2
红外线烘干箱
这个算法库直接在库内集成,您可以直接到 的⽹站上下载,然后在 Greenplum 或者 Postgres 数据库⾥部署。因为Greenplum 是跟 Postgres 社区是深度整合的,所以我们这个 MADlib 算法库会提供 Postgres 和 Greenplum 的版本。
MADlib 的发展历程
简单说⼀下 MADlib 的发展历程。 MADlib 是 Pivotal 从2011年就开始的产研结合项⽬,公司跟UC伯克利⼤学的 Hellerstein 教授⼀起合作开发的。到今天为⽌,包括 UC伯克利、斯坦福、维斯康⾟、佛罗⾥达⼤学等众多知名⾼校中的很多教授或科研⼈员,都加⼊了这个项⽬,为它做出持续的贡献,因此也是⼀个⾮常好的产研结合案例。
⽬前,我们已经实现的在库内集成的算法包括哪些呢?在机器学习⽅⾯,有监督学习算法,⽐如⽀持向量机;回归类的算法,⽐如逻辑回归、线性回归、聚类;树型模型,⽐如随机森林、决策树等。现在的 MADlib1.5 版本⾥,已经完全集成上述算法可以直接接下载并在库内运算。
MADlib 算法库
除了机器学习算法,MADlib 还包括 Graph 处理,⽐如最短路径,图形直径等等算法,此外还有⼀些效⽤函数、线性求解,或者传统的统计分析类的汇总函数、统计分析函数、交叉验证选型函数,都在库内集成,⾮常⽅便。
如果您之前使⽤过相关机器学习算法,可能会⽤到随机森林或者决策树这样的模型,或者⽤ Python 的库函数包,⽤的时候需要把存储在数据库⾥(如Oracle)的数据抽出来,抽取到⼀个⽂本或者图形化⼯具⾥⾯,然后再⽤ Python 程序对数据进⾏处理。有了这个算法库之后,就不需要把数据来回倒腾,直接把数据存在 Greenplum ⾥⾯,在 Greenplum ⾥⾯使⽤这些算法库,可以直接对这些数据进⾏模型训练、预测或者是评估操作,会⼤⼤简化操作过程。
此外我们整个算法都是集成在 SQL 接⼝⾥⾯的,可以⾮常⽅便的使⽤ SQL 语句,像调⽤函数⼀样来调⽤这些模型的训练,可以直接把您数据表的名字作为⼀个参数,您要分析的数据列也作为⼀个参数,那些模型需要调整的参数作为参数直接传到函数⾥⾯,然后直接⽤ SQL 语法就可以完成训练,使⽤起来⾮常简便,学习成本低。
1+1>2:MADlib + Greenplum 的优势
接下来您可能会问,MADlib 加上 Greenplum 的优势到底是什么?传统来讲,这些算法都是公开提出的⼀些 paper,经过漫长⼯业界的使⽤,形成了算法库,有 Python 算法库,有R算法库,包括 MADlib 也是⼀种算法库。包括神经⽹络、随机森林的模型,都是⼋九⼗年代的算法,最终进⾏⼯业化落地的产品。您可能做了很多 Python ⽅⾯的编程。那么⽤ MADlib 和 Greenplum 究竟有什么样的优势呢?
⾸先,Greenplum 是⼀个MPP架构的分布式计算的框架,Greenplum + MADlib 之后,就等于我们在 MADlib 的基础上把 MADlib 放到了⼀个分布式计算框架的⾥⾯,这样做的好处就是我们可以并发对很⼤规模的数据进⾏模型训练或者统计分析计算。⽽在⼀个单机分析体系⾥,是没有办法实现的。通过这样的结合,算法并发度更好,因为作为 Greenplum 来讲,我们的数据是分散存储在不同节点上的,⼀些算法也可以在不同的节点上对部分数据进⾏计算、训练,再把最后的结果汇总后返回,这样就会有⼀个⾮常好的并发度和扩展性。
这两个功能可以使我们获得更好的预测精度。因为在做模型训练的时候,如果没有像Greenplum + MADlib 这样的架构的话,就只能做采样模型训练,不能使⽤全量数据。⽐如您有⼀百亿条数据,可能训练模型的时候只能使⽤其中的⼀百万或者⼀千万条数据做训练,然后再⽤这个模型去对⼀百亿条数据进⾏预测,这个模型和预测的结果肯定准确度不如有条件做⼀百亿条训练出来的模型那么准确。
我们在 MADlib + Greenplum 的架构下⾯,由于分布式存储、分布式计算框架,您可以把数据直接在 Greenplum 的分布式存储计算结构⾥⾯进⾏模型训练,也就是说可以⽤全量数据进⾏模型训练,这样⼀来预测的精度肯定会⽐⽤部分采样数据⾼得多。这就是我们说的,如果采⽤ MADlib + Greenplum 分析平台可以得到的好处。
前⾯我们也提到了很多算法,⽽传统的机器学习的算法,⽐如向量机或者随机森林等算法,在CPU上都可以得到很好的模型训练。但对于⼀些深度学习的算法,在CPU上已经没有办法很好的⽀持这种算法的模型的训练了,包括⼀些预测。因为神经⽹络的算法需要消耗⼤量的算⼒,需要⼤量的计算节点同时⼯作,才能够满⾜这种计算的要求,所以我们在 Apache MADlib1.5的版本上⾯,主要是集成了在CPU上能够很好处理的算法。
Greenplum ⽀持的数据科学分析算法
还有⼀部分是深度学习的算法,可能需要在基于GPU的计算框架下才能够发挥它的优势,或者说才能真正跑起来。我们正在做的 Apache MADlib2.0 ⾥,就在试图把这些深度学习的算法也集成到 MADlib 库⾥边。⽐如卷积神经⽹络、循环神经⽹络,长短期记忆的模型,⽣成式的对抗⽹络等模型。⽽为了更好的⽀持这些算法,还我们会在整个计算框架上有⼀些调整从⽽来实现GPU加速等,这些是我们⽬前研发的重点⽅向。
⼈⼯智能算法概览
下⾯跟⼤家介绍⼀下⼈⼯智能和机器学习的关系图谱。⼈⼯智能是⼀个⾮常⼤的范畴,它可能包括诸多领域的⾼深理论。⽽⽬前现在在⼯业界和IT⾏业能够落地实现的,主要是指机器学习,通过机器学习实现部分⼈⼯智能应⽤的⽅法,机器学习仅仅是⼈⼯智能的⼀部分实现。机器学习包括传统的机器学习,像前⾯提到的随机森林、树型、向量机、线性回归、逻辑回归等等上世纪提出的⼀些算法的模型,以及近些年提出的深度学习算法。仓库管理流程
⼈⼯智能算法概览
燃烧匙
深度学习算法是试图模仿⽣物⼤脑的⼯作原理,⼤脑⼯作原理⾥有很多神经元,有⼀层⼀层的⽹络,通过输⼊、输出,以及中间很多层级的⽹络处理,让每⼀层的输出是基于上⼀层的输⼊来计算得到分层次学习的概念,可能算法会⾮常复杂。
深度学习是机器学习的⼀部分,机器学习是⼈⼯智能的⼀部分,⽽我们在做数据分析或者数据挖掘的时候,管⾃⼰叫数据科学家或者数据分析员。数据科学⾥⾯使⽤了很多深度学习的算法和机器学习的算法,包括其他⼈⼯智能领域的传统数据统计分析的算法和⽅法论。包括Pivotal也有很好的数据科学团队,来帮助您怎么样⽤、⽤什么样的模型、什么样的⽅式更好的来做数据的挖掘和创作。
常见深度学习算法
常见的深度学习算法有多层感知器(MLP),MLP是上世纪90年代的算法模型,它是⼀个最初级的浅层的神经⽹络模型,当时该模型的整个计算框架和理论模型被向量机模型逐渐取代,MLP也不能叫完全的深度学习。但它的确是⼀个模拟⼈脑⼯作的⽅式,是⼀个浅层的神经⽹络的算法。随着这⼏年深度学习慢慢⽕热起来,MLP也逐渐重新回到⼈们的视野中。
此外,递归神经⽹络和卷积神经⽹络是⽬前⽐较常见的深度学习算法,卷积神经⽹络在图像识别领域,主要做⼀些模式的匹配。递归神经⽹络的算法,主要⽤于语义的分析、⾃然语⾔处理⽤得⽐较多。前⾯我们讲的长短期记忆模型,也是对递归神经⽹络算法的⼀个加强。
⽬前,数据挖掘分析来说,深度学习算法在这些领域,⽐⽅说对⾃然语⾳的识别,包括对视觉处理,对图像识别、模式匹配,包括对视频流的建模和处理,包括对翻译⾃然语⾔语义的分析,以及对⽣物学的预测和探索,会应⽤得⽐较⼴泛。
但是所有这些算法并不是每⼀个领域都可以拿来就⽤的,它只是⼀个⼯具,⼤家需要根据不同的领域、不同的数据类型、不同的应⽤来选择。⾄于说怎么⽤这个⼯具,⽐如把语⾳识别这样的业务处理好,其实还是需要很多的打磨。
采⽤GPU加速的数据库实现⽅式
前⾯我们提到的深度学习算法,很多是基于⼀个前提的,即现在的 CPU 处理很难满⾜深度学习算法的算⼒要求,因为深度学习算法很多程度上需要⽤⼤量的数据去训练模型,这样这个模型才能更好的学习或者预测的更精确。⼤量的数据训练就不是 CPU 擅长的⼯作⽅式,CPU 的⼯作⽅式是⾯向延时的,要求延时⾮常低。⽽ GPU 的⼯作⽅式是⾯向吞吐量的,通过很⼩的处理核加上很⼩的缓存,进⾏⼤量的相对简单的数据计算。所以说深度学习算法很多时候是依赖于 GPU 加速的⽅式,才能很好的进⾏训练和使⽤。
采⽤GPU加速的数据库实现⽅式
加速所有查询的性能 :
通常都是从数据底层实现的彻底改变。
例如:Kinetica, MapD, SQream, Blazegraph, BlazingDB, Brytlyt, PG-Strom
针对特定深度学习算法的加速 :
在现有数据库基础上对特定算法的扩展,对企业来说更容易适应。
例如:Greenplum with Apache MADlib
因此在异构计算⽅⾯,其实也有不同的路径。包括现在基于GPU加速的内存数据库产品,通常从整个数据库的底层算法开始做GPU加速。通过⽤GPU对⼤批量数据的同时的计算,来加快数据处理的过程,是对从下⾄上整个数据库的完全的改造。⽐如SQream,MapD等等基于GPU的数据库产品。
iesp-144还有⼀种是现在Pivotal的想法,在现有的数据库基础上对特定的算法进⾏GPU加速扩展,怎么说呢?就是对传统的SQL、⽐如传统的哈希等,因为其性能已经在很⼤程度上满⾜了企业级应⽤的要求性能,CPU的算⼒上已经⾜够了。但是对于深度学习的算法,CPU是没办法满⾜算⼒要求的,所以我们就针对Apache MADlib2.0⾥⾯的深度学习算法,对这些特定的深度学习算法进⾏GPU的加速。通过这样⼀种组合⽅式,能够给⽤户提供更好的体验,⽽且整个适应的过程和成本都是最低的。因为⼀般的业务或者⾮深度学习类的业务,还是跑在CPU的计算的平台上⾯。⽽对深度学习的算法,是跑在GPU新的算⼒平台上⾯的。通过这样⼀种结合的⽅式,就可以提供更加强⼤的计算平台给到企业客户。
常规训练深度学习算法的模型是这么⼀个架构,会在⼀台机器上插多块GPU的处理卡,这是常规进⾏深度学习算法训练的体系架构。
Greenplum现在的架构是,没有GPU卡,但是是⼀个MPP的架构,存储、CPU都可以通过MPP算法把⼀个⼤的集整合起来。如果把MPP架构和GPU的算⼒整合起来,会是什么效果呢?那就是在集内部,每⼀台节点上都可以插⼀块到多块GPU,⼤家可以想象⼀下,如果是这样⼀种架构的话,能够
进⾏多⼤规模的深度学习的模型的训练,或者预测。对客户来讲,包括对深度学习整个算法体系来讲,可能都是⼀个⾮常好的平台架构,可以直接在库内对这些深度学习算法,进⾏全量数据的加速的模型训练、预测、评估的整套过程。
⼤规模集计算
当然这个是我们现在正在研发、正在做的部分。在实现了以上想法之后,我们可以通过⽤对库内内置的R和Python这样的语⾔,直接对GPU进⾏⼀些处理,深度学习算法直接把这些负载分配到GPU上,⽽对传统的数据库操作还在CPU⾥计算,这样的体系架构才是值得期待的。即在⼀个⾮常⼤的规模上进⾏扩展的计算,⼤规模集计算的情况下,以后的想象空间是⾮常诱⼈的。
当前Pivotal在深度学习库内挖掘这部分的主要研发⽅向是研究在MADlib⾥⾯实现使⽤GPU加速的深度学习算法在Greenplum⾥⾯落地。尤其是Keras,Keras是⼀个算法库,是跑在Tensorflow上⾯的算法库、算法包,我们希望把Keras⾥⾯的这些算法能够集成到MADlib2.0⾥⾯去,同时因为Keras这些深度学习算法真的需要GPU加速才能很好的使⽤,毕竟GPU算⼒跟CPU还是有量级上的区别。我们需要把Keras集成到MADlib产品⾥⾯去并通过GPU加速它的落地。
我们⽬前也可以在Greenplum⾥⽤Tensorflow或者keras的算法。⽐如您可以直接把Tensorflow和keras装到Greenplum⾥⾯,⽤Python来调算法库⾥的内容,但是可能有些算法是跑不出来的,因为没有GPU加速,并且很多算法没有办法进⾏分布式计算,还需要后续算法的优化。
我们研发的⽅向会有两个主题,⼀个是在真的需要⼤量数据做建模和分析的时候,需要把keras⾥⾯相应的⼀些算法做⼀个分布式的处理,这样就可以把算⼒分配到整个集上去,也是前⾯说的,实现⼀个全量数据或者⼤量数据处理的⽅式。
当前的研发⽅向
积极探索在 madlib 中实现通过 GPU 加速的深度学习算法在 Greenplum 中落地的可能。
Keras 是当前⼯作的重点。
主题:
分布式的算法模型
并发数据的算法模型
此外,另⼀个是需要并发性的,⽐如有的数据可以按照国家或者⼀定的字段进⾏分组,可以建⽴很多个模型同时对不同的数据进⾏处理,每个模型可能放在⼀个节点上去做。其实这两块都是可能会对当前正在做的⽅向。
前⾯我们讲述的都是 MADlib 这部分,集成了机器学习的机器学习、数据分析的算法库,⾮常简便易⽤。
辐照灭菌设备结构化分析与⾮结构化分析的完美结合:GPText
接下来为⼤家介绍GPText产品,GPText产品是在Greenplum⾥可以直接内置在库内的对⾮结构化的⽂本进⾏快速索引和检索的组
件,GPText集成了solr⽂本分析引擎,把结构化分析和⾮结构化分析完美的结合在⼀起,可以通过SQL对⾮结构化⽂本进⾏快速的检索和索引。
GPText SQL 数据仓库 + ⽂本分析