一、问题
1、图数据
在现实生活中,很多的数据都是以图的形式存在,像社交网络,知识谱药物和新材料等,图神经网络也被广泛的应用于多个场景,如推荐系统,异常检测,药物以及蛋白质结构预测等。
首先我们来对最常见图卷积神经网络做一个简单的回顾,从公式上来看,GCN 的表达形式与传统的深度神经网络区别在于多了含自环的度矩阵和邻接矩阵,也就是增加了聚合邻居节点特征的一个过程。因此在 GCN 的每一层包含两个操作,propagation 操作用来聚合邻居的信息,transformation 操作用来做变换。如果公式中的 A 矩阵是单位矩阵或者删去图里所有的边,那么GCN 此时就退化成了 MLP。
2、图神经网络
GCN 的性能优于 MLP 主要是由于使用了消息传播机制,聚合来自于高阶领域的信息,从而增强了自身的表达能力。目前除了常见的图卷积神经网络之外,还有图注意网络(GAT, Graph Attention Network),引入了注意力机制,给每个邻居节点分配不同权重,从而优化聚合邻居节点的表达形式;GraphSAGE 使用归纳式学习,以 mini batch 进行训练,能进一步扩展应用到较大的图数据集。
3、Neural Message Passing(消息传递机制)
传统的 GNN 都遵循消息传递机制的范式,而这种机制主要分为两部分:通信+计算。当神经网络去聚合邻居节点的信息的时候,就涉及到了通信的问题。计算就是利用聚合到的信息去更新节点,这一部分在各种神经网络中都是必不可少的,图神经网络也不例外。这里重点在于通信的过程。
在工业界的场景下,数据的规模都是比较庞大的,我们会采用分布式的方法去部署和训练节点。当一个节点和它的邻居节点没有部署在同一台机器上,做聚合信息的操作时就需要去拉取另一台机器上的邻居节点的信息,就这涉及到了通信开销,特别是在带宽不好的情况下,通信开销将会很大。图神经网络每一层都需要做这种拉取,同时在大规模的图数据上,每一个 epoch,即每一次训练,也会存在很高的通信开销。
4、GNN 系统
虽然消息传播机制具有如上的弊端,但是目前大部分的 GNN 系统还是默认去使用这一机制,比如最常用的 DGL 和 PyG,以兼容更多的模型。
在工业界,大规模的图数据处理会带来一系列挑战:
首先就是较高的建模门槛。当接到一个任务后,我们需要进行建模,即编写对应的代码,设计一个网络结构。在这个过程中会涉及到手动调参,更新训练过程及参数进行验证。这个过程事实上有很高的门槛,同时也非常耗时,使用大规模的图数据训练神经网络甚至会需要一两天的时间,在没有先验知识的情况下,调参的过程会非常缓慢,因此针对任务设计 GNN 就需要知识丰富的专家。
另一个挑战就是低可扩展性,正如前面提到,在分布式上部署会有很大的通信开销,事实上在单机上的计算开销也很大,这就导致了很高的模型训练时间和预测时间。后续会有实验结果进行进一步的说明。
5、瓶颈
为了更加直观理解通信瓶颈,这里做了一个简单的实验。
受制于单机的存储和分布式通讯开销,现有的消息传递机制不能很好的传播到大图上。图 a 是我们使用 2 层的 GraphSAGE 训练 Reddit 上的一个数据集,横坐标为机器数量,纵坐标是加速比,可以看到在增加更多机器时候,加速比增长并不明显,甚至在机器从 2 个增加到 8 个时,加速比甚至没有增加到 2 倍。图 b 分析了这种情况的原因,即使增加机器后计算成本减小,更多的拉取数据操作使得通信开销增大,因此加速比的增加并不明显。
因此,我们的目标就是去如何兼容 GNN 的可扩展性,设计使用门槛低的图神经网络系统。
二、方法
1、系统目标
我们的 PaSca 自动搜索系统是一个端对端的设计,不需要取人为定义网络结构和训练流程,只需要输入图数据和优化目标,就可以输出能兼顾多个优化目标的可扩展性 GNN,同。输入的图数据可以是特征标签、图结构矩阵,优化目标包括学术界常应用的分类性能指标,如准确率,AUC 等,同时还可以包括一些其他的约束,比如期望的训练时长,期望使用的机器内存,从而达到控制预算的效果。也就是说,我们的系统可以考虑到与硬件相关的多个优化指标,在多个目标的约束下去完成多目标的搜索。
2、消息传递(Message Passing)范式
从数据流动的角度来看,GCN 遵从消息传递范式,它主要是从粒度较细的节点层次来刻画数据的流动,主要由 3 个操作组成:message function 定义如何去生成信息,对应表达式中的度矩阵和邻接矩阵;aggregation function 定义如何去聚合邻居节点信息;update function定 义更新中心节点特征的方式,它遵从不断地去迭代“聚合-更新”这一流程。
3、SGAP 建模范式(Scalable Graph Neural Architecture Paradigm)
(1)方法概览
针对消息传播机制的范式的弊端,我们提出了一种新的可扩展性的训练流程的抽象,SGAP 建模范式(Scalable Graph Neural Architecture Paradigm)。不可扩展性的消息传播机制范式需要在每个 epoch 训练的时候拉取信息, 不断地聚合-迭代邻居的信息,它的通信次数是和训练的 epoch 成正比的关系。而我们提出的 SGAP 建模范式主要分为三部分:预处理、模型训练和后处理。预处理阶段聚合邻居的信息,聚合后我们完全抛弃了图结构,将聚合后的信息传入第二部分模型训练中。这一步的模型可以是任意的机器学习模型,如 MLP,DNN,树模型或更加传统的神经网络模型。得到模型预测之后再次调用一个聚合操作,从而得到最终的输出。与之前不断循环往复的过程相比,无论训练的 epoch 是多少,SGAP 只做了两次聚合邻居的操作:预处理和后处理。
因此在分布式训练的情况下,采用 SGAP 建模范式的 GNN 通信开销会更低。对于分布式场景我们更加看重可扩展性,对于单机场景更看重效率。SGAP 在单机的情况下训练也能显著降低计算成本。具体来说,它在预处理阶段减少了图数据重复计算邻接矩阵与特征矩阵相乘的步骤,避免了多次循环往复的聚合更新信息。矩阵的乘法运算在预处理阶段计算好之后,再传入模型训练部分,按照普通的神经网络模型计算即可,因此在单机模式下计算次数会变少,计算速度会提升。
(2)SGAP 范式
在 SGAP 范式中,后处理与预处理是比较类似的过程,下面将对 SGAP 的前两个过程做更加数学化的阐述。它首先会在图的层次做信息传播,得到不同传播层数的消息。接下来会聚合不同传播层数的消息来的到新的特征,最后把得到的特征送入任意一个待训练的机器学习模型。因此 SGAP 范式可以理解为从图的层次去刻画数据的流动,而不是更细粒度的像消息传递机制一样从节点的层次。
(3)SGAP 抽象
对于预处理来说,从邻居节点聚合的是特征,而后处理从邻居节点聚合的是模型的输出,也就是软标签。如图中 A 点在第一次聚合时的到 BCD 三个邻居节点的信息,然后再次调用通过 C 节点聚合到 E 和 F 节点的信息。同时已经被聚合的节点信息将被再次聚合。
(4)图聚合器
在后处理这一步,我们参考了三种主流的图聚合器,如 GCN 中使用的增强归一化邻接矩阵(Augmented normalized adjacency),APPNP 中使用的个性化 PageRank,和 MotifNet 中的 Triangle-induced adjacency。
(5)训练
接下来训练模型主要分为两步,聚合来自预处理阶段的消息,以及更新聚合后的信息。
(6)消息聚合器
消息聚合器分为两类,第一种非自适应聚合器,比如在聚合的消息中取最大值、平均值等;第二种自适应的聚合器给不同节点的不同层表示消息不同的权重,如同注意力机制。热力图中显示的是模型运行 50 次后的准确率,颜色越深代表准确性更高。
在图中不同的节点所处的位置不同,权重也不尽相同,类似于社交网络中活跃度和好友比较多的用户,比如 18 号,只传播 1 个 step 就达到了很高的准确率,代表着传播一次就几乎覆盖到全图;而 4 号代表着影响力较为一般的用户,它的分布比较稀疏,就需要更多的传播次数才能提升准确率。同时在自适应聚合器中引入的其他参数也是有代价的,会对计算效率产生一定的影响,这里就是在用计算效率去换更高的准确率。
(7)基于 SGAP 范式来设计 GNN
基于 SGAP 范式来设计的 GNN,完全抛弃了消息传播机制的循环迭代过程,主要分为三步:前处理、训练、后处理。前处理利用图聚合器聚合邻居节点的信息存入矩阵;训练阶段利用消息聚合器聚合预处理阶段的特征矩阵,设定信息更新模型(如 MLP)来学习节点的软标签类别分布;后处理就是基于模型更新后的预测结果当作新的特征,再一次使用图聚合器来聚合邻居标签信息,最后输出最终预测。
4、自动化搜索系统(PaSca)
基于可扩展的 SGAP 范式,我们提出了自动化搜索系统 PaSca,其中包含两个模块,自动化的搜索引擎和分布式的评估引擎。搜索引擎的主要的目就是推荐一个 configuration instance,即一个网络结构配置,可以配置出一个可扩展的图神经网络结构。评估引擎将会评估所推荐的 configuration instance,真正在数据集上训练并产生预测,然后根据验证集的结果去评估准确率。
(1)搜索引擎
搜索引擎需要接收输入的优化目标,处理不同优化目标之间的 tradeoff。优化目标包括对于模型结构的要求(模型本身结构)、模型性能的要求(准确率等性能指标)和硬件设置(资源、内存空间、时间)相关的约束。搜索引擎可以在多个目标的约束下,去搜索并推荐最佳的满足多个优化目标的网络结构配置。
(2)设计空间
PaSca 的设计空间包含在预处理,模型训练,以及后处理等 3 个阶段的局部设计。拿模型训练阶段的设计空间为例,需要考虑的包括使用什么样的聚合器(自适应/非自适应),使用多少层的 dens layer 等。在每个阶段都有 2 个参数可供选择,三个阶段共有超过 150k 种可能的 configuration instances,同时现有的 Scalable GNN 都可以在我们的设计空间里找到。
(3)推荐服务器
对于推荐服务器来说,PaSca 使用经典的基于贝叶斯优化的 SMBO 方法。整个过程分为三步:建模,推荐和更新。首先进行建模,学习配置(网络结构)与优化目标之间的关系;建模完成后,推荐引擎去推荐能兼顾多个优化目标的配置;之后评估引擎评估该配置的效果,把观测到的历史记录返回推荐服务器中,进一步更新推荐模型,使得推荐越来越准确。
(4)评估引擎
对于分布式评估引擎来说,首先会使用图数据聚合器对大图做切分,切分好图数据后再基于重复计算的方法来做数据聚合。具体来说就是根据已经计算好的第(i)步消息来计算第(i+1)步消息。网络结构训练器相对简单,它使用 MLP 基于 Mini-batch 来训练网络,并且基于 parameter server,去异步更新网络参数。
三、实验
1、实验设置
我们在目前广泛使用的经典数据集及数据量稍大的数据集和自己的 Industry 数据集上都做了验证,主要是为了验证以下就是 3 个目标。首先,我们希望提出的 SGAP 比基于 NMP 的消息传递机制更具有扩展性;第二个目标是期望 PaSca 搜索出来的结果能够很好地处理不同搜索目标之间的 tradeoff;第三个目标是希望 PaSca 搜索出来网络结构能够有更好的预测性能。
2、可扩展性分析
对于第一个目标,由于是针对大规模的数据去做设计,最关心的其实不是模型的性能,是而是 scalability,也即模型的可扩展性。如图所示,我们使用了基于 SGAP的APPNP和基于 NMP的 GraphSAGE 在两个不同的数据集上进行了对比,实验发现基于 SGAP 的 GNN 可以取得接近线性的加速比,并且比基于 NMP 的消息传递机制更加接近理想的加速比。
3、搜索出来的代表性方法
基于 SGAP 范式搜索出来的代表性方法可以兼顾多个搜索目标之间的 tradeoff。如图中帕累托平面所示,横轴代表模型的准确率,纵轴代表预测时间。可以看到 PaSca-V3 取得了最低的预测误差,代价就是带来了与 PaSca-V2 相比更长的预测时间。目前表现 SOTA 的可扩展网络结构 GBP,也可以在帕累托平面上被搜索出来。表 3 代表着搜索出来的 3 个不同版本的代表性网络结构。给予网络结构三大部分具体的参数,就可以确定唯一定义的网络结构。
同时结果显示,目前搜索出的代表性模型都能很好兼顾训练时间与测试准确率。图中蓝框内代表的 PaSca 搜索出的模型,其中 PaSca-V2 和 PaSca-V3 都取得了较高的预测准确率,但是明显需要更少的时间。即使拿性能最差的 SGC 与非 SGAP 模型相比,在准确率降低幅度不大的情况下,效率高出其他模型一个数量级以上。因此 SGAP 在工业范式界的大规模图数据上表现是相当不俗的,尤其是对训练时间要求比较高的情况下。
4、预测性能
在预测性能上,SGAP 和其他非扩展性的建模范式相比,具有相当竞争力的性能。基于 SGAP 范式实现的模型具有预处理、训练、后处理这样一种三段式的结构,与常见的 NMP 和 DNMP 范式下的模型相比,它们都取得了较好的预测性能。比如,使用 SGAP 范式下的 PaSca-V3 模型在不同的数据上进行测试都取得了最好的性能。因此,SGAP 范式在保证模型可扩展性的同时,不会降低模型的准确率。
四、总结
目前我们实现了能自动化建模 10 亿节点的超大规模图神经网络系统,部署于腾讯太极机器学习平台,并广泛应用于视频推荐和内容风控等场景,系统部分功能已在 Github 开源:https://github.com/PKU-DAIR/SGL,系统论文获得 CCF A 类数据挖掘旗舰会议 WWW 2022 唯一“最佳学生论文奖”(中国第2个),相关工作刷新了国际图学习榜单 OGB 的 3 项第一。
这里对我们的工作做一个总结。PaSca 作为一个新颖的构建和探索可扩展 GNNs 的网络结构搜索系统,不仅仅研究单个的网络结构设计。PaSca 搜索出来的代表性模型能够在预测性能、效率以及可扩展性等多个方面超越现有的 SOTA GNN 模型。同时 PaSca 能够帮助研究者来探索不同的 Scalable GNN 结构设计,并且理解不同设计的特点和功能。
同时也对 PaSca 系统开源工作做一个介绍。前面主要讨论的 SGAP 建模和网络结构搜索这两个部分的功能,已经集成到 SGL 系统工具包中,是 SGL 系统设计不可或缺的一部分。这也正是 SGL 系统的设计目标之一,即具有高可扩展性,能够高效处理分布式还是单机场景下的超大规模工业图数据。
第二个目标就是实现自动化,PaSca 系统可以对指定的多个优化目标去自动化的搜索推荐网络结构。
第三个目标是在应用性上,可以针对常见的节点分类、聚类预测,后面也会支持倒药物发现和推荐等场景实现一键调用,具有针对多个任务定制的用户友好的接口。
另一个目标就是针对数据侧的优化,关注包括噪声处理、长尾分布不均衡处理、图结构数据稀疏等一系列问题。同时,系统还会内置集成多种有效的提点方法。
以上就是本次讲座的全部内容。
五、问答环节
Q1:如何保证 SGAP 这种方式的调整不会影响模型的效果,是否有理论上的支持?
A1:首先我们回答,前半部分。从实验结果上可以看到,基本上不会影响效果,效果反而会更好;然后另外,从 Open Graph Benchmark 榜单也可以看到,现在大部分的数据集其实都可以归纳成 SGAP 里的一个分支,或者说归纳 SGAP 范式的前半部分,因为很多方法可能会缺少后处理的操作。所以说,SGAP 是不会去影响模型的效果。至于在理论上的支持,比如 SGC 及其他很多的工作,以及去年有一篇论文,是专门去研究比如说 Graph Augmented MLP 的一种方法,因此在理论上也是有一些支持的。如果对这个感兴趣的话,我们后面也可以发一下相关的论文。
Q2:SGAP 范式是否能够支持复杂的 GNN 模型?比如说在边上有 n 计算的阶梯模型。
A2:目前的话就是研究的工作还不多,是不能去直接去支持或者说接替,怎么去聚合邻居的信息的算法。但是目前的处理办法是做了一个折中,把不同跳的信息聚合时,相当于在做一个节点层次上的聚合。这样一种方法在保证了可扩展性的同时,也利用了 Attention 的思想去学习节点不同层数的表示。但是目前没有办法做到像 GAT 那么细的粒度,去聚合节点跟节点之间的信息,这是很好的一个研究的 topic,可以在聚合阶段利用一些启发式的方法,或者说利用一些有理论保证的方法,去做一些带注意力机制这样一种思想的聚合算法。
Q3:PaSca 框架可以支持多个优化目标,并在一定约束下进行学习,这里是如何添加这种约束的呢?
A3:这个问题涉及贝叶斯优化,建模时会设计一个 x 和一个 y, x 就是各种网络结构y的话可以是 accuracy。当我们去训练一个模型,比如说像高斯过程、GBM、树模型,或者随机森林等,多目标就意味着一个x对应多个 y。实现方式是用我们实验室自研的 OpenBox 工具包去做的,可以很方便的支持,多个约束目标的贝叶斯优化。
Q4:SGAP 这种方式的话,为什么说有更好的拓展性呢?
A4:更好的扩展性是最重要的一点,也是大家最关心的一点。我们在此再重新描述一下,前面提到的就是 NMP 消息传递机制这种范式,在每个 epoch 都需要去不断迭代地去做聚合和更新的操作,这样带来两个问题,第一个问题就是需要不断的重复做这种稀疏矩阵乘 dense 矩阵的矩阵乘法,这就造成很高的计算成本,而另外由于不断的聚合操作,会产生很高的通信成本,尤其是对于大规模图数据。
但是在 SGAP 范式下,分成预处理、训练以及后处理三个阶段,所以这个时候通信成本就不受到 training epoch 大小影响。只需要在预处理和后处理阶段做两次通信;计算的话也是同理,矩阵乘法只需要在预处理和后处理阶段去做。在模拟训练的时候,会完全抛弃掉图结构。这样就兼顾了可扩展性和效率的问题,比 NMP 的消息传递机制会更好。