【论文阅读】FlexGraph: A Flexible and Efficient Distributed Framework for GNN Training

news/2024/11/15 10:00:41/文章来源:https://www.cnblogs.com/world-explorer/p/18202686

阅读思考问题:
Please briefly describe how hierarchical dependency graphs are built in FlexGraph, and point out the specific stage in the NAU abstraction where this process takes place.

请简要描述在FlexGraph中如何构建分层依赖图,并指出在NAU抽象中的具体阶段发生此过程。

框架概述

GNN:图神经网络,目标是通过迭代地聚合顶点邻居的特征,从输入的高维特征中学习图中每个顶点的低维特征。

FlexGraph:一个用于训练GNN模型的分布式框架,具有灵活的领域定义分层聚合方案。相比之下现在的GNN框架通常是为具有固定定义和聚合方案的GNN设计,不能很好地同时支持不同类型GNN模型。

设计特点:底层的FlexGraph是一个简单的GNN编程抽象,称为NAU和一个紧凑的数据结构,用于建模各种聚合操作。为了实现更好的性能,FlexGraph配备了混合执行策略,以在聚合邻域特征时根据不同的上下文选择适当和有效的操作,应用程序驱动的工作负载平衡策略,以平衡GNN训练工作负载并减少同步开销,以及管道处理策略,以重叠计算和通信。

评估效果:使用现实生活中的数据集和GNN模型GCN,PinSage和MAGNN,我们验证了NAU使FlexGraph比以前的框架更具表现力(例如,DGL和Euler),它们采用类似GAS的编程抽象,例如,它可以处理DGL和Euler无法处理的MAGNN。评估进一步表明,FlexGraph在GCN和PinSage上的训练时间平均为DGL和Euler等最先进的GNN框架的8.5倍。

背景介绍

大量真实世界的数据集可以自然地用图表示。典型的例子是知识图,社交网络,交通网络和网络图。最近,随着深度学习技术的快速发展,图形神经网络(GNN),一个直接将神经网络应用于图形结构数据的新兴模型家族,已经证明在处理各种图形相关任务方面非常有效。GNNs结合了标准神经网络(NN)操作和迭代图传播。已经开发了许多GNN框架来解决关于训练GNN模型的表达性,效率,可扩展性和实现的挑战。

图1

大多数GNN模型都适合“神经消息传递”框架,其中每个GNN层都与包括两个步骤的图传播过程绑定。对于图中的每个顶点v,它首先聚合v的“邻居“(第1层)的特征,以使用NN操作计算邻域表示(参见图1a)。然后,它将v自身的特征与邻域表示相结合,以通过更新操作调整v的特征(见图1b)。由于GNN涉及NN和图传播操作,即特征从“邻居”传播,算法开发者必须将图编码为稀疏张量,并在现有的面向张量的深度学习框架中使用张量操作手动模拟图传播,例如,TensorFlow 、PyTorch 和MXNet。这给GNN模型的实现带来了挑战。

受顶点中心编程模型的启发,例如,应用于图形处理系统的GAS(Gather-Apply-Scatter),已经提出了一些GNN的编程抽象来简洁地支持GNN模型。类似于GAS,这种抽象将GNN层中的计算分成多个阶段。对于每个阶段,用户指定需要在图中的一组顶点及其相邻边上进行的计算。所有当前最先进的GNN框架,例如,DGL ,PyG ,NeuGraph ,ROC 和Euler 采用类似GAS的抽象。他们能够表达一些流行的GNN模型,例如,GCN 、GIN 和G-GCN ,它们可以被归类为DNFA模型,因为这些模型使用直接邻居(即,1-图中的跳跃邻居)并实施平面聚合(即,单步操作)。

除了DNFA模型,我们发现GNN模型有其他各种定义的“邻居”和邻居聚合方案。一些定义间接邻居(即,图中除了1跳邻居之外的结构化数据),并应用称为INFA模型的平面聚合,例如,PinSage ;另一类INHA模型采用间接邻居和分层聚合(即,当聚集来自"邻居"的特征时的多步操作),例如,,P—GNN 和JK—Net 。INFA和INHA模型在促进许多与图相关的任务方面与DNFA模型一样重要。例如,最近的工作表明,像PinSage这样的INFA模型已经广泛用于工业中的推荐系统,例如,Pinterest与最先进的DNFA模型相比,INHA模型P—GNN在蛋白质—蛋白质相互作用网络的蛋白质功能分析中实现了更好的性能。不幸的是,目前的GNN框架主要是为DNFA模型设计的,缺乏对INFA和INHA模型的支持(见2.3节)。

本文对各种GNN模型进行了综合分析,并建立了相应的GNN分类。在此基础上,提出了一种基于阶段的GNN编程抽象NAU,它将GNN层的计算分为NeighborSelection、Aggregation和Update三个阶段。NAU能够以统一的方式训练DNFA,INFA和INHA模型。与直接利用输入图来捕获顶点之间的依赖关系的GAS类抽象不同,NAU采用分层依赖图(HDG)来编码不同类型的“邻居”,而不限于直接邻居。用户可以定义每个顶点如何选择它的“邻居”,NAU相应地构建HDG。此外,用户可以为HDG的每个级别指定聚合函数,并且以自下而上的方式自动聚合邻域信息。因此,NAU支持灵活的邻域定义和GNN的分层聚合方案。

为了提高层次聚集的性能,我们提出了一种混合执行策略。它区分了层次方案中的聚合,并根据它们的不同上下文,通过图处理,稀疏NN操作或密集NN操作来完成它们。这种策略的思想是利用高效的图形处理和NN操作。

此外,为了在分布式环境中有效地训练GNN模型,我们开发了一种应用程序驱动的方法来平衡工作负载并减少同步开销。它通过最小化估计的训练和通信成本将输入图的顶点划分为不相交的集合。我们进一步提供了一个管道处理策略,利用<\u>部分聚合提前聚合<\u>功能,并重叠部分聚合和通信,以提高分布式训练的吞吐量。

我们在NAU上实现了一个分布式GNN框架FlexGraph,该框架采用了上述所有优化策略。我们评估了FlexGraph在四个现实生活和合成图上训练DNFA模型GCN,INFA模型PinSage和INHA模型MAGNN,并将其与最先进的NN框架PyTorch和GNN框架DGL,DistDGL和Euler进行了比较。实验结果表明,对于MAGNN,只有FlexGraph可以有效地支持其在大型图上的训练,这是由于NAU的表达能力增加以及有效的存储和执行优化。对于PinSage,FlexGraph在训练时间上平均优于其他人25.30倍(高达119.33倍)。对于已经在现有框架中得到良好支持的GCN,FlexGraph仍然可以实现至少1.50倍的加速比。

本文贡献如下:

  1. GNN的分类,考虑了邻域定义和聚合方案,以揭示GNN框架在训练GNN模型时的关键表现力和性能挑战(第2节)
  2. GNN编程抽象NAU支持DNFA、INFA和INHA模型的训练(第3节)
  3. 分层聚合的混合执行方案(第4节),以及应用程序驱动的工作负载平衡策略和高效分布式训练的管道处理策略(第5节)
  4. 对GNN框架FlexGraph进行了广泛的评估,证明了其有效性(第7节)

GNN分类

在本节中,我们为各种GNN模型提供了一个新的二维分类,包括它们的邻域定义和聚合方案。我们首先回顾GN

2N(2.1节),然后给予分类(2.2节)。我们还确定了在此分类下支持不同GNN模型的挑战(第2.3节)。

GNN

图神经网络(GNNs)是一系列机器学习算法,它们将神经网络(NN)操作应用于图结构数据。最初,图中的每个顶点都与一个高维特征向量相关联。GNN模型的目标是学习每个顶点的低维特征表示,其可以进一步馈送到各种下游任务中,例如,顶点分类、链接预测和顶点聚类。

二维分类

有很多GNN模型被提出用于不同的应用(另见最近的调查)。然而,据我们所知,GNN模型并没有同时考虑GNN的静态和操作特性的分类。一般来说,对于如何定义邻域没有约束,即,使用静态表达式的顶点的“邻居”以及邻居聚合在GNN模型中的行为。因此,我们可以根据GNN模型的静态邻域定义和操作聚集方案将其分为三类。

  • DNFA(direct neighbors with flat aggregation具有平坦聚合的直接邻居):每个顶点的邻域由其所有1跳邻居组成,即,输入图中的直接邻居;并且聚合函数仅进行单步操作。
  • INFA (indirect neighbors with flat aggregation平面聚集间接近邻):一个顶点的"邻居"可以是来自附近子图的顶点(k跳),而不是它实际的1跳邻居。
  • INHA(indirect neighbors with hierarchical aggregation间接邻居与分层聚合):邻居”可以是任何图形结构的数据。在邻域聚合的操作中,多步聚合操作,即,允许分层聚合。可看论文中MAGNN的解释。
  • DNHA(direct neighbors with hierarchical aggregation直接邻居与分层聚合):现有GNN模型都不满足,现有的GNN框架大多只关注DNFA,本文只讨论前三种。

挑战

GNN模型不仅需要NN操作,还需要图传播。因此,希望有一个框架,同时实现两种类型的操作,并具有良好的性能;并且更有效地支持不同类别的GNN模型(第2.2节)。

A Flexible GNN Framework

FlexGraph采用分层依赖图(HDG)来适应GNN模型中“邻居”和分层聚合方案的多样化定义(第3.1节)。FlexGraph是一个新的GNN编程抽象,称为NAU(3.2节)。在这个新的抽象中,FlexGraph首先为输入GNN模型构建HDG;在HDG的指导下,FlexGraph聚合来自“邻居”的特征,并以统一的方式迭代更新所有顶点特征。使用NAU,不同类别的GNN模型可以在FlexGraph中自然地表达(第3.3节)。

层次依赖图 HDG

给定GNN模型M和输入图G,M的层次依赖图(HDG)w.r.t.G中的顶点v是有向无环图(DAG),记为HDG(v)。它描述了在GNN模型M中v的特征是如何从它的"邻居"中聚合的。G中顶点v的所有HDG(v)的集合称为HDG。

DAG HDG(v)使用分层结构,其中顶层和底层都包含来自输入图G的顶点(参见图3)。每个HDG(v)由两部分组成:模式树和一组邻居实例。

image-20240520222027212
1. HDG(v)的模式树T对由GNN模型M定义的邻居类型的分层(树)结构进行编码。具体地,顶点v被视为T的根,T的每个叶表示M中的邻居类型。当T只有一个邻居类型时,我们规定T = v。 2. HDG(v)的邻居实例,记为Nv,是由模型M定义的v的“邻居”的集合。Nv中的每个邻居实例引用HDG(v)中的一个顶点,并链接到T中编码其类型的叶子。如果相邻实例不遵循平面结构,即,如果它超出了输入图G的一个顶点,则HDG(v)将G中所有与其相关的顶点连接到该实例。

编程抽象NAU

FlexGraph采用了新的GNN编程抽象NAU。与类似GAS的抽象相反,NAU引入了NeighborSelection阶段来构建HDG,以捕获顶点之间的分层依赖关系。HDG就位后,在聚合阶段,NAU要求用户为HDG中的每个顶点指定聚合函数作为UDF(用户定义函数)。也就是说,用户为(i)模式树中的每个顶点和(ii)Nv中的每个邻居实例提供一个UDF,而不管它们是否具有平面结构。然后,NAU通过以自下而上的方式应用这些UDF,自动执行基于其HDG的GNN模型的分层聚合。通过这种方式,NAU支持灵活的邻域定义和各种GNN的分层邻域聚合方案。

NAU的工作流程。NAU由每个GNN层的三个阶段组成,即,NeighborSelection、Aggregation和Update(参见图4)

image-20240520222713117

邻居选择这一阶段构建HDG以满足GNN模型中各种邻域定义的要求。取输入图g,模式树如schema,和顶点UDF nbr_udf作为输入,该阶段输出用于GNN模型的HDG。这里,UDF nbr_udf自定义每个顶点如何从输入图g中检索其“邻居”。

  • 为了构建HDG,要求用户为与模式树中的叶子相关联的每个邻居类型实现一个UDF。这里,"邻居"可以是单个顶点或一组顶点,例如,输入图形的路径。图5分别显示了GCN、PinSage和MAGNN的UDF。可以看到,每个UDF都将GNN模型的schema_tree和顶点v作为输入。它返回v的"邻居"及其相应的邻居类型作为输出。例如,PinSage的UDF首先从v开始num_traces许多长度为n_hops的随机游走;然后选择具有top_k最高访问计数的顶点作为v的"邻居"。这些“邻居”有一个扁平的结构。这可能涉及复杂的图形计算

  • 聚合给定来自前一层的特征feas(k−1)和由NeighborSelection构建的HDG,此阶段计算邻域表示nbr_feas(k)。使用HDG,允许用户以自底向上的方式指定单步聚合操作之外的多步聚合操作。在各种GNN模型中,在HDG的相同级别处的顶点通常(如果不总是)共享相同的操作语义,即,聚合函数因此,Aggregation函数的典型实现遵循逐层范例,如图6所示。从底层开始,每次它首先获得特定层i上HDG的子间隙g_s,其中包括层i和i-1上的顶点,以及连接它们的边。然后,它应用用户定义的聚合函数aggr_udf_i,该函数将子图g_s和第i层顶点的特征feas_i作为输入,并计算第i-1层顶点的特征。最后,它返回HDG的根的特征作为邻域表示。

  • Update该阶段通过NN操作将旧特征feas(k−1)和邻域表示nbr_feas(k)组合。它只使用NN操作为下一层输出新的表示feas(k)。

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

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

相关文章

N 年前,为了学习分库分表,我把 Cobar 源码抄了一遍

10 几年前,互联网产业蓬勃发展,相比传统 IT 企业,互联网应用每天会产生海量的数据。 如何存储和分析这些数据成为了当时技术圈的痛点,彼时,分库分表解决方案应运而生。 当时最流行的 Java 技术论坛是 javaeye ,有位淘宝的技术人员分享了一篇分库分表的文章 ,这篇文章,我…

4、Git之分支操作

4.1、分支的概述 在版本控制过程中,当需要同时推进多个任务时,可以为每个任务创建的单独分支。 虽然分支的底层实现是指针的引用,但是初学阶段可以将分支简单理解为副本,一个分支就是一个单独的副本。 使用分支,意味着从原来的主干上分离开,在分支上做的任何改动,在合并…

Spring 对 Junit4,Junit5 的支持上的运用

1. Spring 对 Junit4,Junit5 的支持上的运用 @目录1. Spring 对 Junit4,Junit5 的支持上的运用每博一文案2. Spring对Junit4 的支持3. Spring对Junit5的支持4. 总结:5. 最后:每博一文案 关于理想主义,在知乎上看到一句话:“他们并不是不懂别人口中的现实,他们只是不信,事…

Eclipase的JNnit导包报错

在使用Eclipase 创建项目时系统会自动帮我们生成一个module文件,JNnit单元测试时,记得删除自动生成的 module-info.java文件,不然会一直报错找不到 org

来玩 GitHub 啊,SSH 连接方式

Windows 11 git version 2.32.0.windows.2 GitHub 20240520 --今天找回了自己的 GitHub 账号密码,继续玩吧,再次加入 蓝星的开源软件基地。 使用邮箱注册的,找回密码也很方便。本文简要展示 按照官方文档的介绍 使用 SSH 连接 GitHub 的过程。 简述为:创建SSH密钥对 公钥注…

来玩 GitHub 啊,SSH 连接

今天找回了自己的 GitHub 账号密码,继续玩吧,再次加入 蓝星的开源软件基地。 使用邮箱注册的,找回密码也很方便。本文简要展示 按照官方文档的介绍 使用 SSH 连接 GitHub 的国产。主要文档 1、Connecting to GitHub with SSH https://docs.github.com/en/authentication/con…

ABC 354 (atcoder beginer 354) D、E、F

D检查: 1. 有可能是推导式有问题,比如-/+写错 2. x,y A、B、C、D 顺序可能搞反了 不要盲目调试,先用人眼看一下代码的情况,找一下错误很简单的找规律的题目。 很不能理解过的人,就这些。 x方向,y方向,都是4行/列,一个规律的循环。求(0,0)到(x,y)中的黑色块: 第0-3…

BUUCTF-WEB(21-25)

[HCTF 2018]admin 这道题目就是admin说明得管理员登录 那我直接创一个admin的账号但是显示已经存在了说明用户名就是admin,然后我们直接爆破,也是爆破出来密码就是123直接登录[MRCTF2020]你传你🐎呢 这个题就是文件上传,我们MIME绕过,后缀名都被ban了,我们上传.htaccess…

5.8-随堂练习1

1992年,姜万勐 看到 MPEG芯片 Epiphany – 用MPEG1 把图像和声音同时存储在一张小光盘上 VCD(Video Compact Disc)。 1993年9月 万燕第一批1000台VCD机下线。 几乎都被国内外家电公司买去解剖做样机 万燕VCD 100% 市场份额 1995年 各路仿制的VCD机大举进军市场,竞争激烈。 …

5.8-随堂练习-小组练习2

结合本小组项目写下能想到的所有 SWOT答案: 【第九组】 在充电桩电控系统项目中,可以想到以下所有的SMOT(Strengths, Weaknesses, Opportunities, Threats): Strengths (强项):功能丰富:系统具有多种功能,包括充电桩管理、用户充电、支付功能等。 易用性:界面设计简洁…

foobar2000 v2.1.5 汉化版

foobar2000 v2.1.5 汉化版 -----------------------【软件截图】---------------------- -----------------------【软件介绍】---------------------- foobar2000 是一个 Windows 平台下的高级音频播放器.包含完全支持 unicode 及支持播放增益的高级标签功能. 特色: * 支持的…

学习笔记

CPP:函数指针定义方法 int (func)(int i); int (p)(int)=func