【笔记】华南理工大学-智能计算方法 考试重点笔记
转载请注明出处:小锋学长生活大爆炸[xfxuezhang.cn]
算了效果不好看不清,去这里看吧:https://blog.csdn.net/sxf1061700625/article/details/131486281
转载请注明出处:小锋学长生活大爆炸[xfxuezhang.cn]
算了效果不好看不清,去这里看吧:https://blog.csdn.net/sxf1061700625/article/details/131486281
1、要求提供修改建议的
Check for grammatical errors and improve the following from the perspective of a conference paper reviewer:
检查语法错误,并以会议论文评审员的角度改进以下内容:
2、根据不同期刊风格来改写
I want you to act as an academic journal editor. Please polish the paragraph from an academic angle based on the writting style of the IEEE Sensors journal:
我希望你能作为一个学术期刊的编辑。请根据IEEE Sensors杂志的写作风格,从学术角度重新润色这段话:
{music-list id="2403800862" loop="none" autotheme="1" order="list" color="#1989fa" autoplay="autoplay"/}
{lamp/}
以下内容仅供参考。。。
可额外阅读的两篇综述文章:
是的,Worker节点在分布式GNN中也拥有GNN模型。在分布式GNN中,数据和模型都被分配到不同的Worker节点上,每个节点都拥有完整的GNN模型,并在本地处理数据的一部分。Worker节点会通过和Leader节点的通信来获取全局模型和参数更新,以便每个节点都能够更新其本地模型。这样做可以大大减少数据传输的开销,同时使得模型更新的速度更快。
在分布式 GNN 中,每个 worker 节点只拥有一部分的节点和边,因此需要在所有的 worker 节点之间共享信息和参数,以获得更全局的信息来进行训练和推断。
为了达到这个目的,每个 worker 节点需要在局部更新之后将它们的参数和信息发送到其他 worker 节点,其他 worker 节点也需要将它们的参数和信息发送给当前节点。这种交换和聚合的操作被称为“聚合操作”。
在聚合操作中,不同的 worker 节点将各自的信息发送给 leader 节点,leader 节点将它们的信息聚合在一起并计算平均值或其他统计信息,然后将聚合后的信息发送回每个 worker 节点。这样,所有 worker 节点就可以共享信息和参数,并且每个节点都可以从全局信息中受益,而不仅仅是从局部信息中学习。
当leader节点整合不同worker节点计算的结果后,它向worker节点广播的是新的模型参数。在分布式GNN中,每个worker节点会计算部分训练数据的梯度并上传给leader节点。Leader节点会根据接收到的不同worker节点的梯度进行参数的更新,然后将新的模型参数广播给所有worker节点。这样,所有worker节点都能够使用新的模型参数进行下一轮训练。广播的模型参数通常是以消息的形式发送到每个worker节点。
在分布式训练中,由于网络传输和计算等因素的影响,不同的worker节点可能会得到不完全一致的模型参数。因此,当leader节点收集到各个worker节点的梯度后,需要对这些梯度进行平均或其他聚合操作,以得到更为准确的模型参数。这些新的模型参数需要广播回各个worker节点,使得它们在下一轮迭代中使用相同的参数进行计算。
另外,为了提高训练效率,在分布式训练中通常会使用异步更新的方式进行参数更新。在这种情况下,leader节点计算出的新模型参数可能已经超过了某些worker节点当前所使用的参数,因此需要将这些新的参数广播回各个worker节点,以确保它们在下一轮迭代中使用最新的参数进行计算。
这里的“信息和参数”指的是模型参数和节点之间的信息(如梯度信息)等。在分布式GNN中,模型参数会在不同的worker节点之间共享和传递,以便每个节点都可以计算模型的更新。在执行过程中,不同节点之间还需要共享梯度信息,以便节点可以协同完成模型参数的更新。因此,在分布式GNN中,节点之间需要共享模型参数和梯度信息等数据。
当worker节点获得其他worker节点的信息后,它们会使用这些信息来更新自己的参数。具体来说,worker节点会将接收到的信息与自己的参数进行聚合操作,以得到一个新的参数估计。这个新的参数估计会被用于下一轮迭代的模型训练过程中。在分布式GNN中,聚合操作通常使用平均或加权平均的方式进行,以保证每个worker节点对模型的更新有相同的贡献。
这个取决于具体的算法和实现细节,无法一概而论。在分布式 GNN 中,例如在进行消息传递算法(如 GAT、GCN 等)时,每个 worker 节点需要向其邻居节点发送消息,然后再接收邻居节点的消息并进行聚合。在这种情况下,worker 节点会收到多次其他 worker 节点发送的消息。但是在其他类型的分布式 GNN 算法中,消息的发送和接收次数可能会有所不同。
根据上下文推断,这里的“所有其他worker的消息”指的是所有其他 worker 发送过来的消息。在分布式 GNN 中,所有 worker 节点都要相互通信来共享参数和信息,因此一个 worker 节点可能会收到来自多个其他 worker 节点的消息。不过具体收到多少个消息取决于具体的算法实现和网络拓扑结构。
在分布式GNN中,决定一个worker会收到哪些其他worker的消息主要取决于两个因素:
在常见的分布式 GNN 算法中,worker 一般只与其邻居节点的 worker 进行信息和参数的交换。因此,如果算法实现正确,worker 不会收到非邻居节点的 worker 的消息。当然,在某些特定场景下,也可能会有 worker 之间进行全局信息交换的算法。但是,在这种情况下,由于需要大量的通信开销,不建议在大规模分布式系统中使用。
Vertex-centric Workload Partition(VWP)是一种分布式图神经网络训练的策略,下面是其主要的流程步骤:
以上是 Vertex-centric Workload Partition 的主要流程步骤。该策略通过将节点划分到不同的 worker 节点上,利用局部迭代和聚合操作等方式实现了分布式图神经网络的训练。
在Vertex-centric Workload Partition中,leader的任务是协调整个分布式系统的训练过程,包括:
总之,leader的任务是协调整个分布式系统的训练过程,确保每个节点的计算任务和通信任务都能够协调有序地执行,并最终完成模型的训练。
Vertex-centric Workload Partition是一种将图划分为不同的分区,然后将分区分配给不同的处理器或计算机节点来并行处理的技术。这种技术有四种常见的分区方式:1D、1.5D、2D和3D。
Vertex-centric Workload Partition中的1D分区是将图的节点按照其ID进行划分,将相邻的节点分配到相邻的worker上。下面是1D分区的具体步骤:
Vertex-centric Workload Partition中的2D分区是将节点划分到一个二维的网格中,分为横向和纵向两个方向。该分区方法的优点是可以更好地利用计算资源,并且能够处理具有不同级别的数据局部性的图。
下面是2D分区的步骤:
将节点映射到网格
接下来,将节点映射到网格中的位置。假设节点v属于第i个区域,将其映射到网格中的位置(vr, vc)。这里vr和vc是v所属的区域在网格中的行和列索引,分别计算方法为:
$$ vr = (i-1) % r + 1 vc = (i-1) / r + 1 $$
需要注意的是,2D分区的具体实现方法可能因图的特性和计算资源的不同而有所差异。
Vertex-centric Workload Partition是一种图划分方法,将图中的节点按照某种规则划分到不同的计算节点(如CPU或GPU)上进行计算,从而提高计算效率。
它的优点主要包括:
在Vertex-centric Workload Partition中,梯度同步通常发生在每个超级步(superstep)之后。每个超级步之后,每个worker将本地计算的梯度发送给邻居worker,邻居worker使用接收到的梯度进行自己的计算。这个过程通常被称为“消息传递”(message passing)。在所有worker都完成本地计算和邻居之间的消息传递之后,才会开始下一个超级步。这个过程会不断重复,直到模型收敛为止。
超级步(superstep)是指在分布式计算中,所有参与计算的节点在同一时刻执行的一次计算迭代。在超级步中,节点接收来自其他节点的信息,执行本地计算,并将结果发送给其他节点,完成全局的计算任务。超级步通常是迭代式计算中的一个基本概念,例如在图计算中,每个超级步表示一次迭代,直到达到一定的收敛条件为止。超级步的长度可以由系统或用户自定义,它直接影响到分布式计算的性能和准确度。
在Vertex-centric Workload Partition中,梯度同步和聚合操作是不同的概念。
因此,梯度同步和聚合操作都是在保证模型参数一致性的基础上进行的,但是梯度同步是在计算过程中进行的,而聚合操作是在计算结束后进行的。
Preset-workload-based Execution(预设工作负载执行)是一种基于工作负载的图神经网络(GNN)执行策略。其执行流程如下:
Preset-workload-based Execution的优点在于可以提前确定工作负载,从而优化计算资源的利用,避免不必要的数据通信和同步,提高GNN模型的计算效率。
在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节点。每个worker节点都是独立的,运行自己的模型并计算自己的梯度。每次梯度计算后,worker节点将其梯度上传到参数服务器或中央节点,中央节点将所有worker节点上传的梯度进行聚合,然后将聚合后的梯度发送回每个worker节点。在这个过程中,中央节点充当了参数服务器的角色,但它并不需要担任领导者的角色。
在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之间需要进行数据通信和同步。具体来说,每个worker都会从参数服务器或中央节点中获取模型的当前参数,然后在本地进行计算和更新,最后将更新后的梯度发送给参数服务器或中央节点进行聚合操作。因此,每个worker都需要进行数据通信和同步,以确保模型的参数和梯度能够在各个节点之间正确地传递和更新。(实际跟预设工作负载的策略有关。如果需要引入邻居节点关系,可以通过修改预设的工作负载来实现。例如,可以在预设工作负载中指定数据集的划分方式,使得workers之间在处理数据时会存在邻居节点关系。另外,可以通过修改模型结构或训练策略,引入邻居节点关系,例如在模型中加入Graph Convolutional Networks(GCN)层或训练策略中引入局部信息聚合(LIA)等技术。)
梯度同步(gradient synchronization)指的是在分布式训练中,不同计算节点上的模型参数梯度需要相互同步以便最终得到全局模型的过程。在模型的反向传播过程中,每个计算节点会计算出本地的模型参数梯度,但由于计算节点之间的模型参数不同,所以需要将各个节点的梯度进行同步以得到全局的梯度,再根据全局梯度更新模型参数。这样可以使得不同计算节点上的模型参数最终趋于一致,从而提高训练的效率和准确性。
梯度同步一般发生在分布式训练中的反向传播阶段,也就是每个设备/节点在计算完本地梯度后需要将其发送给其它节点,接收并整合其它节点发送过来的梯度,最终计算得到全局梯度,并更新模型参数。这个过程中需要进行通信和同步操作,以保证各个节点的模型参数是一致的。
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时,为了确保每个顶点都有相似数量的相邻顶点,通常会采用一些采样策略。其中一种常见的策略是使用Metropolis-Hastings采样方法。该方法以当前节点为起点,通过一系列的随机游走来采样邻居节点,以保证采样到的邻居节点是与当前节点相似的。此外,还可以采用一些基于概率的采样方法,例如随机采样、无放回采样等。这些采样方法可以根据具体应用的需求进行选择。在采样的过程中,可以通过控制采样邻居节点的数量来确保每个顶点都有相似数量的相邻顶点。
转载请注明出处:小锋学长生活大爆炸[xfxuezhang.blog.csdn.net]
原版文件链接:https://conferences.sigcomm.org/sigcomm/2013/misc/sig-alternate-10pt.cls
官网:ACM Primary Article Template
在这下载:
效果
但注意cls文件用哪个