标签 GNN 下的文章

转载请注明出处:小锋学长生活大爆炸[xfxuezhang.cn]

课程报告,随便做的,仅供参考~
B站视频:https://www.bilibili.com/video/BV1tM4y1v7t4/
以下格式默认为:先放图,再放文字

lij3sszx.png

前面的同学介绍了传统方法和经典深度学习方法在无线通信中的应用,最后,这里我再向大家介绍一个比较新的概念——图神经网络。接下来,我就简单介绍一下图神经网络以及无线通信与图神经网络能如何结合使用。

lij3ue6e.png

下面将从以下四个方面展开。

lij3xb4x.png

由于无线通信环境的复杂性,如随机信道衰落和干扰,以及不可避免的硬件损伤所引起的非线性等情况,使得无线通信系统的数学模型有时不能准确地反映实际情况。此外,随着大规模无线通信方案(如大规模MIMO)的普及,相应的数学模型变得更加复杂,相关优化算法的计算复杂度也变得更高。

lij3xz4s.png

此外,由于各种神经网络模型具有强大的表示能力和较低的推理复杂度。因此,机器学习ML技术,特别是深度学习(DL)技术在自然语言处理(NLP)和计算机视觉(CV)等其他领域取得了巨大的成功。

lij3y5ub.png

基于以上两点,近年来,越来越多的研究者开始采用机器学习的方法来研究无线通信中的挑战性问题,例如无线电资源管理、通道估计、联合源通道编码等,并取得了不错的性能提升。

随着人们对更高服务质量(QoS)的需求不断增加和大数据的爆炸式增长,基于机器学习和深度学习的无线技术逐渐成为第六代无线通信的主流,并超越了传统的基于模型的设计范式。

开发基于深度学习的方法有两种不同的方法。

第一种是数据驱动的方法,通过使用神经网络代替传统的构建块,从而直接学习问题的最优输入输出映射。

第二种是模型驱动的方法,将神经网络用来代替经典算法中的一些策略。

对于这两种范式,一个基本的设计组件是底层神经架构,它控制着训练和泛化的性能。

早期的尝试采用即插即用的方法,并采用继承自计算机视觉等应用的神经架构,例如,多层感知器或卷积神经网络。

尽管这些经典架构在小规模无线网络上实现了近乎最佳的性能和快速执行;但当用户数量变大时,性能就会出现严重的下降。

lij3yf9m.png

更具体的来说。

神经网络通常需要大量的训练样本。然而,在一般的无线通信系统中,训练样本通常比较难收集。同时,过多的训练样本会增加训练过程的内存消耗和时间消耗。

其次,对于大多数现有的工作,神经网络模型的结构高度依赖于系统的大小,例如天线/用户的数量。而且5G及以上网络通常具有密集部署的接入点、数百个客户端以及动态变化的客户端数量和信噪比等特点,这使得应用基于MLP或基于CNN的方法无效。

最后,大多数现有的基于机器学习的无线算法都是集中式的,可能存在高信令成本、低可扩展性和灵活性、计算限制以及单点故障等问题。

因此,这些神经网络模型缺乏泛化能力,不能用于系统规模变化的情况。我们需要寻找一些新的方法来应对这些问题。

lij3z9km.png

为了提高可扩展性和泛化能力,一个有前途的方向是设计专门用于无线网络的神经网络体系结构。最近的一个尝试是使用图神经网络,它可以利用无线网络的图拓扑信息。基于GNN的方法在资源管理、端到端通信、MIMO检测等应用中都取得了不错的成果。

比如,对于波束形成问题,在拥有50个用户的网络上训练的GNN能够在拥有1000个用户的更大网络中获得近乎最佳的性能。

由于可以并行执行,GNN的计算效率很高,并且是迄今为止能够在毫秒内为数千个用户找到近乎最佳的波束形成器的唯一方法。

此外,gnn比其他神经网络模型更有效地利用图信息,特别是图拓扑信息,这可以减少所需的训练样本数量,并提升模型性能。

其次,gnn可以处理不同大小的输入图。此外,gnn的操作自然是去中心化的,这对大规模无线通信系统很有吸引力。

而且,GNN 是最强大的 DMP(动态马尔可夫决策过程) 算法,也就是说,只要选择合适的可学习权值,GNN可以表示任何 DMP 算法。这也从算法的角度证明了在无线网络中采用 GNN 是合理的。

因此,将GNN应用于无线通信技术中,是一个非常有前途的方向。

lij40tpw.png

既然图这么强大,那什么是图。

图是用于表示点与点之间存在某种关系的结构,是一个很悠久又很经典的数据结构。图可以用来建模为很多结构,比如用来表示分子结构、文字、社交网络、以及图生成等等。

以图片为例,常规的图片由排列整齐的像素点组成,如果将其中的部分节点提取出来,就构成了一个抽象度更高的Graph,并且节点之间保持了拓扑关系。

图由节点集合和边集合表示。

在无线通信的上下文中,节点可以为表示用户、AP、天线、基站、边缘设备等,节点特征是该节点的属性(例如,节点的重要性)。

边可以表示为通信链路、干扰链路或某些连接模式等,而边特征是该边的属性(例如,信道状态信息)。

lij41hqc.png

图神经网络GNN是一种用于处理图数据的机器学习模型,建立在传统神经网络的基础上,通过考虑节点之间的连接关系来对图数据进行建模和分析。它的基本思想是通过迭代地更新节点的表示,将节点的邻居信息进行聚合,然后将聚合结果作为节点新的表示。因此,节点的表示将会逐步融入更广阔的上下文信息,从而提高对节点的理解和表示能力。

GNN模型由一个或多个层组成,而GNN模型的训练主要包括聚合操作和组合操作。在聚合步骤中,聚合函数用于为每个目标顶点聚合来自前一个GNN层的传入相邻顶点的特征向量。在组合步骤中,组合函数使用神经网络操作变换每个顶点的聚合特征向量。最终的嵌入向量可以输入到其他机器学习技术中(例如,多层感知和强化学习,以进一步进行节点级的分析,例如设备的开/关预测。或者边级的分析,比如预测链路的拥塞状态。此外,所有节点的嵌入向量还可以总结成一个图级嵌入向量,用于图级任务,如网络的吞吐量预测。

经过粗略统计,近年来,GNN在谷歌学术上的文章量呈指数级增涨,预计2023年将可能达到3636篇。

lij41yc8.png

下面介绍几个相关的比较新的工作。

第一个是将图神经网络用在大规模MIMO网络的信道跟踪上。

针对高移动性场景下的大规模多输入多输出网络,研究提出了一种基于GNN的大规模MIMO时变信道的在线CSI预测方案。首先利用少量导频来实现初始信道估计。然后将得到的信道数据以图形的形式表示出来,并通过沿图形边缘的权重来描述信道的空间相关性。并且设计了一个基于GNN的信道跟踪框架,该框架包括一个编码器、一个核心网络和一个解码器。

然后在仿真实验中对所提出的系统进行了评估。除了表中GNN框架的参数,还设置BS处天线数为32,信道衰减服从复高斯分布,路径数为20,到达方向角服从在[−π,π]上的均匀分布,采样时间为0.02ms,载波频率为3 GHz,天线间距为λ/2。

最后的实验表明,基于GNN的方法在所有对比实验中,取得了最好的结果,特别是在高信噪比区域。在移动场景下,也一直保持着优势。

lij429iy.png

这个是将图神经网络用于用户的调度任务。

可重构智能表面(RIS)能够智能地操纵入射电磁波的相位,以改善基站(BS)和用户之间的无线传播环境。研究重点介绍RIS辅助的多用户下行网络的调度方面。具有排列不变性和等方差属性的图神经网络,可用于适当地调度用户并设计RIS配置以实现高整体吞吐量,同时考虑用户之间的公平性。

研究提出了一个三阶段的GNN框架。

在第一阶段,应用于所有潜在用户但具有非常短的试点的GNN,可以在考虑用户优先级的同时产生优化的时间表。

在第二阶段,第二个GNN仅适用于预定用户,以生成优化的 RIS 配置。

最后,对优化后的RIS配置下的整体低维有效信道进行重新估计,以设计BS波束成形器。

lij42myl.png

在实验部分。考虑了一个RIS辅助的多用户MISO网络,有8个BS天线、128个RIS反射元件以及32个用户。链路信道遵循瑞利衰落,反射信道遵循Rician衰落。

将所提出的数据驱动方法与传统的基于信道估计的方法进行比较。给定估计信道,采用贪婪调度的方法,通过块坐标下降优化波束成形矩阵和反射系数,实现加权和速率最大化。

仿真结果表明,与传统的基于信道估计的方法相比,所提出的算法可以在显著降低导频开销的情况下获得比传统方法更好的性能,实现网络效用的最大化,并且无需明确的信道估计。

lij42wna.png

GNN也可以方便地与其他深度学习方法结合使用。在这项工作中,将图神经网络与深度强化学习结合,进行5G网络中资源分配的预测。

5G及以后的移动网络日益复杂,以及这些网络需要支持的大量设备和新用例,使得无线网络中本已复杂的资源分配问题成为一项最大的挑战。将深度Q网络扩展与图神经网络相结合,可以更好地模拟预期奖励函数。其中,GNN 的目标是学习如何最好地近似RL中的Q函数。

研究主要关注用户关联(UA)问题,也就是用户应该连接到哪个连接提供商(例如基站),以最大化全局系统的效用函数。

通过模拟仿真实验,可以看到所提方法的性能比基线方法和Q学习方法都要好,并且提供了更高的系统效用和更低的用户拒绝率。

lij437ra.png

由于GNN本身的发展没几年,各领域基于GNN的研究还比较新颖,因此GNN本身的未来发展以及无线通信场景下的发展方向也有很多,这里简单列举几个。

第一个是GNNs的新无线应用:GNN4Com 将重心放在无线资源分配方面,但在其他无线应用中的潜力仍未被充分利用,尤其是在物理层通信方面。由于传统方法不能将 CSI 反馈扩展到大规模 MIMO 系统中,因此 GNN 可以作为与天线数量无关的优秀选择。虽然 GNN4Com 通常集中于特定的网络层,但跨层优化对于提高整体通信系统的性能至关重要。因此,我们需要研究如何在跨层优化中纳入 GNN。此外,也有很多研究是关于如何优化Com从而更好的加速GNN,比如通信的丢失重传机制等。

第二点是有效的GNN训练策略:神经网络训练阶段通常需要大量时间和资源。虽然 GNN4Com 目前的工作大多在离线模式下训练 GNN,但训练仍然存在成本,可能成为实际应用的瓶颈。解决方案可以利用多设备计算资源,采用联邦学习和边缘学习等方案来协作训练 GNN 模型。使用数据增强和对比学习等技术减少 GNN 所需的训练数据量。提高 GNN 在无线网络中的训练效率是未来的重要方向。

第三个是GNN推理的无线机制或协议:由于无线信道衰落和噪声等因素的影响,分布式 GNN 推理的精度会不可避免地受到影响。为了实现 GNN,需要开发用于鲁棒的无线机制/协议,例如功率控制,自适应性调制和编码等。此外,在邻居节点之间共享隐藏层嵌入向量需要控制同步和传输延迟。因此,开发高效的同步协议和资源分配对于实现 GNN 在无线通信中也很重要。

第四个是GNN训练和推理时的隐私保护:隐私保护是无线通信的核心问题之一,GNN的训练和推理都可能导致隐私泄露。因为在训练过程中,训练样本来源于系统日志文件或用户的本地数据,易暴露用户私人信息。可以使用带噪声的样本进行训练、或使用联邦学习方案来保护用户隐私。在推理阶段,去中心化的GNN推理依赖信息交换,这也会导致隐私问题。可以开发保护隐私的通信技术。此外,还需要在保护用户隐私的同时实现GNN的分散控制。

lij43nyz.png

这是相关的参考文献。

lij44e70.png

谢谢大家


转载请注明出处:小锋学长生活大爆炸[xfxuezhang.cn]

{bilibili bvid="https://www.bilibili.com/video/BV1tP411f7y3/" page=""/}

lezjshz5.png

  大家好,今天跟大家分享一下我最近看的两篇关于GNN的综述文章。整合了一下他俩的内容,相当于给大家简单介绍一下分布式GNN训练的全流程。
  以下内容结合了我的理解,若有不对的地方,欢迎大家指出。
  内容比较多,可能要占用大家30~60分钟的时间。

lezjsojv.png

  与其他神经网络相比,GNN可以有效地表示非欧式域。并且CNN可以看做是GNN的特例。它还可以与CNN、强化学习等技术组合使用。
  GNN的应用场景非常广泛,包括系统建模、图像、文字、社交网络、图生成、电子设计等。
右图是GNN模型训练的典型架构图。左侧将图形数据作为输入,然后通过GNN模型学习图形中每个顶点的向量表示。最后输出的学习的表示,可用于下游任务,比如顶点预测、链接预测和图预测等。

lezjssd5.png

  这里简单统计了Arxiv和Google Scholar两个平台上,近几年标题中包含GNN或分布式GNN的文献数量。
  可以看到,GNN自2018年兴起以来,相关的论文数量呈现出了指数级的增涨。
此外,分布式GNN训练的贡献在2019年开始显现,目前也呈现出了快速增长的趋势。这是因为工业界和学术界对缩短GNN模型训练时间的要求很高,因此越来越受到关注。
  不过一些属于GNN,但标题中未包含关键词的论文没有统计进来。如果算上,预计会更多。

  除了学术界,各大互联网企业也在积极部署自己的图计算平台,国内如腾讯、阿里、百度等,都已推出了相应的方案。
  可见,图计算、图神经网络获得了各界一致的认可。

lezju0sc.png
  GNN模型由一个或多个层组成,而GNN模型的训练主要包括Aggregation邻居聚合和Combination后的神经网络操作。在聚合步骤中,聚合函数用于为每个目标顶点聚合来自前一个GNN层的传入相邻顶点的特征向量。在组合步骤中,组合函数使用神经网络操作变换每个顶点的聚合特征向量。
  但随着大数据时代的发展,图的规模越来越大,甚至达到百亿个节点和边。训练这种GNN需要大量的计算和存储等资源。因此,分布式的GNN训练成了大图训练的有效解决方式。
  根据分布式GNN的特点,论文从不同角度描述了现有工作对其的优化技术。通过合并两篇综述的主要内容,下面将从这四个方面简单介绍。

lezjufmv.png
  为了在多个计算节点上协作,需要进行数据分区。
  但图数据是具有依赖性的,如果我们考虑分区之间的数据依赖性,分布式训练效率会因通信而降低;如果我们简单地忽略数据依赖性,模型的准确性就会被破坏。因此,数据分区是端到端分布式 GNN 训练效率的关键阶段。
  在考虑依赖性的情况下,数据分区应以平衡工作负载和最小化通信成本为目标。

  GNN任务由于受顶点数、交叉边数、特征维度、层数、顶点分布等因素的影响,简单的分区方法(如随机划分),效果不是很好,因此学者们提出了包括基于启发式、基于学习和基于算子等几种特定于 GNN 的成本模型。
  通过对 GNN 工作负载的计算和通信成本进行建模,可以更好地指导数据分区。

  数据分区通常是按图划分,但由于现在的节点特征往往是高维向量或张量,因此大家也开始关注特征的划分,或者将两者结合。
  图的划分可以分为Full-batch和mini-batch两种。Full-batch是将整张图输入训练,而mini-batch是通过采样生成小批量再输入训练。
  Full-batch的挑战在于工作负载不平衡和大量通信。Mini-batch的挑战在于采样性能的不足。
  后面会具体来讲。

  特征的划分可以按列或按行来进行。
  两种划分方式的示意图如右图所示。

lezjunep.png

  首先介绍一下full-batch training。
  由于每一轮都涉及整个原始图形数据,因此每一轮都需要大量的计算和大量的内存占用。为了解决这一问题,分布式全批训练主要采用工作负载划分方法:即分割图以生成小工作负载,并将其移交给不同的计算节点。
  根据预处理阶段是否预设了工作负载,进一步分为基于调度工作负载的执行和基于预设工作负载的执行。

  左边是基于调度工作负载的执行。
  这里的Leader负责存储模型参数和图形数据,还负责生成和调度chunk,以及整合各worker的梯度并推进计算。而worker负责模型计算和梯度聚合。
  我们看一下大致流程:
  Leader首先分割Chunk,由于节点的邻居节点数量不同,因此chunk的大小也不一样。然后chunk被分发到各个worker。Worker根据需要从其他worker聚合邻域信息,并组合执行模型计算,然后将梯度发送回leader。Leader整合所有内容,并更新模型参数,将最终梯度推送给各个worker。Worker更新自己的参数。这就完成了一个epoch的训练。
  对于这种方式,优化的方向包括以下几点。
  首先是以顶点为中心的工作负载分区,常见的有1D、1.5D、2D、3D方式。如1D只需与左右方向的worker通信,2D只需与上下左右的worker通信,这可以提高计算节点的数据访问效率。
  第二点,可以借助于成本模型来实现平衡工作负载的生成,比如线性回归成本模型。
  传输优化可以减少数据传输的开销,比如可以通过缓存来减少重复数据的传输,或者通过允许计算组件或节点发送数据来合理的选择传输源,也就是说每个节点都可作为数据发送方。
  最后还可以通过对特征的精细化拆分,来充分提高GPU线程级别的并行度。

  右边基于预设工作负载的执行是在预处理阶段,按照一些策略,预先对数据进行了划分,以便考虑节点之间的相关性。
  然后每个worker负责完成其子图中所有顶点的计算任务。
  Worker根据需要从其他worker聚合邻域信息。并组合执行模型计算。然后将信息发送给参数服务器或中央节点。

之后由参数服务器或中央节点聚合梯度并向各个 worker 广播更新后的模型参数。

  最后Worker收到后更新本地模型。
  (这里的参数服务器或中央节点与前面的leader类似,但负责的工作较少,比如模型参数的管理和分发;而leader还需要负责整体的数据和计算的调度和分配)
  不过这里的参数服务器或中央节点是可选的,因为模型参数是复制的。但这也意味着每一轮都需要进行梯度同步,以保证模型参数跨节点的一致性。

  对于这种方式,优化的方向可以包括以下几点。
  首先,预分区时保证子图的大小相似可以提高工作负载平衡,另外最小化边切割的数量可以减少聚合步骤中的通信开销。
  传输优化与前面的类似,都是要减少通信开销。
  延迟聚合允许worker在聚合步骤中使用旧的传输数据,这样可以将通信与计算重叠,从而减少通信开销。但为了保证收敛性和最终的准确性,延迟聚合主要基于有界异步形式,关键策略是限制最快的worker和最慢的worker之间的迭代次数在可接受范围。
  激活再生成是通过在前向传播过程中存储所有激活到磁盘中,并在反向传播期间直接从磁盘重新计算或加载激活,从而减少内存压力。

lezjuxqo.png
  分布式full-batch由于每一轮的计算都涉及到整个图形,虽然精度会更高,但通信量很大,并且内存容量需求高。
  相比之下,分布式mini-batch每一轮的计算只涉及小批量,因此它触发的通信量更少,需要的内存容量也更少。
  分布式mini-batch包括采样、模型计算和梯度同步这三个阶段。根据采样和模型计算是否解耦,可以分为基于单独样本的执行和基于联合样本的执行。

  基于单个样本的执行涉及多个Sampler和Worker。
  sampler首先对图数据进行采样生成mini-batch,然后将生成的mini-batch发送给workers。 worker 执行 mini-batch的计算并与其他 worker 进行梯度同步以更新模型参数。以此循环。
  通过为sampler提供足够的计算资源来为worker准备小批量,可以在没有停顿的情况下执行计算。
  并且由于mini-batch之间的数据量和计算量是相似的。而且GNN模型的尺寸较小,因此梯度同步的开销也比较小。因此,关键的优化点是如何加快采样过程,使其及时提供足够的小批量,避免停顿。
  优化技术有以下几点。
  首先,并行化mini-batch是指使用CPU的多线程来加快采样。
  动态mini-batch分配是指不限制采样器和分配器的一一对应关系,还可以通过使用无锁输入队列来实现动态mini-batch的分配。
  Mini-batch传输流水线将一个mini-batch的传输分成多个阶段,每个阶段对应着数据传输、计算和梯度更新等操作,这些操作可以并行执行,从而可以提高训练的效率。(具体还没看懂)
  (对于 GNN 的聚合操作,需要为每个顶点聚合相邻顶点的特征。这意味着计算实际上是由边决定的。)
  基于边划分的并行聚合主要思想是提升分区数据的独立性,从而提高聚合操作的并行性。比如在每个mini-batch 中,根据目标顶点将边划分为多个分区,以确保具有相同目标顶点的边可以位于同一分区中。然后这些分区由多个线程独立处理。由于这些线程之间没有数据冲突,因此聚合操作可以有效地并行完成。
  右图中,在基于联合样本的执行中,图在预处理过程中通过分区被分割成子图。每个worker持有一个子图和模型参数的副本。worker对自己的子图进行采样以生成mini-batch。由于图是分区的,因此可能需要查询其他worker以获得目标顶点的邻居信息。然后对mini-batch进行模型计算并通过与其他worker的交流来同步更新模型。
  对于这个模式,主要关心的是如何让worker的计算更加独立,从而获得更好的性能。
  第一个优化点是通过局部感知技术,将图划分为局部性较好的子图,旨在通过减少节点之间的通信来使节点的计算更加独立。
  重叠分区是指在对图进行分区时复制目标顶点的相邻顶点,从而减少甚至完全消除采样阶段计算节点之间的数据传输(仅限k-hop)。
  细化的独立执行是让每个 worker 独立计算和更新模型参数,然后使用额外的 refine 操作定期对模型参数进行平均,从而进一步提升并行性。
然后是缓存技术,将来自其他worker的常用顶点信息进行缓存,以减少数据传输的开销。

lezjv68u.png
  这部分是关于通信协议,分为同步通信和异步通信。

  将单个 GNN 层的前向计算分为四个算子: Scatter (SC)、ApplyEdge(AE)、Gather (GA) 和 AppleVertex (AV)。SC 和 GA 是两个图操作,其中顶点特征分别沿边scattered并gathered到目标顶点。AE 和 AV 可能包含神经网络 (NN) 操作,它们分别直接处理目标顶点的边缘特征或聚合特征。

  在同步执行模型中,结合前向和反向传播,将执行流水线分为八个阶段。其中,有两个阶段涉及到边界顶点状态的传递,即GA和▽GA。
在▽GA中,边界顶点的梯度应该被发送回它们所属的worker。因此,GA和▽GA是同步执行模型中的两个同步点。在这些点上,必须阻塞执行流程,直到所有通信完成。

  在同步执行模型中通信协议包括4种。
  第一种是基于广播的协议。在 GNN 训练过程中,每个 worker 直接将自己的梯度或消息广播给所有的worker 进行同步,保证一个 worker 上的顶点具有完整的邻域。不过工作负载不平衡问题会破坏广播的效率,这会导致计算停滞。并且广播会产生很多冗余数据和网络拥塞。因此,这种协议适用于worker之间通信较少,且通信量不大的情况。
  基于点对点的协议是一种在worker之间共享信息的细粒度通信方法,可以将梯度或消息直接发送给特定的worker,这种协议适用于worker之间通信频繁、通信量较大的情况。
  基于流水线的通信协议,将计算和通信过程分成多个阶段,每个阶段完成一部分计算和通信,并将计算结果传递给下一个阶段。
  对于共享内存通信。为了大规模训练大型GNN,可以利用CPU内存来检索所需的信息。因此可以将完整的图和特征存储在CPU共享内存中,而每个GPU的设备内存则被视为缓存。

lezjvdht.png
  为了降低通信成本并提高训练效率,提出了几种通信协议。

  在执行流水线中移除计算图计算的同步点会引入 I 类异步。在 I类异步中,worker不等待最新信息的到达。相反,它使用从先前epoch中缓存或接收到的顶点的历史信息,来执行目标顶点的聚合。在▽GA阶段中也使用了类似的历史梯度。

在GNN训练期间,当权重参数需要更新时,会出现另一个同步点。通过删除这样的同步点,形成了II类异步。在II类异步中,如果一个worker完成了当前epoch的计算,它不一定要等待其他worker完成,而是全局更新权重以开始下一个epoch。相反,它可以使用由前几个epoch更新的历史权重并立即开始计算下一个epoch。

  I类异步消除了聚合阶段的同步,II类异步消除了模型权重更新阶段的同步。 I 类异步专用于GNN 模型计算,而 II 类异步已广泛应用于传统深度学习,相应的技术可以直接引入 GNN 训练中。

  异步 GNN 通信协议用于支持异步执行模型。通常,引入异步意味着在训练中应该使用陈旧的信息。
  有三种流行的陈旧模型: 固定Epoch的陈旧性、自适应Epoch的陈旧性和基于变化的陈旧性。
  这几种模型都是为了使陈旧性有界,也就是前面提到过的保证延迟聚合是有界异步的。

lezjvly1.png
  这部分介绍了设计分布式GNN训练的软硬件平台。
  软件平台给出的是目前已有的比较流行的框架。
  硬件平台介绍了多CPU、多GPU以及混合设备的情况。
  这些都比较好理解。

lezjvqzz.png
  这是文献1中给出的不同软件框架用到的技术分类,供大家参考。

lezjw333.png
  这是文献2中给出的不同软件框架用到的技术分类。

lezjw8ti.png
  这是看到的另一篇综述,里面也提到了一些相关的。

lezjwgbe.png
  再完整的回顾和总结一下。
  对于一张大图、一个GNN模型、以及多台计算节点,如何去实现分布式并行加速。
  常见的分布式DNN训练包括数据并行、模型并行和混合并行。对于分布式GNN来说,也可以从这几个方向出发。
  但GNN模型一般很简单,甚至可能就两层,所以模型并行不是很有用。更多是从数据并行上来扩展,毕竟图数据可以是很大的。
  对于计算节点,可以是CPU、GPU、Serverless或FPGA等的组合。

  因此一轮分布式GNN的流程就变成了:大图分割为小图,将小图分发到各个节点进行模型计算,然后将各节点的梯度组合进行梯度更新。
  这三个阶段中,每个阶段都有学者进行了优化研究,并考虑了“内存、通信、效率”等指标,或者说“内存需求高、负载不平衡、大量数据传输”等问题。

  分割图时需要考虑如何更好的对图分区,以减少之后的通信,并如何提高batch生成和分发的效率。
  对于大图,可以通过分区拆分成子图,或者采样生成mini-batch。
  可以从图或特征的角度,按节点、分层、子图来划分。
  还可以使用成本模型来指导更好的分区,或者在特征维度上拆分来探索特征级的并行性。为了减少数据传输的开销,可以使用缓存或者传输流水线来进行优化。

  模型计算涉及到聚合和组合两个操作。聚合阶段需要从其他计算节点获取邻居信息,因此对于负载平衡和通信的要求较高。
  可以使用缓存技术来优化,比如缓存重复数据,或缓存k-hop的邻居信息。对于传输路径和策略也可以进行优化。还可以设计如何让计算节点更加独立,以便充分发挥并行性。
  而由于GNN模型比较简单,因此组合阶段一般没有什么优化点。

  对于梯度的同步,除了传统的同步等待外,还可以允许使用k轮的旧数据,也可以让节点先独立计算,最后只是再做一个平均运算。

  其他还有不同平台之间的传输加速优化方向可以研究。一般而言,CPU更适合用于采样,而GPU则用于计算。

lezjwnsb.png
这里是一些延伸阅读,供大家参考。

https://github.com/chwan1016/awesome-gnn-systems
https://github.com/zhenyuyangmq/awesome-graph-level-learning
https://lgd.gd/2020/04/30/分布式深度学习研究笔记/
https://www.cnblogs.com/rossiXYZ/p/14856464.html
https://github.com/dglai/WWW20-Hands-on-Tutorial/blob/master/_legacy/basic_apps/BasicTasks_pytorch.ipynb
https://towardsdatascience.com/graph-ml-in-2022-where-are-we-now-f7f8242599e0

Recommend:

New Conferences:
Learning on Graphs Conference:https://logconference.org/——(quality of LoG reviews was often better than those at NeurIPS or ICML)

lezjwzms.png
  谢谢大家!


{music-list id="2403800862" loop="none" autotheme="1" order="list" color="#1989fa" autoplay="autoplay"/}

{lamp/}

以下内容仅供参考。。。
可额外阅读的两篇综述文章:

  1. https://blog.csdn.net/sxf1061700625/article/details/128738944
  2. https://blog.csdn.net/sxf1061700625/article/details/129186249

Worker与Leader

Worker节点是否有GNN模型

​  是的,Worker节点在分布式GNN中也拥有GNN模型。在分布式GNN中,数据和模型都被分配到不同的Worker节点上,每个节点都拥有完整的GNN模型,并在本地处理数据的一部分。Worker节点会通过和Leader节点的通信来获取全局模型和参数更新,以便每个节点都能够更新其本地模型。这样做可以大大减少数据传输的开销,同时使得模型更新的速度更快。​

worker之间为什么需要聚合操作?

​  在分布式 GNN 中,每个 worker 节点只拥有一部分的节点和边,因此需要在所有的 worker 节点之间共享信息和参数,以获得更全局的信息来进行训练和推断。

  为了达到这个目的,每个 worker 节点需要在局部更新之后将它们的参数和信息发送到其他 worker 节点,其他 worker 节点也需要将它们的参数和信息发送给当前节点。这种交换和聚合的操作被称为“聚合操作”。

  在聚合操作中,不同的 worker 节点将各自的信息发送给 leader 节点,leader 节点将它们的信息聚合在一起并计算平均值或其他统计信息,然后将聚合后的信息发送回每个 worker 节点。这样,所有 worker 节点就可以共享信息和参数,并且每个节点都可以从全局信息中受益,而不仅仅是从局部信息中学习。

leader节点整合不同worker节点计算的结果后,向worker节点广播的是什么内容

  当leader节点整合不同worker节点计算的结果后,它向worker节点广播的是新的模型参数。在分布式GNN中,每个worker节点会计算部分训练数据的梯度并上传给leader节点。Leader节点会根据接收到的不同worker节点的梯度进行参数的更新,然后将新的模型参数广播给所有worker节点。这样,所有worker节点都能够使用新的模型参数进行下一轮训练。广播的模型参数通常是以消息的形式发送到每个worker节点。

worker在聚合时已经同步了梯度,为什么leader还需要广播新的模型参数

  在分布式训练中,由于网络传输和计算等因素的影响,不同的worker节点可能会得到不完全一致的模型参数。因此,当leader节点收集到各个worker节点的梯度后,需要对这些梯度进行平均或其他聚合操作,以得到更为准确的模型参数。这些新的模型参数需要广播回各个worker节点,使得它们在下一轮迭代中使用相同的参数进行计算。

  另外,为了提高训练效率,在分布式训练中通常会使用异步更新的方式进行参数更新。在这种情况下,leader节点计算出的新模型参数可能已经超过了某些worker节点当前所使用的参数,因此需要将这些新的参数广播回各个worker节点,以确保它们在下一轮迭代中使用最新的参数进行计算。

“在所有的 worker 节点之间共享信息和参数”,这里的“信息和参数”指的是什么

  这里的“信息和参数”指的是模型参数和节点之间的信息(如梯度信息)等。在分布式GNN中,模型参数会在不同的worker节点之间共享和传递,以便每个节点都可以计算模型的更新。在执行过程中,不同节点之间还需要共享梯度信息,以便节点可以协同完成模型参数的更新。因此,在分布式GNN中,节点之间需要共享模型参数和梯度信息等数据。

worker获得其他worker的信息后,如何使用这些信息

  当worker节点获得其他worker节点的信息后,它们会使用这些信息来更新自己的参数。具体来说,worker节点会将接收到的信息与自己的参数进行聚合操作,以得到一个新的参数估计。这个新的参数估计会被用于下一轮迭代的模型训练过程中。在分布式GNN中,聚合操作通常使用平均或加权平均的方式进行,以保证每个worker节点对模型的更新有相同的贡献。

worker会收到多少次其他worker发送的消息

  这个取决于具体的算法和实现细节,无法一概而论。在分布式 GNN 中,例如在进行消息传递算法(如 GAT、GCN 等)时,每个 worker 节点需要向其邻居节点发送消息,然后再接收邻居节点的消息并进行聚合。在这种情况下,worker 节点会收到多次其他 worker 节点发送的消息。但是在其他类型的分布式 GNN 算法中,消息的发送和接收次数可能会有所不同。

worker是否会收到所有其他worker的消息

  根据上下文推断,这里的“所有其他worker的消息”指的是所有其他 worker 发送过来的消息。在分布式 GNN 中,所有 worker 节点都要相互通信来共享参数和信息,因此一个 worker 节点可能会收到来自多个其他 worker 节点的消息。不过具体收到多少个消息取决于具体的算法实现和网络拓扑结构。

如何确定某一个worker会收到哪些其他worker的消息

  在分布式GNN中,决定一个worker会收到哪些其他worker的消息主要取决于两个因素:

  • 分配策略:根据不同的分配策略,leader会将不同的任务分配给不同的worker,而这些任务的执行会需要不同的worker之间交换信息和参数。例如,在基于图划分的策略下,将节点分配给不同的worker时,需要考虑节点在图中的位置,使得同一子图的节点能够被分配给同一个worker,从而最小化跨worker之间的通信量。
  • 节点邻居:在基于图的模型中,每个节点都有一组邻居节点,因此在执行GNN时,需要考虑节点邻居之间的交互,而这些邻居节点可能被分配给不同的worker。因此,每个worker需要接收来自其邻居节点所在的worker发送的消息,并向邻居节点所在的worker发送本地计算得到的结果。这样,通过多轮的消息传递,每个节点都可以聚合来自所有邻居节点的信息,从而更新本地模型。

worker是否会收到非邻居节点的worker的消息

  在常见的分布式 GNN 算法中,worker 一般只与其邻居节点的 worker 进行信息和参数的交换。因此,如果算法实现正确,worker 不会收到非邻居节点的 worker 的消息。当然,在某些特定场景下,也可能会有 worker 之间进行全局信息交换的算法。但是,在这种情况下,由于需要大量的通信开销,不建议在大规模分布式系统中使用。

Vertex-centric Workload Partition

详解Vertex-centric Workload Partition的流程步骤

  Vertex-centric Workload Partition(VWP)是一种分布式图神经网络训练的策略,下面是其主要的流程步骤:

  1. 数据划分 :将大规模的图数据划分成小的子图,每个子图由多个节点和边组成,每个节点和边包含一个特征向量。
  2. 节点划分 :将每个子图中的节点按照一定规则划分到不同的 worker 节点上。通常采用的划分方式是 1D、1.5D、2D、3D。
  3. 模型初始化 :所有的 worker 节点在本地初始化一个相同的模型。
  4. 超级步(Superstep)迭代 :每个超级步包含一系列的局部迭代(Local Iteration),每个 worker 节点针对本地划分的节点集合执行一次局部迭代。每个超级步中的局部迭代次数通常是固定的。
  5. 前向传播计算 :在每个 worker 节点的局部迭代中,首先进行前向传播计算,即将每个节点的特征向量作为输入,计算得到输出向量。
  6. 聚合操作 :每个 worker 节点在执行完局部迭代后,将计算得到的输出向量发送到其他 worker 节点,然后接收其他 worker 节点发送过来的输出向量,并进行聚合操作,得到最终的输出向量。不同的聚合操作方式包括平均聚合、最大聚合等。
  7. 反向传播计算 :在聚合操作后,每个 worker 节点根据聚合结果计算梯度,并将计算得到的梯度进行同步(由leader完成梯度同步)。
  8. 参数更新 :根据同步后的梯度,每个 worker 节点在本地更新模型参数。
  9. 超级步结束 :当所有的 worker 节点都完成了当前超级步中的局部迭代后,超级步结束,进入下一轮迭代。
  10. 模型输出 :训练完成后,将最终的模型输出到本地或分布式存储系统中。

  以上是 Vertex-centric Workload Partition 的主要流程步骤。该策略通过将节点划分到不同的 worker 节点上,利用局部迭代和聚合操作等方式实现了分布式图神经网络的训练。

leader的任务是什么

  在Vertex-centric Workload Partition中,leader的任务是协调整个分布式系统的训练过程,包括:

  1. 确定分区方案 :leader需要根据图结构和计算负载情况,将顶点划分到不同的worker节点上,以实现负载均衡和数据切分。
  2. 分配计算任务 :leader需要将计算任务分配给各个worker节点,以确保每个节点负责的计算任务相对均衡。
  3. 聚合梯度 :每个worker节点在完成本地计算后,需要将计算得到的梯度信息发送给leader,由leader负责梯度聚合和模型参数更新,以确保模型收敛。
  4. 通信协调 :leader需要在各个worker节点之间协调通信,确保数据的正确传输和计算的正确执行。
  5. 管理系统状态 :leader需要记录和管理分布式系统的状态,例如每个worker节点的计算状态和梯度信息,以及系统的吞吐量和延迟等指标。

  总之,leader的任务是协调整个分布式系统的训练过程,确保每个节点的计算任务和通信任务都能够协调有序地执行,并最终完成模型的训练。

Vertex-centric Workload Partition中的1D、1.5D、2D、3D是什么

  Vertex-centric Workload Partition是一种将图划分为不同的分区,然后将分区分配给不同的处理器或计算机节点来并行处理的技术。这种技术有四种常见的分区方式:1D、1.5D、2D和3D。

  • 1D分区方式:将节点按照它们在图中出现的顺序依次划分到不同的分区中。这种分区方式比较简单,但是可能会导致分区不均衡,因为有些分区中包含的节点可能比其他分区中的节点多。
  • 1.5D分区方式:是1D和2D分区方式的混合,它将节点分为一些大小相等的组,然后将每个组分配给一个分区。这种方法既保证了负载均衡,又降低了通信开销。
  • 2D分区方式:将节点划分到一个二维网格中。这种分区方式适用于具有二维结构的图,例如网格图。它通常需要更多的通信开销,因为每个节点需要与其相邻的节点交换信息。
  • 3D分区方式:将节点划分到一个三维立方体中。这种分区方式适用于具有三维结构的图,例如体数据。它通常需要更多的通信开销,因为每个节点需要与其相邻的节点交换信息。

详解Vertex-centric Workload Partition中的1D分区的步骤

  ​Vertex-centric Workload Partition中的1D分区是将图的节点按照其ID进行划分,将相邻的节点分配到相邻的worker上。下面是1D分区的具体步骤:

  1. 获取图中所有节点的ID。
  2. 将节点按照其ID进行排序。
  3. 根据总的worker数量,计算每个worker需要处理的节点数量,即将所有节点数量除以worker数量并向下取整。
  4. 依次将前面计算出的每个worker需要处理的节点数量分配给每个worker,并确定每个worker需要处理哪些节点。例如,第1个worker需要处理节点ID从0到4999的节点,第2个worker需要处理节点ID从5000到9999的节点,以此类推。
  5. 每个worker在处理时只需要关注自己被分配的节点,通过消息传递与邻居worker交换信息,处理与自己节点有关的计算,然后将结果更新到本地的模型参数中。
      ​1D分区的优点是简单、易于实现,并且具有良好的负载均衡性,适用于节点数量比较少的情况。但当节点数量较大时,节点的ID排序会成为瓶颈,因此更适合使用分布式哈希分区或2D/3D分区等更高效的划分方式。

详解Vertex-centric Workload Partition中的2D分区的步骤

  Vertex-centric Workload Partition中的2D分区是将节点划分到一个二维的网格中,分为横向和纵向两个方向。该分区方法的优点是可以更好地利用计算资源,并且能够处理具有不同级别的数据局部性的图。
  下面是2D分区的步骤:

  1. 确定网格的大小
    首先,需要确定网格的大小。假设我们要将节点划分为r行c列的网格,其中r和c是正整数,需要满足rc≥n,其中n是节点数。
  2. 将节点映射到网格
    接下来,将节点映射到网格中的位置。假设节点v属于第i个区域,将其映射到网格中的位置(vr, vc)。这里vr和vc是v所属的区域在网格中的行和列索引,分别计算方法为:

    $$ vr = (i-1) % r + 1 vc = (i-1) / r + 1 $$

  3. 确定边界节点
    接下来,需要确定每个区域的边界节点。对于第k行第l列的区域,其边界节点为(k, l)、(k+1, l)、(k-1, l)、(k, l+1)和(k, l-1)。
  4. 划分边缘节点
    如果一个节点属于多个区域的边界,需要将其划分到其中一个区域中。通常可以使用一些启发式方法来选择将边缘节点划分到哪个区域中,以最小化通信量和计算量。
  5. 通信和计算
    最后,每个区域在本地计算顶点和边的聚合函数,并通过通信协议与其相邻的区域交换消息以更新它们的聚合结果。在2D分区中,每个节点与其相邻的上下左右四个节点进行通信。

  需要注意的是,2D分区的具体实现方法可能因图的特性和计算资源的不同而有所差异。

Vertex-centric Workload Partition有什么优点,适用于什么情况

  Vertex-centric Workload Partition是一种图划分方法,将图中的节点按照某种规则划分到不同的计算节点(如CPU或GPU)上进行计算,从而提高计算效率。
  它的优点主要包括:

  • 易于实现:将图划分成均匀的数据块并将其分配给不同的计算节点进行处理,使实现变得相对简单。
  • 低延迟:相对于edge-centric方法,每个计算节点只需与其相邻节点通信,从而减少通信量和延迟。
  • 高效利用计算资源:每个计算节点只需处理其分配的节点,从而更好地利用计算资源。
      Vertex-centric Workload Partition适用于节点度数较低的图,因为在这种情况下,节点数量往往是稀疏的,即节点数量远小于边的数量,因此节点的分配和通信负担相对较轻。此外,它还适用于分布式图处理中需要进行迭代计算的算法,如PageRank和Label Propagation等。

Vertex-centric Workload Partition中,worker在什么时候进行梯度同步

  在Vertex-centric Workload Partition中,梯度同步通常发生在每个超级步(superstep)之后。每个超级步之后,每个worker将本地计算的梯度发送给邻居worker,邻居worker使用接收到的梯度进行自己的计算。这个过程通常被称为“消息传递”(message passing)。在所有worker都完成本地计算和邻居之间的消息传递之后,才会开始下一个超级步。这个过程会不断重复,直到模型收敛为止。
  超级步(superstep)是指在分布式计算中,所有参与计算的节点在同一时刻执行的一次计算迭代。在超级步中,节点接收来自其他节点的信息,执行本地计算,并将结果发送给其他节点,完成全局的计算任务。超级步通常是迭代式计算中的一个基本概念,例如在图计算中,每个超级步表示一次迭代,直到达到一定的收敛条件为止。超级步的长度可以由系统或用户自定义,它直接影响到分布式计算的性能和准确度。

Vertex-centric Workload Partition中,梯度同步和聚合操作 有什么区别

  在Vertex-centric Workload Partition中,梯度同步和聚合操作是不同的概念。

  • 梯度同步是指在计算图的每个超级步中,worker节点将本地计算得到的梯度信息发送给邻居节点,接收邻居节点发送过来的梯度信息,以保证各个worker节点计算的模型参数保持一致。这样做可以保证在整个计算图中,各个节点计算的模型参数是相同的。
  • 聚合操作则是在整个计算图的最后一个超级步中进行的,主要是将所有worker节点计算得到的模型参数进行加权平均得到最终的模型参数。这个操作主要是为了保证模型的全局收敛性。

  因此,梯度同步和聚合操作都是在保证模型参数一致性的基础上进行的,但是梯度同步是在计算过程中进行的,而聚合操作是在计算结束后进行的。

Preset-workload-based Execution

Preset-workload-based Execution的流程是什么

  Preset-workload-based Execution(预设工作负载执行)是一种基于工作负载的图神经网络(GNN)执行策略。其执行流程如下:

  1. 预处理阶段:在该阶段,系统首先收集和预处理数据集。该阶段的目的是确定整个GNN模型的工作负载。具体来说,该阶段会预处理图数据集,包括构建邻接矩阵、计算节点特征向量等。预处理阶段只需要执行一次。
  2. 划分工作负载:在该阶段,系统将整个GNN模型的工作负载划分为多个子任务,以便于并行处理。划分的方式可以是固定的,也可以是动态的,取决于具体的实现方式。
  3. 分配任务:在该阶段,系统将不同的子任务分配给不同的计算节点。这里的计算节点可以是单台机器上的不同线程或进程,也可以是不同的机器节点。在分配任务时,系统需要考虑节点的负载均衡,以确保每个节点处理的任务量相当。
  4. 执行任务:在该阶段,每个节点根据分配到的任务,执行GNN模型的前向计算和反向传播。每个节点执行的任务都是预设的,因此不需要进行数据通信和同步。
  5. 收集结果:在该阶段,系统收集所有节点计算的结果,并合并这些结果以得到最终的输出。具体来说,可以将所有节点的输出矩阵按行或列进行拼接,以得到最终的输出矩阵。
  6. 更新模型:在该阶段,系统根据计算的结果更新模型参数。具体来说,可以使用梯度下降等优化算法更新模型参数,以最小化损失函数。

  Preset-workload-based Execution的优点在于可以提前确定工作负载,从而优化计算资源的利用,避免不必要的数据通信和同步,提高GNN模型的计算效率。

Preset-workload-based Execution中,worker在什么时候进行梯度同步

  在Preset-workload-based Execution中,梯度同步的时机与Dispatch-workload-based Execution有所不同。在Preset-workload-based Execution中,梯度同步是在整个训练过程中的固定时间点进行的,一般在一个epoch结束后进行。

  具体地,假设训练过程需要进行N个epoch,每个epoch有M个batch,那么梯度同步就会在每个epoch结束后进行。在这个时刻,所有worker节点会将本地的梯度发送给leader节点,leader节点根据收到的梯度计算出模型参数的更新,并将更新后的模型参数广播给所有worker节点。这样,所有worker节点都会使用更新后的模型参数来继续下一个epoch的训练。

Preset-workload-based Execution中有leader吗

  在Preset-workload-based Execution中,通常不存在显式的leader节点。每个worker节点都是独立的,运行自己的模型并计算自己的梯度。每次梯度计算后,worker节点将其梯度上传到参数服务器或中央节点,中央节点将所有worker节点上传的梯度进行聚合,然后将聚合后的梯度发送回每个worker节点。在这个过程中,中央节点充当了参数服务器的角色,但它并不需要担任领导者的角色。

Preset-workload-based Execution中的参数服务器或中央节点 和 Vertex-centric Workload Partition中leader 有什么区别

  在Preset-workload-based Execution中,参数服务器或中央节点扮演的角色与Vertex-centric Workload Partition中的leader 相似但有所不同。

  在Preset-workload-based Execution中,参数服务器或中央节点仅仅是用于协调和同步各个worker节点之间的计算,而不负责数据的分割和分发。具体来说,每个worker节点都有完整的模型,当worker完成了本地计算之后,会将梯度发送到参数服务器或中央节点进行全局梯度的聚合和更新。因此,参数服务器或中央节点不需要知道具体的数据和计算,只负责聚合梯度并更新全局模型。

  而在Vertex-centric Workload Partition中,leader节点则需要负责整体的数据和计算的调度和分配,以保证所有worker节点可以平衡地参与到计算中。因此,leader节点需要了解具体的数据和计算,并根据数据和计算的特点进行合理的分割和分配。此外,leader节点还需要负责收集和聚合各个worker节点计算的结果,以得到最终的模型参数。

Preset-workload-based Execution中的worker之间是否需要进行数据通信和同步

  在Preset-workload-based Execution中,worker之间需要进行数据通信和同步。具体来说,每个worker都会从参数服务器或中央节点中获取模型的当前参数,然后在本地进行计算和更新,最后将更新后的梯度发送给参数服务器或中央节点进行聚合操作。因此,每个worker都需要进行数据通信和同步,以确保模型的参数和梯度能够在各个节点之间正确地传递和更新。(实际跟预设工作负载的策略有关。如果需要引入邻居节点关系,可以通过修改预设的工作负载来实现。例如,可以在预设工作负载中指定数据集的划分方式,使得workers之间在处理数据时会存在邻居节点关系。另外,可以通过修改模型结构或训练策略,引入邻居节点关系,例如在模型中加入Graph Convolutional Networks(GCN)层或训练策略中引入局部信息聚合(LIA)等技术。)

梯度同步指的是什么,发生在什么阶段

  梯度同步(gradient synchronization)指的是在分布式训练中,不同计算节点上的模型参数梯度需要相互同步以便最终得到全局模型的过程。在模型的反向传播过程中,每个计算节点会计算出本地的模型参数梯度,但由于计算节点之间的模型参数不同,所以需要将各个节点的梯度进行同步以得到全局的梯度,再根据全局梯度更新模型参数。这样可以使得不同计算节点上的模型参数最终趋于一致,从而提高训练的效率和准确性。
  梯度同步一般发生在分布式训练中的反向传播阶段,也就是每个设备/节点在计算完本地梯度后需要将其发送给其它节点,接收并整合其它节点发送过来的梯度,最终计算得到全局梯度,并更新模型参数。这个过程中需要进行通信和同步操作,以保证各个节点的模型参数是一致的。

Individual-sample-based Execution

分布式mini-batch的individual-sample-based execution

  Individual-sample-based execution of distributed minibatch training是一种分布式深度学习的训练方法,旨在将训练数据集分成多个部分,在不同的计算节点上并行处理,从而加速训练过程。

  在传统的批量(batch)训练中,计算节点会在每个超级步(superstep)中处理整个批次的数据。然而,在individual-sample-based execution中,每个计算节点只会在每个超级步中处理单个样本,而不是整个批次。这意味着每个计算节点只需进行少量的计算,从而使得训练速度更快。此外,这种方法还可以在训练过程中降低内存需求,因为计算节点只需要存储单个样本的梯度信息,而不是整个批次的信息。

  在individual-sample-based execution中,每个计算节点只处理属于自己的样本,并在每个超级步中将计算结果发送给参数服务器(PS)。PS在收到所有计算节点的结果后,将它们聚合成单个梯度,并将结果发送回各个计算节点。这样,每个计算节点就可以使用聚合后的梯度更新其本地模型。

  总的来说,individual-sample-based execution是一种高效的分布式深度学习训练方法,它可以减少计算和内存需求,并加速训练过程。

采样生成的mini-batch 如何确保每个顶点都有相似数量的相邻顶点

  在采样生成mini-batch时,为了确保每个顶点都有相似数量的相邻顶点,通常会采用一些采样策略。其中一种常见的策略是使用Metropolis-Hastings采样方法。该方法以当前节点为起点,通过一系列的随机游走来采样邻居节点,以保证采样到的邻居节点是与当前节点相似的。此外,还可以采用一些基于概率的采样方法,例如随机采样、无放回采样等。这些采样方法可以根据具体应用的需求进行选择。在采样的过程中,可以通过控制采样邻居节点的数量来确保每个顶点都有相似数量的相邻顶点。