:随着大数据的爆发,图数据的应用规模不断增长,现有的图计算系统还存在一定的局限性。阿里巴巴拥有全球最大的商品知识图谱。在丰富的图场景和真实应用的驱动下,阿里巴巴达摩院智能计算实验室研发并开源了全球首个一站式超大规模分布式图计算平台GraphScope。入选中国科协“科技创新中国”平台。本文详细讲解了图计算的原理和应用以及GraphScope的架构设计。1.什么是图计算?图数据对一组对象(顶点)及其关系(边)进行建模,可以直观自然地表示现实世界中的各种实体对象及其之间的关系。在大数据场景中,社交网络、交易数据、知识图谱、交通和通信网络、供应链和物流规划等都是图建模的典型例子。图1是阿里巴巴在电商场景下的图数据,有各种类型的顶点(消费者、卖家、商品、设备)和边(代表购买、查看、评论等关系)。此外,每个顶点都与丰富的属性信息相关联。图1:阿里巴巴电商场景图数据示例现实场景中的此类图数据通常包含数十亿个顶点和数万亿条边。除了规模大之外,这张图的持续更新速度也非常快,每秒可能有近百万次更新。近年来随着图数据应用的不断增长,探索图数据的内在关系以及对图数据进行计算越来越受到关注。根据图计算的不同目标,大致可以分为三类任务:交互式查询、图分析和基于图的机器学习。1.图形交互查询图2:左,金融反欺诈示例;对,图学习的一个例子。在图计算的应用中,业务通常需要以探索的方式查看图数据,以便及时定位一些问题,分析一些深度信息。图2(左)中的(简化)图模型可用于金融反欺诈(信用卡非法套现)的检测。通过使用伪造的标识符,“犯罪分子”可以从银行获得短期信贷(顶点4)。他试图通过虚假购买(边2->3)在商家(顶点3)的帮助下兑现货币。一旦从银行(顶点4)收到付款(边4->3),商家通过他的多个账户将钱(通过边3->1和1->2)返还给“罪犯”姓名。这种模式最终在图上形成一个闭环(2->3->1...->2)。在现实场景中,在线图数据的规模可能包含数十亿个顶点(例如用户)和数千亿到数万亿条边(例如支付交易),整个欺诈过程可能涉及许多实体,包括动态具有各种约束的交易链需要复杂的实时交互分析才能很好地识别。2.图分析图分析计算的研究已经进行了几十年,产生了很多图分析算法。典型的图分析算法包括经典图算法(例如,PageRank、最短路径和最大流)、社区检测算法(例如,最大团/团、通量计算、Louvain和标签传播)、图挖掘算法(例如,频繁集图上的挖掘和模式匹配)。由于图分析算法的多样性和分布式计算的复杂性,分布式图分析算法往往需要遵循一定的编程模型。目前的编程模型是有点中心模型“Think-like-vertex”、基于矩阵的模型和基于子图的模型等。在这些模型下,出现了各种图分析系统,如ApacheGiraph、Pregel、PowerGraph、SparkGraphX、GRAPE等3.基于图的机器学习Node2Vec、LINE等经典GraphEmbedding技术已广泛应用于各种机器学习场景。近年来提出的图神经网络(GNN)将图中的结构和属性信息与深度学习中的特征相结合。GNN可以学习图中任何图结构(例如,顶点、边或整个图)的低维表示,并且生成的表示可以被许多下游图相关的机器学习任务用于分类、链接预测、聚类等。图学习技术已经在许多与图相关的任务上展示了令人信服的性能。与传统的机器学习任务不同,图学习任务涉及图和神经网络的相关操作(见图2右)。图中的每个顶点都使用与图相关的操作来选择它的邻居,并将其邻居的特征与神经网络操作聚合。2、图计算:下一代人工智能的基石不只是阿里巴巴。近年来,图数据和计算技术一直是学术界和工业界关注的热点。特别是图计算系统的性能在过去十年中提高了10-100倍,并且系统的效率还在不断提高,这使得通过图计算加速AI和大数据任务成为可能。事实上,因为图可以非常自然地表达各种复杂类型的数据,并且可以为常见的机器学习模型提供抽象。与稠密张量相比,图可以提供更丰富的语义和更全面的优化功能。此外,图是稀疏高维数据的自然表示,越来越多的图卷积网络(GCNs)和图神经网络(GNNs)研究证明图计算是机器学习的有效补充。性欲和对因果关系的深刻推理等方面将发挥越来越重要的作用。图3:图计算在人工智能的各个领域都有广阔的应用前景。可以预见,图计算将在下一代人工智能的各种应用中发挥重要作用,包括反欺诈、智能物流、城市大脑、生物信息学、公共安全等。、公共卫生、城市规划、反洗钱、基础设施、推荐系统、金融技术和供应链。3.图计算的现状经过多年的发展,针对各种图计算需求,出现了多种系统和工具。比如在交互式查询方面,有图数据库Neo4j、ArangoDB、OrientDB,还有分布式系统和服务JanusGraph、AmazonNeptune、AzureCosmosDB;图分析方面,有Pregel、ApacheGiraph、SparkGraphX、PowerGraph等系统;图学习方面有DGL、pytorchgeometric等。尽管如此,面对丰富的图数据和多样化的图场景,有效利用图计算提升业务效果仍然是一个巨大的挑战:现实生活中的图计算场景多种多样,通常非常复杂,涉及多种类型的图计算。现有系统主要针对特定??类型的图计算任务而设计。因此,用户必须将复杂的任务分解为涉及多个系统的多个作业。可能会有很多额外的开销,例如系统之间的集成、IO、格式转换、网络和存储。大规模图计算的应用开发难度大。为了开发图计算的应用程序,用户通常使用简单易用的工具(例如Python中的NetworkX和TinkerPop)从单机上的小规模图数据开始。然而,对于普通用户来说,将他们的单机解决方案扩展到并行环境来处理大规模图是极其困难的。现有的用于大规模图形的分布式系统通常遵循不同的编程模型,并且缺乏像NetworkX这样的独立库中丰富的即用型算法/插件库。这使得分布式图计算的门槛过高。处理大型图形在规模和效率上仍然受到限制。例如,由于旅游模型的高度复杂性,现有的交互式图查询系统无法并行执行Gremlin查询。对于图分析系统,传统的以点为中心的编程模型使得现有的图级优化技术不再可用。此外,许多现有系统在编译器级别基本上没有优化。下面通过一个具体的例子来看看现有系统的局限性。1示例:论文分类预测数据集ogbn-mag是来自MicrosoftAcademic的数据集。数据包含四类点,分别代表论文、作者、机构、研究领域;有四种类型的边表示这些点之间的关系:作者“撰写”了论文,论文“引用”了另一篇论文,作者“隶属于”一个机构,论文“隶属于”一个研究领域。这些数据自然可以用图表建模。一个用户期望针对2014年到2020年间发表的“论文”在这张图上做分类任务,期望能够根据数据图中论文的结构属性,自身的主题特征,以及kcore、triangle-counting等团聚度,对其进行分类,预测文章的主题类别。其实,这是一个很普通也很有意义的任务。由于考虑了论文的引用关系和论文的主题,这种预测可以帮助研究人员更好地发现该领域潜在的合作和研究热点。我们把这个计算任务分解一下:首先我们需要根据年份过滤论文及其相关的顶点,然后我们需要在这个图上计算kcore,triangle-counting等全图计算,最后将这两个参数组合起来将图上的原始特征放入机器学习框架中进行分类训练和预测。我们发现目前现有的系统不能很好地端到端地解决这个问题。我们只能将多个系统组织成一个pipeline来运行:图4:由多个系统组成的论文分类预测任务。看似解决了,其实这样的流水线方案背后隐藏着很多问题。例如,多个系统相互独立、相互隔离,系统间数据传输需要频繁向磁盘传输中间数据;图分析程序不是声明式语言,没有固定范式;图的规模影响机器学习框架的效率等等,这些都是我们在现实世界的图计算场景中经常遇到的问题。归纳起来,可以归纳为以下三点:图计算问题非常复杂,计算方式多样,解法碎片化。图计算学习难度大、成本高、门槛高。图的规模和数据量大,计算复杂,效率低。为了解决以上问题,我们设计开发了一站式开源图计算系统:GraphScope。4.GraphScope是什么?GraphScope是由阿里巴巴达摩院智能计算实验室开发并开源的一站式图计算平台。GraphScope依托阿里巴巴海量数据和丰富场景,以及达摩院的高水平研究,致力于为图计算在实际生产中面临的上述挑战提供一站式高效解决方案。GraphScope提供了Python客户端,可以方便的连接上下游工作流。具有一站式、开发便捷、性能极致等特点。拥有高效的跨引擎内存管理,业界首次支持Gremlin分布式编译优化,支持算法的自动并行化和动态图更新的自动增量处理,提供企业级场景的极致性能。在阿里巴巴内部和外部的应用中,GraphScope已经证明在几个关键的互联网领域(如风控、电商推荐、广告、网络安全、知识图谱等)实现了重要的新业务价值。GraphScope整合了达摩院的多项学术研究成果,其核心技术曾获得SIGMOD2017最佳论文奖、VLDB2017最佳示范奖、VLDB2020最佳论文提名奖、世界人工智能创新SAIL奖竞赛。关于GraphScope的交互式查询引擎的论文也已经被NSDI2021录用,即将发表。围绕GraphScope的其他研究成果也有十几项发表在该领域的顶级学术会议或期刊上,如TODS、SIGMOD、VLDB、KDD等。1.架构介绍图5:GraphScope系统架构图底层GraphScope是一个分布式内存数据管理系统vineyard[1]。Vineyard也是我们的一个开源项目。它提供了一个高效丰富的IO接口,负责与下层文件系统进行交互。提供高效、高层次的数据抽象(包括但不限于图、张量、向量等),支持管理数据分区、元数据等,为上层应用提供原生的零拷贝数据读取。正是这一点支撑了GraphScope的一站式能力:在跨引擎之间,图数据以分区的形式存在于葡萄园中,由葡萄园统一管理。中间是引擎层,由交互式查询引擎GIE、图分析引擎GAE、图学习引擎GLE组成,我们将在后续章节详细介绍。最上层是开发工具和算法库。GraphScope提供了各种常用的分析算法,包括连通性计算、社区发现以及PageRank、centrality等数值计算算法。算法包未来会不断扩充,在超大规模图上提供兼容NetworkX算法库的算法。分析技巧。此外,它还提供了丰富的图学习算法包,内置支持GraphSage、DeepWalk、LINE、Node2Vec等算法。2.解决问题:论文分类预测借助一站式计算平台GraphScope,我们可以更简单的解决前面例子中的问题。GraphScope提供了一个Python客户端,让数据科学家可以在他们熟悉的环境中完成所有与图计算相关的工作。打开Python后,我们首先需要建立一个GraphScope会话。importgraphscopefromgraphscope.dataset.ogbn_magimportload_ogbn_magsess=graphscope.sesson()g=load_ogbn_mag(sess,"/testingdata/ogbn_mag/")在上面的代码中,我们创建了一个GraphScope会话并加载图形数据。GraphScope是面向云原生的。一个session对应一组k8s资源。会话负责会话中所有资源的申请和管理。具体来说,在用户这行代码后面,session会先请求后端总入口Coordinator的一个pod。Coordinator负责与Python客户端的所有通信,在完成自身初始化后,拉起一组enginepod。这组Pod中的每个Pod都有一个Vineyard实例,它们共同构成一个分布式内存管理层;同时,每个pod拥有三个引擎:GIE、GAE、GLE。管理。当这组pod被拉起并与Coordinator建立稳定连接并完成健康检查后,Coordinator会将状态返回给客户端,告诉用户会话已经拉起成功,资源准备就绪开始图像加载或计算。interactive=sess.gremlin(g)#计算两位作者(id为2和4307)合着的论文数量papers=interactive.execute("g.V().has('author','id',2).out('writes').where(__.in('writes').has('id',4307)).count()").one()首先我们在图ginteractive上创建一个交互式查询对象。该对象在引擎pod中拉出一组交互式查询引擎GIE。那么下面就是一个标准的Gremlin查询语句,用户想查看这个数据中两个特定作者的合作论文。这条Gremlin语句被发送到GIE引擎进行反汇编和执行。GIE引擎由并行Compiler、内存与调度管理、Operator运行时、自适应出行策略、分布式Dataflow引擎等核心组件组成。收到交互式查询语句后,语句会被Compiler拆分,编译成多个运行的算子。然后在分布式数据流模型中驱动和执行这些运算符。在这个过程中,每个持有分区数据的计算节点运行数据流的副本,并行处理这个分区中的数据,并在Gremlin中进行On-demand数据交换,并行执行Gremlin查询。在Gremlin复杂的语法下,遍历策略非常重要,影响查询的并行度。它的选择直接影响资源占用和查询性能。依靠简单的BFS或DFS无法满足现实中的需求。最优的出行策略往往需要根据特定的数据和查询进行动态调整和选择。GIE引擎提供自适应出行策略配置,根据查询数据和拆解的Op和Cost模型选择出行策略,实现高效的算子执行。#提取一个时间范围内发表的子图sub_graph=interactive.subgraph("g.V().has('year',inside(2014,2020)).outE('cites')")#将投影图投影到简单图.simple_g=sub_graph.project_to_simple(v_label="paper",e_label="cites")ret1=graphscope.k_core(simple_g,k=5)ret2=graphscope.triangles(simple_g)#将结果作为新列添加到引文graphsub_graph=sub_graph.add_column(ret1,{"kcore":"r"})sub_graph=sub_graph.add_column(ret2,{"tc":"r"})通过单个视图进行一系列交互查询后,用户通过以上语句启动图分析任务。首先,它通过子图算子根据过滤条件从原始图中提取子图。在这个运算符的背后,交互式引擎GIE执行查询并将结果图写入葡萄园。然后用户在这个新图上提取标记为论文的点和它们之间的边作为参考(引用),并产生一个同构图,并调用GAE的内置算法k-core和三角形计数三角形对它进行分析计算整个图。结果产生后,将这两个结果作为点上的属性加回原图。在这里,借助葡萄园元数据管理和高级数据抽象,通过在原始图上添加新的列转换来生成新的子图,而无需重建整个图的所有数据。GAE引擎的核心继承了获得SIGMOD2017最佳论文奖的GRAPE系统[2]。它由高性能运行时、自动并行化组件、多语言支持SDK等组件组成。上面的例子使用了GAE自带的算法。此外,GAE还支持用户非常简单地编写自己的算法,即插即用。用户基于子图编程的PIE模型编写算法,或者复用已有的图算法,不考虑分布式细节,GAE自动并行化,大大降低了用户分布式图计算的高门槛。目前,GAE支持用户用C++、Python(以后会支持Java)等多种语言编写自己的算法逻辑,在分布式环境下即插即用。GAE的高性能运行时基于MPI,通信、数据排列、硬件特性都经过精心优化,以达到极致的性能。#定义用于学习的特征paper_features=[]foriinrange(128):paper_features.append("feat_"+str(i))paper_features.append("kcore")paper_features.append("tc")#launchalearningengine.lg=sess.learning(sub_graph,nodes=[("paper",paper_features)],edges=[("paper","cites","paper")],gen_labels=[("train","paper",100,(1,75)),("val","paper",100,(75,85)),("test","paper",100,(85,100))])下一步我们首先使用图形学习引擎对论文进行分类。首先,我们将数据中纸节点的128维特征和上一步计算出的kcore和triangles这两个属性配置为训练特征。然后我们从会话中调出图形学习引擎GIE。在GIE中拉取图lg时,我们配置图数据,特征属性,指定是哪种类型的边,并将点集划分为训练集、验证集和测试集。从graphscope.learning.examples导入GCN从graphscope.learning.graphlearn.python.model.tf.trainer从graphscope.learning.graphlearn.python.model.tf.optimizer导入LocalTFTrainer):defmodel_fn():returnGCN(graph,config["class_num"],...)trainer=LocalTFTrainer(model_fn,epoch=config["epoch"]...)训练师。train_and_evaluate()config={...}train_and_test(config,lg)然后我们通过上面的代码选择模型,做一些训练相关的参数配置,就可以很方便的用GLE启动图分类任务了。GLE引擎由Graph和Tensor两部分组成,由各种Operator组成。Graph部分涉及图数据与深度学习的连接,如批量迭代、采样和负采样等,支持同构图和异构图。Tensor部分由各种深度学习算子组成。在计算模块中,图学习任务被分解为算子,算子在运行时以分布式方式执行。为了进一步优化采样性能,GLE将缓存远程邻居、频繁访问的点、属性索引等,以加速在每个分区中查找顶点及其属性。GLE采用了支持异构硬件的异步执行引擎,使得GLE可以有效地重叠大量并发操作,例如I/O、采样和张量计算。GLE将异构计算硬件抽象成资源池(如CPU线程池、GPU流池),协同调度细粒度的并发任务。5、性能GraphScope不仅在易用性上一站式解决了图计算的问题,而且在性能上也做到了极致,满足企业级需求。我们使用LDBCBenchmark评估和比较了GraphScope的性能。如图6所示,在交互式查询测试LDBCSNBBenchmark上,与开源系统JanusGraph相比,部署在单节点上的GraphScope的大部分查询速度都快了一个数量级以上;在分布式部署下,GraphScope的交互查询基本可以达到线性加速的可扩展性。图6:GraphScope交互查询性能在图分析测试LDBCGraphAnalyticsBenchmark上,GraphScope与PowerGraph等最新系统相比,在几乎所有算法和数据集的组合上都处于领先水平。在一些算法和数据集上,与其他平台相比,它至少有五倍的性能优势。本地数据见下图。图7:GraphScope图形分析性能请参见交互式查询性能[3]和图形分析性能[4],了解实验设置、再现性和完整的性能比较。6.拥抱开源GraphScope的白皮书和代码已经开源在github.com/alibaba/graphscope[5],项目遵循ApacheLicense2.0。欢迎大家star、试用、参与图计算。也欢迎大家贡献代码,打造业界最好的图计算系统。我们的目标是不断更新项目,不断提高功能的完整性和系统的稳定性。作者:开发助手_LS原文链接本文为阿里云原创内容,未经允许不得转载
