开源图深度学习框架DGL的机遇与挑战|NUC2022

先简单介绍一下,我叫王敏捷,现在是亚马逊云科技上海人工智能研究院的资深应用科学家,我们研究院成立不久,主要研究的内容其实就是图。我们知道图(Graph)其实是一个非常广阔的东西,它包含的不仅仅是数据结构本身,它包含的是一种关系,甚至于是知识这样的一种范式。

相信听过上半场很多这些talk的同学们或者老师们,肯定对这一点是毋庸置疑了——就是我们的图数据其实在整个生产生活当中是无处不在的,在一些比如说非常微观的层面上,我们的药物和分子结构其实可以认为是一种图的结构,然后在我们的电商等等场景当中,像社交网络产品的交互网络知识图谱等等,其实都是图的数据结构。

那既然图的数据结构有那么多样,而且无处不在,在图上的机器学习也会有各种各样的种类,这边我简单地抽象地概括一下,比如说我们现在有这张图,我们在这个图上其实有很多种不同的机器学习任务,比如说我可以对这个节点去做一个预测,我可以试图去分析,比如说一个用户他的兴趣爱好是什么,其实这就是在图上做节点分类的这样一个任务。

对应的我们既然有节点分类任务,也可以有链接预测的任务,比如说我现在这张图上有一条边,我去判断边的属性,其实这就是一个边预测的任务。我可以对一个已有的边进行分类,也可以去判断两个节点之间它是不是存在一条边,其实都是链接预测的这样的任务。相对应的例子,比如说像推荐系统,知识图谱股权等等,其实都是链接预测对应的实际应用。

最后也会有整图检测这样的一个任务。整图检测往往是一个比对于比较小的这些图,比如说我们可以把药物的分子或者说一些化合物把它给认为是主图的结构,然后我去判断说给定一个药分子的这样一个图的结构,我能不能去预测出分子是否具有我们想要的某种化学性质,这类的任务就是整图的性质预测。

刚刚讲的可能是一些比较抽象的分类,接下来我讲几个实际的例子。

第一个例子,我们实际做的一个客户案例。这个客户是一个社交平台,它的一个任务是水军检测,它的数据其实大家在PPT上可以看到——有一个异构图,这个图上有两类节点,一类是这个帖子的节点,一类是用户的节点,我分别用圆圈方块来表示,这些边代表的是用户和帖子的交互关系,比如说用户点赞转发帖子等等这些。水军检测这个任务对应的是,如果出现一类新的交互关系,我要去判断说这个关系究竟是一个好的关系,还是一个恶意的关系,其实这对应的就是我们刚刚提到的边的分类任务。

所以其实可以看到,对于水军检测这样一个任务本身,我们可以把它给抽象成一个图上的机器学习任务。

当时我们想做的一个任务叫做药物重定位,什么叫药物重定位?我们知道一个新的病毒产生,我们希望能够立马找到它的靶向药,但是一个药物的审批流程是非常长的,所以我们想要做的事情就是在已经审批过的药物当中,能不能把这个药物重定向为新的病毒的靶向药。当然这个过程是非常复杂的,我们做了这么一个知识图谱,叫做药物重定位知识图谱(DRKG)。

可以看到左边这个知识图谱的Schema是非常复杂的,在这个图当中,比如说有Compound的化合物基因,包括Disease等等不同类型的节点,我们怎么去解决药物重定位的问题?其实也是同样的思路,我们把药物重定位的问题给映射成这个图上的一个机器学习问题。

如果把药物重定位映射成图上机器学习问题,它其实对应的就是一个链接预测,我希望能够去判断,比如一个疾病节点,它是不是潜在地和某一个药物节点之间有一个潜在的靶向连接关系,如果说通过数据分析能够判断出来有这样潜在的连接关系,就有理由相信说这类药物是治疗这类病毒的一个潜在的药物。

通过这个方式我们也做了一些建模,包括一些数据分析,最终的结果我们发现通过这个图数据分析的方式,所推荐的41种药物当中,有11种还确实是被用于Covid-19的临床实践的。所以可以看到其实在这个图数据当中,我们可以学习出很多有重要价值的信息和(取得)一些结果。

实际过程中使用图数据去解决问题,大家可能会想到说我有这样的任务,我有这样的一个需求,我应该用怎样的模型去解决它呢?

现在主流的或者说一个非常火热的方向,(就是)把我们知道已经非常成功的深度学习技巧引入到图数据的学习当中,因此也就诞生了一类新的图数据库,叫做图神经网络GraphNeuralNetwork,GNN。

什么是GNN?我这边做一个简单的介绍,如果做个类比的话,我们可以想象说非常常见的传统的比如说卷积神经网络,它是用于比如说图像识别这些任务,其实这些神经网络它的一个目的就是说我获得一份输入的数据,然后把这些输入数据变成一种高维空间中的向量表征。其实图神经网络也是对应的类似的这样一个技巧,它的输入数据是个图,所以自然地我就可以把这个图上的点边,甚至于整张图这个数据通过图神经网络的学习映射成一个高维的向量——其实这就是图神经网络。

这边有个简单的例子,比如说我们可以看到左边的输入数据是一个简单的社交网络,每个节点是个用户,用户和用户之间是朋友的关系,我可以通过神经网络给不同的用户生成一个高维空间的向量,它不仅仅包含比如说用户本身的画像信息,同时也会包含它周围邻居的结构信息。通过这样一个画像,这样的一个高维向量,我可以把它输入到分类器中去判断说他的一个兴趣爱好。

图数据网络为什么强大?一个原因就在于它在计算的过程当中,其实不仅仅考虑了一个节点自己的画像信息,也考虑了一个节点它周围的邻居的结果。

同样的,图神经网络也利用这样的一个很朴素的思想,也就是说当我在计算某一个节点的向量的时候,我会去收集它周围邻居的向量特征,然后做个聚合,通过这样的不断的迭代的方式,我可以获得图神经网络的最终输出的结果。

这边简单看一个公式,总体来说就是刚刚我们所说的这样一个过程,就是通过收集邻居信息,然后再做聚合的过程。

这个过程叫做消息传递,可以用一个数两个数学公式去表达。大家要记住这个词,消息传递是非常重要的,是我们图神经网络一个核心的概念。这当中其实包含了两类的计算,一类是在边上计算,去计算一个节点,到底要给邻居发怎样的消息,对应的当中也会有一个函数叫做消息函数。

然后另外一个是在节点上发生的计算,就是说(节点)现在收到了很多邻居的消息,我怎么把它给聚合起来,所以这对应的也会有一个累和函数。然后我通过了这些累和的消息以及我自身的消息,去重新更新自己的向量特征,所以这边会有一个更新函数。

图神经网络的灵活性以及强大在于,我刚刚所提到的这些消息函数、累和函数、更新函数,可以通过你自己的场景和任务本身去定制,也就是说图神经网络它不是一个模型,它是一类模型,而我完全可以根据你到底是做的怎样一个下游任务,去定制化这样的一个函数来获得更好的效果。

在学术圈,在今年年中刚刚结束的亚马逊云科技的发布会上,我们的资深副总斯瓦米(Swami)也是专门提到了GraphNeuralNetworks,他专门提到说GraphNeuralNetworksarethenextbigthing。也就是说其实不论是学界还是工业界,都是认为图神经网络是非常重要的、里程碑式的一个发展。

正是因为看到了这样一类新的神经网络的诞生,所以我们其实整个团队也是很快就跟上了。

这边可以看到右边是一些不同的推特,就说当时我们刚刚上线的时候,有很多的知名学者,包括像图灵奖获得者YannLeCun也是专门给我们点赞,我们现在的GitHubStar数已经超过1万了,总体来说在一个良好的这样的一个增长的趋势当中。可以这么说,DGL在学界可以说是全球领先的深度学习框架之一,在业界DGL的使用率上也是全面领先。

所以为什么DGL这么受人欢迎,我总结下来有4个原因——

第一个是我们有一个灵活应用的编程接口。图神经网络其实是作用在图上的这样的一类神经网络,所以其实包括我们刚刚看到这些消息传递对吧?我收集连接的信息,然后再累和其实都是图上的一个概念,所以我们采用了一个以图为核心的这样一个编程接口,使用户在编写图神经网络过程当中觉得非常的简单易懂。

第二点是我们有非常高效的底层系统设计,原因也是因为图和比如说我们常见的深度学习所遇到的数据,比如说张量等等是不一样的,图它是稀疏的,并且它是不规则的,所以他其实对于底层比如说用GPU加速是有挑战的,在这一点上就是专门实现了很高效的底层设计,使得比如说大家写了一个图神经网络,它能够很方便的在GPU上进行加速。

第三点就是我们有优秀的巨图训练性能。在实际场景当中一个图可能非常大,可能有百亿级的点和边,怎么去训练这样的大图是一个非常难的挑战。DGL在这当中做了很多的探索,也做了很多的实践。

最后就是说DGL其实在很多的学术顶会上都做过手把手的教程,包括像KDD、WWW等等,而且我们作为开源项目也会把所有的材料全部公开在网上,所以如果大家想要学习DGL想要去上手的话,可以在这些网站上找到我们的这些学习材料。

然后我们也知道就是说作为一个开源项目,一个很重要的就是建立一个开源生态,所以我这边也简单罗列了一下基于DGL所开发的很多项目,或者比较有interaction的一些项目。

首先是可视化,因为我们知道这个图是个非常复杂的数据,比如说我看张图片或者说看一段文本,我能够很清晰地了解它到底是什么意思,但是我看到这张图我可能就懵了,我不知道这个图连接在一起到底是什么意思,对吧?所以可视化就是个非常重要的一个手段去给我们的客户解释说图数据到底意味着什么。这边我们也看到有像学界的GNNLens,包括业界的HGNN等等这些,他们都基于DGL开发了可视化的工具。

第二点是复杂图,因为我刚提到的一些图,比如社交网络它可能更多的是比较简单的图,因为其实只有一类节点,就是用户,用户之间比如说有个朋友的关系——但实际,我们看到很多的图它是异构的,它有不同类型的节点和不同类型的边,在复杂图上怎么去建模,这是一个比较难的问题,我们这边也有专门是北京邮电大学的石川老师组,可以说是国内做异构图最有名的组,他们所开发的叫做OpenHGNN这样一个项目,专门给大家提供了异构图的很多模型库,所以如果大家感兴趣的话,也可以去看一下OpenHGNN。

接下来就是GNN的评测标准,作为一个新兴领域,我们肯定需要有很好的评测标准来衡量哪个图层网络模型更好,所以这边有OpenGraphBenchmark,OGB也是现在目前最火热的benchmark之一,基于他也是开放了DGL的接口。

数据库的话,就是说我们知道有很多数据它其实不在内存里面,它可能一开始是来自于比如用户自己的这些数据的warehouse这边,也像有就AmazonNeptuneML、Neo4j、ArangoDB,他们都提供了关于DGL的这样的一个开放的接口,我后面会提到我们的NebulaGraph,NebulaGraph其实和DGL也有一个良好的数据接口,然后我们专门还有一个和NebulaGraph的这样的一个实践案例,后面我会提到。

接下来是自然语言处理。这一点可能大家会觉得有点surprise,为什么自然语言处理和Graph有关系?事实上我们去看一个文本的时候,我们去理解一段文本,其实一个很自然的想法是去理解它的结构,比如说我去理解这个段和段之间的上下的因果关系,所以其实在我们研究院看来,我们研究图本身不仅仅是应该局限在图数据,也应该去看说比如说一些非结构化数据当中有没有图这样的一个关系,其实学界当中和我们的想法有很多地方是不谋而合的,所以这边也有像GraphNLP这些专门基于NGLbuild的给这些NLP的库。

生命科学也是非常重要,我刚提到像分子生物医药等等,还有这些微观的数据,其实可以认为是图,所以DGL也有专门的面向分子生物的包叫做DGL-LifenSci,像在这个领域做研究,做了很多的同学可能会了解deepchem这么一个package,这个package是有提供DGL所实现的模型,

简单看一下DGL这三年的开发历程,其实我们从2018年年底发布第一个版本之后,一直在不断的开发新的功能,然后也是几乎每三个月大概是开发一个新的版本,然后每个版本就会添加很多不同的这样的一个支持,比如说大图的一些采用的算法的支持,包括分布式的训练等等。

介绍完DGL的事情,我想讲一下我们作为一个开源图机器学习框架面临的一些核心的挑战。

事实上如果我们去看市面上的图神经网络框架其实有很多对吧?不仅有DGL,还有像PaddleGraphLearning、Jraffe、PyG等等,有很多这样的一个package。

你可以想象就为什么有那么多package,原因也很简单,就是我们还做得不够好,否则的话也不会有那么多package对吧?那就说明它其实有很多的挑战是我们没有办法很好解决的,也是我们在看的主要的方向。这些方向我总结下来一共有三点,第一点是易用性,我怎么让用户使用开发这个图神经网络变得非常方便。第二点是高性能,怎么让他们训练的过程变得非常快。最后就是大规模图我怎么去解决,在一个图上就是一个巨图的这样的问题。

大家可以看到这个图当中其实有很多的交集,也就是说其实我们在做的过程中,我们会发现,其实很多情况下它是有trade-off的,比如说如果我在易用性上我要达到一个完美的易用性,很有可能我在性能上就会有做一些损失,这个当中就会有带来了很多的研究的问题和挑战。

所以接下来我可能会讲一些我们研究院在这几个不同的交集当中,我们做的一些实践,以及我们做的一些研究的课题。

首先的一个问题我想说的是易用性加上高性能,因为我们做下来发现一个很大的点是说神经网络已经很难了,然后图又是一个很复杂的数据,所以当我们把这个图和神经网络结合在一块以后,就会发现这个事情特别难做,所以它的整个入门门槛是非常高的。

我这边做一个简单的举个例子就说这边有一个网络叫做Graph,其实大家不用特别担心说这个数这个公式怎么看上去那么复杂对吧?但是我可以给大家讲稍微讲一下,比如说大家如果回想一下图神经网络,我刚刚提到其实就是两类计算对吧?一个在边上的计算,一个是在点上计算。

我在边上要做的事情是把一个节点的消息发给邻居,在点上要做的事情是说我收到很多邻居的消息把它聚合,对吧?所以说如果我去看GAT这个模型公式,其实它也就是这两个计算,比如说公式1和公式2和公式6,你可以看到他其实做的都是说在这个节点的边上,我计算某个东西,对吧?

我们不用管它算的是什么东西,你可以直接认为公式1、2、6它其实就是在边上进行计算,然后7这个公式是在点上算的,它的做法就是把这个点上就我刚刚算出来这些边上的消息做一个有机的结合,然后再把它聚合起来。

Ok,所以这就是GraphAttentionNetwork,GAT这样一个模型。

如果我们去编写一个code在当中,其实边我们提供了两套方式去编写,第一套方式我们叫它User-definedFunction,UDF。这个一看到就是说如果用户去写UDF的话,它写出来是这样的一个两个函数,第一个叫做message,第二个叫做aggregate对吧?虽然说写程序写的不多的同学可能不太了解,但是大概还是能够看出来,比如说每一行代码它对应的哪一行公式,对吧?

所以其实整体的代码逻辑是非常简单的,而且能够自然而然看出来它的对应关系,这样的一类编程接口就是非常直观,但是一个问题是在于说它非常低效,原因是在于我们要为了支持这样一种非常直观的编程方式,需要把图这种不规整的数据结构整理成规整的数据结构。

我可以举个例子,比如在图上很常见的情况是一个节点,它可能有不同数目的邻居,可能有的节点它是一个名人节点对吧?我可能有100万个邻居,但有些节点可能就像我们这样的,可能也就是比如说100、200个朋友对不对?你在计算这个消息累和的过程当中,它的计算的代价是很不一样的,我为了要支持这样的一个方式,我需要把它进行分类。

比如说节点度数比较高的,我把它给聚在一块,节点度数低的我把它给分成另外一块,然后通过不同的批次的计算完成整个计算,可以想象这个计算本身是非常耗时的,原因也是因为我把一个大的规整,我把大的计算把它切成了很多小计算,切成小计算的代价,就是会增加很多系统上的一些overhead。

所以在DGL当中我们提供了另外一种编程方式,就说对于一些高级的用户,我们推荐大家是怎么去写GAT这个模型?是让他们直接调用我们已经包装好的底层的算子。比如说下面这个例子,如果我要用DGL包装好的底层的算子去实现阶梯模型是怎么做的?

可以看到就是说首先虽然我有大概的还有个对应,比如说我这边用注释写了,说每一行公式对应的是哪一些代码,但是这个代码本身其实的可读性已经比上面要低很多了,我并不能很快的去了解说到底每一个operation到底在干什么。

这边可以看到有很多DGL的调用,比如说如我们看下面的这些调用,其实就是我刚刚提到的说提交已经封装好的底层的这些算子交给用户去做,但是理解这些算子的本身是有代价的,所以可以看到说这个当中也就是另外一类编程模型的这样一个问题,它虽然非常高效,因为每一个就是很高效的算子去帮你高效GPU的加速,但是它是直白的,然后这当中的性能差距能有多大呢?

当然得判断这个图的分布是怎样,但是最终的结果我们测下来大概平均会有10倍到100倍的差距,所以这个差距是非常大的。

Ok,所以这其实就有一个trade-off在里面,就我刚刚提到的在易用性和高性能之间,它是有一个要做权衡的。

比如说右边可以看到我刚刚提到的OpenGraphBenchmark,OGB这样的一个评测集当中的数据集的大小,可以看到其实现在最大的图也是比之前要大很多了,像MAG-LSC有大概240million这样的一个规模,但是这个规模和我们工业界遇到的图的规模还是差很多的,我们公益就遇到了规模肯定是要在百亿千亿级量,就相相当于是这个图的大概10倍到100倍以上。

所以可以看到就说学界还没有感受到工业界的这样的一个规模,但是在这样的规模上其实已经有很多的问题了。

因为这个图很大,我没有办法把整个图放到内存当中,该怎么办?其实是需要做一个采样的方式去做训练的。这个在GNN当中我们也称之为叫做小批次训练,mini-batchtraining。

Mini-batchtraining包含好几个步骤,首先是第一个步骤是,因为整个图没有办法放到内存里面,所以只能先选取目标节点,然后去看这个目标节点的邻居子图,把这个子图拿出来,这个图就小了。抽取出子图之后,再去根据子图的关系去把它对应的特征给拿出来,拿出来之后就获得了一些比较小的图。

然后在这个子图上训练网络,比如说可以把这个图放到GPU上,因为GPU内存有限,但这个子图变得很小,我就把它放到GPU上进行训练,然后我在不断重复这个步骤,直到它的收敛。

可以看到其实整个过程是比普通的深度神经网络的小批次训练要复杂的,而这个过程由于它包含了很多的步骤,所以我们在设计DGL的子图训练框架的过程当中,也把它给分割成了不同的模块。

比如说对于第一个,我们把我们给定一个节点,我们去抽取他的邻居的子图,这个模块我们称之为采样模块,这个模块就在右边这个图上对应的叫做samplingcomponent,这个模块它负责的作用,就是说我把这个子图抽出来,把它给喂到下面的步骤当中去做计算。

然后第二个是子图的特征的存储,我们知道子图特征其实本质上是很多高维向量特征,高维向量特征我其实可以用一个传统的keyvaluestore的方式把它给存储起来,其实我们专门为图神经网络设计了一个Keyvaluestore的这样一个component,然后当把这个图采样和子特征都已经抽取出来之后,就可以把它给放到接下来的输入到接下来训练模块里边,而训练模块就很有可能在GPU上,而且可能会有多个这样的训练模块进行之间进行一个协作,可以获得一个更高效的并行训练的效果。

然后这样的训练分割其实可以部署到不同的硬件环境上面,包括我刚刚说的采样模块,特征模块、训练模块,根据不同的硬件环境,我可以采取不同的部署。

举个例子,如果现在是个单GPU训练这样的一个流程,现在有个Graffstructure和一个Nodefeature,这些图都很大、整个特征包括图结构都很大,我没有办法放到GPU上。那该怎么做呢?OK,我(可以)放到CPU上。

通过刚刚说的先做一个子图的抽取,抽取完之后对这个子图做一些变换,然后把它对应的feature把它给抽出来,最终把它给交到GNN上做一个训练,其实这就是在单GPU上的整个训练的流程。

在传统的训练硬件的部署方面,其实是因为这个图很大,所以只能把前面的这些采样包括特征抽取的流程放在CPU上,然后把后面训练的流程放在GPU上。那这个过程就显而易见会带来一个问题,就是我们在从CPU到GPU的数据拷贝,它会成为整个训练的瓶颈。

所以在DGL其实是上一个版本0.8这个过程当中,我们其实就对刚刚我说的流程进行了一个更新,我们的总体原则是说我们希望把更多的计算放在GPU上,这样才能更高效。但是因为GPU内存不够,所以我们需要使用新的技术来解决内存限制的问题。

我们使用新的技术就叫做CUDAUVA这样一个技术,如果我用一句话来概括它就是说我可以在CPU上开辟一块空间,这个空间的大小可以和你的CPU的用量一样大,但是这块空间是可以被GPU访问的。这其实就解决了刚刚说的你的CPU用量不够,但是又想用GPU进行加速的这样一个问题。

通过使用GPUUVA的技术,我可以把所有的图的结构包括feature的结构把它放到UVAmemory当中,这部分memory虽然在CPU上,但是GPU可见的,然后我把后面的所有的流程全部通过GPU进行加速,整个过程就会达到一个非常高效的这样性能。

好,这个是在单GPU上的训练流程,如果说我们图更大对吧?我可能一个机器的内存都存不下,我该怎么办对吧?其实一个很自然的想法,就是说我们能不能通过一些已有的infrastructure来解决这个问题,这个当中最重要的一个infrastructure之一就是这个图数据库了,那图数据库有哪些特性呢?

首先我们可以看图数据库它是天然支持海量巨图的,对吧?图不论多大,我可以分布式存储。同时图数据库另外几个好处,比如说可以支持数据持久化,可以支持实时的事务性操作,包括灵活的图查询语言,为什么灵活的图查询语言非常重要?因为其实大家可以想我采样的过程,我给定一个节点,我去拿到这个节点的这样的一个周围的邻居过程,其实是完全就等价于说我在图做了一个查询操作。

Ok,其实可以看到图数据库包含这些很好的一些性质。我们刚刚也提到DGL有丰富的GNN的模型库,然后我们有高效的GPU的实现,我们也可以实现多机多卡的这样一个训练。

自然而然我们可以思考说能不能把它们结合起来,结合起来的一个想法也非常简单,就是我刚刚提到的我把图数据库作为我们这个图采样系统,因为它支持图查询语言它可以作为采样的一个部分,对吧?而且它可以支持海量的巨图,然后我把图样本从图数据库当中抽取出来之后,交给DGL只要作为GNN训练系统进行操作——所以这个就是一套整套的一个新的这样的一个design。

这边其实我们也是给我们客户做的一个案例,这个案例也是非常有幸地使用到了NebulaGraph的技术。这是在我们的AWS云上所做的这样的一个architecture,可以看到整个过程当中,核心就是说你可以看到NebulaGraph所做的事情,就是一旦这个节点它是一个实时系统,就说我这个图就算在整个运行过程当中有新的节点,新的边加进来,它也是可以满足需求的。

因为NebulaGraph是有实时的事务性操作的功能,在这边其实NebulaGraph所起的作用就是一个图采样系统。我们通过graphdatabase拿到sub-graph,也就是我们说的子图,获得子图之后,我们再交给DGL,我们DGL是部署在Amazon的SageMaker这样的一个endpoint上,然后通过DGL的计算,我们可以获得这样的一个更高效的这样一个训练效果。

接下来我也想说一下训练成本的这样一个问题,因为其实刚刚我记得之前嘉宾也提到说训练非常慢,其实不仅仅慢也很贵。

我现在这边做一个简单的例子,我使用的一个数据叫做是OGB里边的一个数据叫做MAG240M,然后它这个数据规模有多大?我刚刚提过了,它其实有240million这样的一个节点,所以它的图结构数据大概是30GB,节点特征大概是200GB左右这样一个量级。

如果使用CPU加GPU的混合训练,我需要把这些数据全部放在CPU上,所以需要一台这样的机器——这个机器在AWS上大家可以查到它的价格大概是8美元一小时,ok,有人说我可能还是比较有钱的对吧,所以我可以用得起这样的一个这样的一个数据这样的机器。如果说我想要用全GPU训练,我们把它的速度再push到一个limit,对吧?我想要更快怎么办?我需要很多的GPU它的总的容量,GPU内存总容量能够放下所有的就是图结构包括特征结构,这个时候我就需要4台这样的机器,你的价格就已经上升很多了,对吧?

同时我们要考虑就是说这个图本身还不是最大的,事实上如果我们去考虑Internet,我们整个互联网对吧?互联网我们认为它是个图,它的整个链接关系都可以认为是连接关系,这个图的大小是MAG240的10倍以上,我们可以想象我们的训练成本有多贵,对吧?

所以训练成本其实是图神经网络现在大规模图神经网络训练上的一个很严重的问题。

当然解决问题肯定要一步步做,所以我们看到这个问题,我们先对推理的问题做了一定的优化。我们所采取的一个思路叫做叫Layer-wiseinflunce,按层的这样一个推理的范式。什么意思?就是我们发现为什么刚刚我们看到这个推理性能那么的慢,原因是因为传统的推理性能都是基于b这样的一种做法,就是Node-wiseinference。

Node-wiseinfluence的做法比如我要influenceA这个节点的结果,我怎么做?根据图神经网络的做法,我要去看他所有的邻居以及邻居的邻居的消息,对吧?所以对A来说我要计算它周围所有的节点。接下来我走到下一个batch,我要去算B的时候,很不幸它正好share所有A的neighbor,这个时候其实我就全部重新算了一遍,这个当中就有很多的计算冗余,这就是为什么之前我们看到计算那么慢的一个主要的原因。

因此我们的解决方案就是把这样的计算方式换成了Layer-wise的计算方式,也就是说我并不是先计算A和B,而是先计算它的二度邻居的inbeding,比如说C和D。通过这样的方式,每个节点都只需要计算一次,这就是为什么Layer-wisa要比它快很多。

当然Layer-wise也有它的问题,比如说我写了一个GraphSAGE,它是有三层的模型,每一层是一个sagecom的一个layer,当我把它变成一个Layer-wise的计算的时候,它的整个代码就看不懂了。因为Layer-wise它其实是break了我们的整个在计算的过程当中一个计算的逻辑,然后用户必须对所有的模型都要重写一份代码。

通过这个方式,其实我们做了一个研究工作,就叫做全自动的GNN推理。利用了刚刚我们提到的逐层Layer-wise推理的方式,同时为了解决我刚刚提到的用户编写代码困难,所以我们又设计了一个编译的框架,通过分析编译用户的代码,然后把它给自动地变成我们刚刚看到的Layer-wise这样的一个推理的一个代码,然后达到一个比较高效的推理速度。

Ok,谢谢大家。

NUC2022往期精彩内容回顾:

交流图数据库技术?加入Nebula交流群请先填写下你的Nebula名片,Nebula小助手会拉你进群~~

THE END
1.管理知识课:什么是网络状的组织架构?管理知识课:什么是网络状的组织架构?陆课堂 湖南 1 打开网易新闻 体验效果更佳工业切纸机虽然力量很大,但高度是有限的 全球不知道 485跟贴 打开APP 大姐晒自己工作过程,手法惹得网友爆笑,可千万别让老板看到! 搞笑老狗子 749跟贴 打开APP 全厂没有一个电工会接这种高压电缆,老板拿出5000块,请外援来接 一点https://m.163.com/v/video/VCI7FC95M.html
2.走进工业级图神经网络框架GraphLearn走进工业级图神经网络框架GraphLearn 简介:阿里巴巴高级技术专家赵昆在阿里云开发者社区特别栏目《周二开源日》直播中,分享走进深度学习的又一颗明珠:图神经网络,并向大家介绍阿里巴巴自研的图神经网络框架GraphLearn。本文为直播内容文字整理,看直播回放,请点击文首链接~https://developer.aliyun.com/article/778069
3.计算机网络知识架构图计算机网络的知识框架计算机网络知识架构图 计算机网络的知识框架 一、计算机网络概述 1.1 计算机网络的分类 按照网络的作用范围:广域网(WAN)、城域网(MAN)、局域网(LAN); 按照网络使用者:公用网络、专用网络。 1.2 计算机网络的层次结构 TCP/IP四层模型与OSI体系结构对比:https://blog.51cto.com/u_16099317/9644213
4.Python卷积神经网络图片分类框架详解分析python【人工智能项目】卷积神经网络图片分类框架本次硬核分享当时做图片分类的工作,主要是整理了一个图片分类的框架,如果想换模型,引入新模型,在config中修改即可。那么走起来瓷!!!整体结构config在config文件夹下的config.py中主要定义数据集的位置,训练轮数,batch_size以及本次选用的模型。https://www.jb51.net/article/227469.htm
5.10行代码搞定图Transformer,图神经网络框架DGL迎来1.0版本2019 年,纽约大学、亚马逊云科技联手推出图神经网络框架 DGL (Deep Graph Library)。如今 DGL 1.0 正式发布!DGL 1.0 总结了过去三年学术界或工业界对图深度学习和图神经网络(GNN)技术的各类需求。从最先进模型的学术研究到将 GNN 扩展到工业级应用,DGL 1.0 为所有用户提供全面且易用的解决方案,以更好的利用图机https://www.thepaper.cn/newsDetail_forward_22203105
6.时空图卷积神经网络(STGCN):一个用于交通预测的神经网络框架),该框架利用从导航数据中推演出的计划中交通流量提升模型效果。在真实场景数据集上进行的实验证实H-STGCN和对标的模型相比取得了更优的效果,在突发拥堵的预测上优势尤为明显。 混合时空图卷积网络提供了 matrix),在距离衰减的基础上进一步引入了路段通行时间的协方差。 图 3 相邻道路间拥堵不一定会传播 本文提https://www.pianshen.com/article/97731794913/
7.算力网络,是一张什么样的“网”?电子创新网Imgtec社区算力网络有多厉害? 2021年国内运营商推动国际电信联盟电信标准化部门(ITU-T)发布了算力网络的框架结构标准。 算力网络框架结构示意图 来源:ITU-T Y.2501标准 算力网络可分为四层: 算网资源层,提供“云、管、边、端”多层次的泛在分布式计算资源和网络资源,满足算力需求; https://imgtec.eetrend.com/blog/2022/100559859.html
8.科学网—面向活动的网络媒体监测与建模分析:IVFC案例解析数据处理层对数据感知获取层采集的各类网络媒体数据进行预处理,包括数据清洗、数据变换、文本分词、命名实体识别、特征抽取与数据标注等,为数据挖掘解析与建模分析提供统一融合的特定格式数据与细粒度数据属性。 图1 图1活动网络媒体数字化监测与建模分析整体框架 https://blog.sciencenet.cn/blog-951291-1227379.html
9.scGNN,一种新型的用于单细胞RNA测序分析的图神经网络框架本文提出了scGNN (单细胞图神经网络),为scRNA-seq分析提供了一个无假设的深度学习框架。这个框架用图神经网络来表达和聚集细胞间的关系,并使用左截断的混合高斯模型来建模异质基因表达模式。scGNN集成了三种迭代多模态自动编码器,其在四个scRNA-seq基准数据集上的基因插补和细胞聚类性能优于现有工具。在一项阿尔茨海默https://cloud.tencent.com/developer/article/1825257
10.25张架构图把数据治理核心内容说清楚了(6)技术支撑是保障数据治理框架职能活动有效执行及配合组织管理机制正常运转的工具基础,它需要提供技术先进、功能完善、运行高效和安全可靠的支撑能力。技术支撑保障体系包括了平台工具和技术创新两方面内容。 3)工业企业数据治理“车轮图” (1)结合DCMM及行业标杆企业的最佳实践经验,形成了具有行业特色的工业企业数据治理http://www.360doc.com/content/24/0113/22/15545909_1110976493.shtml
11.教学平台功能图4 系统网络支撑框架示意图 对服务器进行了内存和万兆网卡升级,并部署了数据中心交换机Cisco Nexus 7018。目前数据中心已经部署了16台54 CPU虚拟化服务器群,所有物理服务器采用双10GbE网卡、双4Gb FC HBA上联,物理服务器群保持了合理的负载,为虚拟仿真实验平台的搭建提供了坚实的硬件基础。 http://saelab.dlut.edu.cn/zxgk/jxptgn.htm
12.人工智能贝叶斯网络概率图模型全局语义因果链朴素Graphical models (概率图模型) 什么是图模型(Graphical Models) 图是什么 计算机科学中的图模型: 为什么图模型有用? 图模型:统一框架 图模型在机器学习中的作用: 图的方向性: 贝叶斯网络 举例说明: 举例说明: Compactness(紧致性) 全局语义 局部语义 https://download.csdn.net/blog/column/12187083/131547466
13.游戏网络框架设计流程图模板Byte是在程序之中的最低存储单位,那么为了实现刚开始提出的将PlayerInfo对象传输给后端,那么现在得出了两种方式,将PlayerInfo对象转成byte数组,再将byte数组通过Socket传输给服务器端,具体怎样传输不用太过关心,现在只需要关系的是,在客户端PlayerInfo对象转byte数组之后经过网络传输,最终服务器以流或者数据报的方式收到https://www.processon.com/view/65690b000f3f01433299fa52
14.基于飞桨复现图像分类模型TNT,实现肺炎CT分类TNT网络结构复现过程 本段将对TNT网络结构中比较关键的几个组件做一下介绍,包括关键的代码展示和一些代码注释说明。整体网络框架如下图: PatchEmbed将图像 在visual words级进行编码嵌入 这部分作为TNT模型的输入,在内层Transformer产生一定数量的visual words序列。函数输入的参数有图像大小img_size, 行列的patch大小patchhttps://www.paddlepaddle.org.cn/support/news?action=detail&id=2664
15.图神经网络在医学影像中的应用机器之心最上面一行是 ground truth,就是想检测一些病理模式。主要思想是想通过 patch-based 的分析方法加 GNN得到相似的检测。网络框架如下图: 先将图像的小 patch 的特征输入到预训练好的 CNN 模型中,得到每个 patch 的向量表示。得到patch 的向量表征之后有两个设置,一个是弱监督设置,一个是半监督设置。 https://www.jiqizhixin.com/articles/2019-12-30-3
16.AndroidSoftAP实现框架功能模块与框架图 设备启动与管理 网络共享功能的实现 SoftAP 运行时序图 SoftAP 简介 无线AP(AP,Access Point,无线访问节点、会话点或存取桥接器)是一个包含很广的名称,它不仅包含单纯性无线接入点(无线AP),也同样是无线路由器(含无线网关、无线网桥)等类设备的统称。 https://www.jianshu.com/p/39cfe69824bd