没有合适的资源?快使用搜索试试~ 我知道了~
3920多GPU下高效的GNN训练0Zhenkun Cai 1,Qihui Zhou 1,Xiao Yan 2,Da Zheng 3,Xiang Song 3,Chenguang Zheng 1,James Cheng 1,George Karypis301香港中文大学计算机科学与工程系2南方科技大学计算机科学与工程系3亚马逊网络服务zkcai,qhzhou,cgzheng,jcheng@cse.cuhk.edu.hk,yanx@sustech.edu.cn,dzzhen,xiangsx,gkarypis@amazon.com0摘要:同时利用多个GPU训练图神经网络(GNNs)对于处理大型图和实现高效率至关重要。然而,我们发现现有系统由于不合适的数据布局和训练过程而导致通信成本高和GPU利用率低。因此,我们提出了一种名为分布式采样和流水线(DSP)的系统,用于多GPUGNN训练。DSP采用定制的数据布局来利用GPU之间快速的NVLink连接,将图拓扑和常用节点特征存储在GPU内存中。为了实现多GPU的高效图采样,我们引入了一种集体采样原语(CSP),将采样任务推送到数据以减少通信。我们还设计了基于生产者-消费者的流水线,允许来自不同小批量的任务同时运行,以提高GPU利用率。我们将DSP与最先进的GNN训练框架进行了比较,结果表明,DSP在不同的数据集、GNN模型和GPU数量下始终优于基准。DSP的加速比可以高达26倍,在大多数情况下超过2倍。0CCS概念:•计算方法→机器学习;并行计算方法。0关键词:图神经网络,模型训练,GPU01 引言0*前两位作者的贡献相同,肖燕为通信作者。0图1.使用8个GPU时不同图采样方法的通信量(与理想情况相对归一化)0高通信成本。对于图采样,Quiver和DGL-UVA通过PCIe从CPU内存读取采样的图节点。这导致读取放大(即读取数据量大于请求的量),因为3930PPoPP '23,2023年2月25日至3月1日,加拿大蒙特利尔,QC,加拿大Zhenkun等人。0表1.在使用不同GPU时,DGX-1GPU服务器上NVLink和PCIe的总带宽(GBps)[26]01-GPU 2-GPU 4-GPU 8-GPU0PCIe 32 32 64 1280NVLink 0 100 400 12000(a)图采样(b)特征加载0图2.在更改物理线程时,Quiver的图采样和特征加载内核的执行速度。使用1个具有5120个物理线程的GPU。0最小的PCIe请求大小为50字节[24](32字节用于有效负载,18字节用于包头)。如图1所示,UVA采样的通信量比只获取所需数据的假设理想情况要大得多。更糟糕的是,UVA采样在慢速的PCIe上进行通信,而GPU之间的NVLink连接通常要快得多,根据表1。此外,Quiver和DGL-UVA只允许具有直接NVLink连接的GPU访问彼此的缓存节点特征。鉴于NVLink带宽比PCIe大得多,从没有直接NVLink连接(通过多跳转发)的远程GPU读取节点特征可能仍然比通过PCIe从CPU内存读取更快。0低GPU利用率。Quiver和DGL-UVA无法充分利用GPU,因为它们按顺序执行不同任务的内核。这部分是因为GNN训练的内核比普通神经网络的内核轻。例如,图2显示,在GPU上使用所有物理线程之前,图采样和特征加载的运行时间稳定下来。当多个GPU被利用时,问题变得更加严重,因为(i)每个GPU的工作负载变轻,(ii)内核更有可能被图数据的不规则内存访问(UVA或全局内存访问)所阻塞。通过解决这两个问题,我们为多GPU的高效基于采样的GNN训练构建了DSP系统。为了减少通信成本,DSP采用定制的数据布局,充分利用GPU之间快速的NVLink[28]连接。具体而言,图结构被划分为连接紧密的图块,每个图块存储在一个GPU上。这使得图采样可以通过快速的NVLink进行所有通信,并避免了PCIe的读取放大问题。利用剩余的内存,0每个GPU缓存不同的节点特征,所有GPU形成一个大的共享缓存,通过NVLink共享,减少通过PCIe访问节点特征的CPU内存访问。对于每个GNN训练的小批量数据,DSP使用三个任务,即采样器、加载器和训练器。采样器为一组种子节点生成图样本。加载器加载图样本的节点特征。训练器对图样本进行计算以更新模型。对于采样器,我们提出了一种集体采样原语(CSP),其中GPU联合对分区图进行采样。CSP将每个图节点的采样任务推送到其所在的GPU上,而不是拉取邻接列表。这种任务推送范式的通信成本明显低于从远程GPU拉取数据(见图1),因为通常只会对节点的邻居采样一小部分。CSP还允许在每个GPU上融合小型采样内核以实现高效执行,并且在表达不同图采样方法方面具有通用性。为了提高GPU利用率,我们观察到不同小批量的采样器、加载器和训练器之间没有数据依赖,因此可以同时运行。因此,我们基于生产者-消费者队列设计了一个训练流水线,其中任务通过为队列生成数据或从队列消费数据来异步运行。通过流水线,通信内核可能会导致死锁,因为它们在GPU上具有不同的启动顺序。我们通过协调GPU的内核启动顺序来解决死锁问题。我们进行了大量实验证明,DSP相对于PyG [9]、DGL[39]、DGL-UVA和Quiver[2]等最先进的GNN训练系统具有持续的性能优势。结果表明,DSP在不同的数据集、GNN模型和GPU数量下始终优于基准。相对于基准系统,加速比可以达到一个数量级,在大多数情况下超过2倍。DSP还具有比基准系统更好的可扩展性。我们还进行了详细的分析以评估DSP的设计。结果表明,CSP比现有工作中基于CPU和基于UVA的采样设计更加高效,加速比可以高达20倍。训练流水线有效提高了GPU利用率,可以将时代时间缩短1.5倍以上。总之,我们的工作做出了以下贡献。0•我们观察到现有系统在使用多个GPU进行基于采样的GNN训练时存在高通信成本和低GPU利用率的问题。0•我们首次提出CSP,它是首个可以与多个GPU一起进行图采样的方法。CSP在表达不同图采样方案方面具有通用性,并通过使用快速NVLink和将任务推送到数据中来提高效率。0•我们观察到不同GNN训练小批量的任务是独立的,并设计了基于生产者-消费者的管道来重叠任务以提高GPU利用率。01CSP在比Ideal更少的通信上使用,因为Ideal对图拓扑的所有访问都是远程的,而CSP在每个GPU上有一些本地访问。1233940DSP:高效的多GPU GNN训练 PPoPP '23,2023年2月25日至3月1日,加拿大蒙特利尔0A B D0G E F0H0C K A0B K G H0C E0A0B H0C E0种子0第1层0第2层0(a)图(b)节点级采样(c)层级采样0图3.图采样的示例,种子节点为�,层数为2,扇出向量为[2,2]。0•我们根据快速NVLink量身定制了数据布局,并实现了DSP系统,大大优于用于GNN训练的最先进系统。02基于采样的GNN训练在本部分中,我们介绍了用于GNN的基于采样的训练背景,以便进一步讨论。考虑一个图�=(�,�),其中每个节点�∈�都有一特征向量�0�(例如,引用网络中每个作者节点的作者简介)。一个�层GNN通过从�的邻居中聚合信息来为每个节点�生成嵌入向量���,共计�层。在�层(�≥1)中,GNN模型可以表示为0��� = AGGREGATE�(��−1�,��∈N(�)∪�;��),(1)0其中集合N(�)包含图中节点�的邻居,��−1�是(�−1)层中节点�的嵌入,而��表示0�层的聚合函数的模型参数。对于第一层,�的�0�是输入图中节点的特征向量。为了训练GNN模型,将节点�的输出嵌入���与真实嵌入��进行比较,以计算模型参数的梯度。通过展开方程(1),可以观察到计算���需要节点�的1跳邻居的(�−1)层嵌入,而些邻居的嵌入又依赖于节点�的2跳邻居的(�−2)层嵌入。因此,对节点�进行训练需要节点�的�跳邻居的所有节点。由于在真实世界的幂律图中,一个节点可能有许多邻居,并且涉及的节点数量随着跳数的增加而迅速增加,因此对于大型图,广泛使用基于采样的训练(后文简称训练)方法,因为它具有高效率和良好的准确性[7,22,36]。具体而言,训练以小批量的方式进行,每个小批量中,使用某些节点(称为批次的种子节点)的输出嵌入来计算梯度,而不是使用图中的所有节点。此外,当计算种子节点的输出嵌入时,不是使用种子节点的�跳邻域的所有节点,而是从种子节点的�跳邻域中采样一个子图(称为图样本)来减少复杂性。特别地,对于�层GNN,首先在第一层中对种子节点的邻居进行采样,然后在第二层中对第一层样本的邻居进行采样;该过程一直持续到达到�层,形成了一个具有树结构的子图。0加载器0种子节点0采样器0训练器0图数据块0热特征0模型0图数据块0热特征0模型0加载器0采样器0训练器0图数据块冷0特征0CPU0GPU GPU0种子节点0图4.DSP的整体架构。0图3显示了两种流行的图采样方法,节点级采样[14]和层级采样[10],对于一个2层GNN。扇出向量控制每层要采样的节点数量。节点级采样独立地对同一层中的每个节点进行采样,扇出向量[2,2]意味着对于两个层,每个节点应该采样两个邻居。层级采样是针对同一层中的所有节点共同进行的,扇出向量[2,2]意味着在两个层中,采样节点的总数应为2。节点的采样可以是无偏的(即邻居节点的采样是均匀的),也可以是有偏的(即每个节点都有一个权重,并且邻居节点的采样根据权重进行)。请注意,对于图样本,需要计算种子节点的输出嵌入所需的所有节点的特征向量。0特征缓存。节点特征向量通常具有很高的维度,对于大型图可能无法放入GPU内存。因此,一些节点特征向量需要存储在CPU内存中,并在需要时从CPU获取到GPU。现有研究观察到在GNN训练过程中某些节点的访问频率远高于其他节点[18,21,25],并提出将这些热节点缓存在GPU内存中,以减少特征获取成本[18,21,25]。选择热节点的标准有很多,例如大入度、PageRank得分和反向PageRank得分。03 DSP框架0在本部分,我们介绍DSP的数据布局和训练流程。我们假设DSP在文本中使用多个GPU,但请注意,DSP也可以使用单个GPU。03.1 数据布局如图4所示,DSP将图拓扑划分为数据块,并将每个数据块存储在一个GPU上,其中每个数据块包含一些节点及其邻接列表。我们使用METIS[17]中的图划分算法,以最小化跨数据块边的数量并平衡数据块的大小。3950PPoPP '23,2023年2月25日至3月1日,加拿大蒙特利尔Zhenkun等人0数据块。这是因为DSP要求每个GPU处理其自己的数据块中的节点,并且最小化的边交叉减少了跨GPU的通信。对于节点特征向量,我们在GPU内存中缓存尽可能多的热节点,并将其他节点(称为冷节点)存储在CPU内存中,并使用UVA技术访问它们。DSP默认使用大入度选择热节点,并与其他标准兼容。与Quiver [2]和DGL-UVA[25]不同,它将缓存的特征向量复制到不同的GPU组中,DSP使用分区缓存,每个GPU缓存不同的特征向量。DSP的数据布局考虑了利用快速NVLink和数据局部性。如表1所示,GPU之间的NVLink带宽远远大于GPU和CPU之间的PCIe带宽。(i)通过在GPU上对图拓扑进行分区,图采样只涉及NVLink上的通信,并且不需要访问CPU内存。这是可行的,因为即使对于大型图(例如,具有十亿个边的图仅占用约8GB),图拓扑也很小。请注意,DSP也可以通过将热节点存储在GPU内存中,将其他节点存储在CPU内存中(通过UVA访问)来处理大型图补丁。(ii)通过分区的特征缓存,在所有GPU的聚合内存中缓存了更多的节点特征,从而增加了可以通过NVLink访问的数据量。根据经验证明,即使跨GPU组进行多跳NVLink通信(通过中间GPU中继),其速度也比通过UVA访问CPU内存要快。(iii)最后,图拓扑、缓存的节点特征和采样种子节点在GPU之间进行共同分区以实现数据局部性。03.2训练过程DSP保持与Quiver和DGL-UVA相同的批量同步并行(BSP,即一个迭代应该观察其前面迭代中的所有模型更新)训练语义。采用数据并行范式,在每个GPU上处理不同的图采样的小批量。如图 4所示,每个GPU运行三个工作器,执行不同的任务,我们将详细介绍如下。0采样器。在一个小批量中,每个GPU从分配给它的种子节点中加载一批种子节点,并与其他GPU上的采样器合作为其种子节点构建图采样。在数据准备期间,我们将种子节点 �分配给包含 �的图块的GPU,以减少通信。当采样器需要访问存储在其他GPU上的图拓扑时,它会通知这些GPU上的采样器而不是拉取数据,以减少通信。这是通过我们的图采样集体原语(CSP)实现的,将在第 4 节中介绍。例如,对于图 3中的示例,给定种子节点 �,采样器将构建图 3 (b)中的图采样。0加载器。对于一个小批量,每个GPU上的加载器获取处理的图采样的节点特征向量0GPU。例如,图 3 (b) 中的图采样需要节点 � , � , � , � , � ,� 和 �的特征向量。在特征加载之前,加载器收集所有图采样的所请求节点,以避免重复加载。对于在GPU内存中缓存的热特征向量,加载器使用NVLink上的集体全互连通信。对于存储在CPU内存中的冷特征向量,加载器使用UVA技术获取它们。我们并行加载热和冷特征向量,因为它们使用不同的通信链路。0训练器。对于一个小批量,每个GPU上的训练器将图采样(连同特征)作为输入,在前向传播中计算种子节点的输出嵌入,并在反向传播中计算模型参数的梯度。所有训练器都持有模型参数的副本,并使用集体全约减通信以同步方式聚合梯度以进行模型更新。由于GNN模型较小,梯度通信通常比图采样和特征加载更便宜。同一个小批量的采样器、加载器和训练器任务按顺序执行,因为它们之间存在数据依赖性。然而,我们观察到当一次只运行一个任务时,GPU利用率较低。为了提高GPU利用率,设计了一个流水线来并行化来自不同小批量的任务,我们将在第 5节中详细介绍。为了利用多台机器上的GPU,DSP在机器之间复制图拓扑和热特征,并将冷特征在机器之间分区。因此,机器只在冷特征和模型同步时进行通信。当在单个GPU上运行时,跨GPU的通信(例如,采样和特征加载)变为本地内存访问。DSP使用NCCL进行GPU之间的互连通信,而NVSHMEM库 [3]可能更高效。我们做出了这个选择,因为NVSHMEM只能处理具有直接NVLink连接的GPU,而某些GPU服务器没有NVLink网格。此外,DSP的关键设计(例如,数据布局、CSP和训练流水线)与通信库是正交的,也可以与NVSHMEM集成。04 采样集体原语在本部分中,我们介绍了协调多个GPU构建在GPU上分区的图拓扑的图采样集体原语(CSP)。我们首先假设在描述中使用了节点级采样,然后展示CSP如何表示其他采样方法。04.1工作过程CSP逐层进行图采样。输入是每个GPU上的一些前沿节点,其邻居需要采样;输出是前沿节点的采样邻居,这些邻居又成为下一层的前沿节点。以图 3 (b)中的图采样为例,在第一层中,前沿节点是种子节点3960DSP:多GPU高效GNN训练 PPoPP ’23,2023年2月25日至3月1日,加拿大蒙特利尔0洗牌0采样0重新洗牌0GPU 1 GPU 20图 5.在三个阶段(洗牌、采样和重新洗牌)中进行一层CSP的工作示例。GPU 1 有前沿节点 � 和 �,并持有节点 � 和 �的邻接列表;GPU 2 有前沿节点 � 和 �,并持有节点 � 和 �的邻接列表;每个前沿节点采样2个邻居。0 � ,采样的邻居数是2,输出是 � 和 �;对于第二层,前沿节点是 � 和 �,两个节点都需要采样2个邻居,输出是 � 和 � 对于节点 � , 和 � 对于节点 �。对于每一层,CSP通过三个阶段的所有GPU的采样器共同进行,即 shuffle, sample 和 reshuffle。对于shuffle,每个前沿节点都被转移到持有其邻接列表的GPU上;对于sample,每个GPU都会本地采样所需数量的前沿节点的邻居;对于 reshuffle,每个前沿节点 �的采样邻居被传送回请求邻居样本的GPU上的节点 � 。图 5显示了使用2个GPU和4个前沿节点的三个阶段的工作示例。在 shuffle 阶段,节点 � 和 � 分别传输到 GPU 2 和 GPU1,它们的邻接列表被存储。在采样阶段,每个GPU为其管理的每个前沿节点采样2个邻居,例如,GPU 2 为前沿节点 �采样节点 � 和 � 。在 reshuffle阶段,传输采样邻居以构建图采样,例如, � 和 � 从 GPU 2传输到 GPU 1 作为节点 �的邻居样本。对于邻接列表存储在本地的前沿节点(例如,节点 � 和 � ),shuffle 和 reshuffle变为本地内存访问。CSP通过在每个阶段结束时施加同步屏障来实现同步操作。特别地,每个GPU首先准备要发送的数据,然后通知其他GPU它们将接收的数据量,最后通过NCCL全互连 [27]发送数据。加载器还使用此过程来提取在远程GPU内存中缓存的热节点特征。在样本阶段,每个GPU使用一个单一内核在一层中执行所有接收到的采样任务。另一种选择是将CSP实现为异步操作,其中每个GPU在完成一个阶段并执行每个接收到的任务后与其他GPU通信。此设计消除了同步,但是0表2. CSP中的一些可配置参数0Type Description 类型 描述0Seed Integer array GPU的种子节点集合0Scheme String 邻居级或层级采样0Layer Integer 要采样的层数0IsBiased Boolean 偏倚或无偏采样0FanOut List of integers 要采样的邻居节点数0观察到单个GPU的通信和采样任务较小,效率较低。0讨论。与Quiver [2] 和DGL-UVA [39]采用的UVA采样相比,CSP具有三个优势。首先,CSP利用GPU之间快速的NVLink连接进行通信,而不是GPU和CPU之间的缓慢的PCIe连接。其次,UVA受到读放大的影响,而NVLink不受影响。最后,我们将每个种子节点分配给持有其邻接列表的GPU,并管理一个具有良好连接的图块,使得每个GPU上的邻接列表的许多访问都是本地的。相比之下,UVA采样需要针对每个访问邻接列表的通信进行CPU-GPU通信。CSP使用任务推送范式,即将前沿节点的采样任务转发到持有其邻接列表的GPU。另一种选择是数据拉取范式,它从远程GPU拉取前沿节点的邻接列表进行采样。任务推送范式具有更低的通信成本,因为通常每个前沿节点采样一小部分邻居(例如10个),但邻接列表可能包含许多邻居(例如1000个)。04.2 CSP的表达能力CSP在表达不同的图采样算法方面是通用的,我们在表 2中列出了CSP的一些可配置参数。对于无偏采样 [ 14],每个前沿节点的每个邻居都是均匀随机采样的。对于有偏采样 [ 31 ],图中的每个节点 � 都与一个非负权重 � �相关联,对于一个前沿节点 � 和其邻居集合 N ( � ) ,它的邻居 �按概率 � � / � � ∈N( � ) � �进行采样。DSP在数据准备过程中存储了节点权重 � � 以及边 � �,�,使得GPU在采样过程中可以本地访问节点权重。为了进行有偏采样,UVA采样需要从CPU内存中读取节点的完整邻接表,而CSP只通过将任务推送到数据的方式传输前沿节点和采样节点。对于基于节点的采样,扇出向量直接指定CSP应该对每个前沿节点采样的邻居数量。对于基于层次的采样,扇出向量只指定每个层次中要采样的节点总数,我们根据以下方式确定每个前沿节点要采样的邻居数量。对于图样本 �,将当前前沿节点的集合记为 F � ,假设0204060801000204060801003970PPoPP '23,2023年2月25日至3月1日,加拿大蒙特利尔 Zhenkun等人01-GPU 2-GPU 4-GPU 8-GPU0DSP-Seq DSP0(a) 论文01-GPU 2-GPU 4-GPU 8-GPU0DSP-Seq DSP0(b) Friendster0图 6. 顺序执行(DSP-Seq)和流水线的GPU利用率,实验设置详见第 7节0� 个节点需要进行采样,我们以概率0� � = � � � � ∈F � � � , (2)0其中 � � 是与 �的邻居相关联的总权重,对于无偏采样来说,它就是 �的邻居数目。对于当前前沿节点的采样是有放回的,进行 �次采样,我们使用 � 被采样的次数作为在CSP中采样 �的邻居数量。上述过程等价于获取前沿节点的邻接表,然后进行采样,但通信成本要小得多。我们证明了DSP也可以进行无放回的基于层次的采样 [ 4]。我们注意到,CSP也可以进行图随机游走,它从一个节点开始,并以递归方式随机移动到其邻居之一 [ 13 , 31 , 43]。具体来说,随机游走可以作为基于节点的采样的一种特殊情况实施,其在所有层次上的扇出为1。可以引入终止条件来确定随机游走是否应该在洗牌阶段继续,并且可以删除重新洗牌阶段。05 GNN训练的流水线在本部分中,我们首先展示了重叠采样器、加载器和训练器任务的动机,然后介绍了我们训练流水线的设计。0动机。最初,我们实现了DSP-Seq,按顺序执行不同的小批次。如图 6所示,当利用多个GPU时,DSP-Seq的GPU利用率较低。低利用率有两个原因。首先,如图 2中的Quiver和DGL-UVA观察到的那样,一些GPU核心很小,无法充分利用GPU资源,特别是当使用许多GPU并且每个GPU的工作负载较轻时。例如,采样器的通信核心只需要少量线程来充分利用NVLink带宽。对于训练器的计算核心来说,涉及的节点很少,所以计算量较小。其次,GPU核心需要等待和通信0采样器0加载器0训练器0加载器队列0训练器队列0图 7. GNN训练流水线的工作流程。0它们相互之间存在冲突,导致GPU处于空闲状态。例如,采样器和训练器都需要等待其他GPU上的任务完成,而加载器需要与其他任务进行数据通信。基于队列的流水线。每个小批次的采样器、加载器和训练器任务必须按顺序执行,因为它们之间存在数据依赖关系。因此,为了提高GPU利用率,机会就在于重叠不同小批次的任务。我们观察到,不同小批次的采样器和加载器之间没有数据依赖关系,因为它们在不同的图样本上工作。因此,我们使用基于生产者-消费者的训练流水线,如图 7所示,采样器、加载器和训练器将数据异步地放入队列中或从队列中消费,粒度为一个小批次。具体来说,采样器将图样本放入加载器队列;加载器从加载器队列中消费图样本,并将图样本及其所需的特征向量放入训练器队列;训练器以一个小批次为单位从训练器队列中消费图样本以计算梯度。通过流水线,采样器、加载器和训练器任务可以并行运行,为不同的小批次工作。例如,在给定的时间,采样器可以为小批次 � + 2 构建图样本,加载器可以为小批次 � + 1加载特征,而训练器正在计算小批次 �的梯度。我们通过为每个队列配置容量限制来控制任务的进度,当任务无法将结果放入队列时,运行过快的任务会被阻塞。实证结果表明,将队列容量限制设置为2就足以重叠任务。图 6显示了我们的流水线有效地提高了GPU利用率,特别是当GPU数量较多时。我们的流水线为每个任务使用单个工作实例。另一种方法是对采样器和加载器使用多个工作实例,并将每个工作实例分配到不同的小批次的图样本上。请注意,我们不能对训练器使用多个工作实例,因为这违反了BSP训练的语义。多实例设计之所以不使用有两个原因。首先,它会消耗更多的内存来处理正在进行中的工作,从而导致较少的GPU内存用于缓存图拓扑和节点特征。其次,对于CPU和GPU的资源争用更加严重。3980DSP:多GPU高效GNN训练 PPoPP ’23,2023年2月25日至3月1日,加拿大蒙特利尔0GPU10GPU20图 8. 通信死锁的示意图。0根据实证,我们发现使用多个采样器和加载器会降低整体性能。0集中式通信协调。在不同GPU上运行的采样器、加载器和训练器的工作线程通过NVLink全互连进行通信。然而,当同时运行这些工作线程时,可能会发生死锁,原因有两个。首先,GPU核心的资源分配是不可撤销的,因此一个核心只能在它完成任务后释放资源。其次,全互连通信只能在所有GPU上的对等工作线程的通信核心启动后才能继续进行。我们在图 8 中展示了这样一个例子,其中GPU1首先启动采样器的通信核心,但GPU2首先启动加载器的通信核心。只有在GPU1也启动加载器的通信核心或者GPU2也启动采样器的通信核心时,核心才能继续进行。然而,由于资源争用的原因,这可能是不可能的。例如,在GPU1上,加载器的通信核心可能会请求一个采样器已经占用的流多处理器(SM),但采样器无法释放该SM,因为它正在等待GPU2上的采样器。由于类似的原因,CUDA中的设备同步函数(例如cudaMemcpy、cudaMalloc和cudaFree)也会导致死锁,因为它们会阻塞后续的通信,并且只能在所有前序通信完成后才能启动。通信死锁的根本原因在于通信核心在不同GPU上的启动顺序可能不同。因此,我们使用了集中式通信协调(CCC)方案,将一个GPU(称为领导者)分配为决定所有GPU上通信核心统一启动顺序的GPU。具体来说,我们为每个工作线程分配一个ID,并确保在不同GPU上,对等工作线程(例如同一小批次的采样器)具有相同的ID。在每个GPU上,当一个工作线程准备好进行通信时,它将其ID注册在一个挂起集合中。领导者GPU使用一个队列来管理其准备好的通信核心,并按照提交顺序启动核心。一旦领导者启动了一个工作线程的通信核心,它会将该工作线程的ID广播给所有GPU。在接收到工作线程ID后,跟随者GPU会为该工作线程启动通信核心。0如果工作者在待处理集合中并等待工作者准备就绪,则CCC仅控制内核的启动顺序,不同工作者的通信内核仍然可以并行运行。06 实现0DSP的实现基于DGL [39]和Pytorch[30]。具体地,我们使用DGL的GPU图采样内核在CSP的样本阶段中对每个图块进行本地采样。Pytorch的数据流图和自动梯度功能用于进行梯度计算。我们使用NCCL[27]库通过NVLink在GPU之间进行通信。每个GPU上的图块使用压缩稀疏行(CSR)格式存储,其中节点在邻接表中记录其入度节点以便进行图采样。DSP为每个节点分配全局ID和本地ID。全局ID用于查找保存其邻接表的GPU。我们重新编号节点,以确保每个图块中的节点具有连续的全局ID,这使得查找操作成为一个简单的范围检查。本地ID用于在每个GPU上查找节点的邻接表,当GPU接收到用于采样任务的前沿节点时,全局ID转换为本地ID。我们将全局ID存储在邻接表中,因为这避免了对采样节点进行从本地ID到全局ID的转换(因为它们将用作前沿节点或进行特征提取)。每个GPU都持有一个邻接位置列表和一个特征位置列表,用于指示每个图块中的节点的邻接表和特征向量的存储位置(即在GPU或CPU中)。这使得DSP可以处理拓扑结构不适合GPU内存和能够灵活调整用于缓存图拓扑和特征向量的GPU内存的大型图。由于DSP使用CSP进行采样,对节点 �的邻接表的访问总是由管理 �的图块的GPU进行。因此,GPU通过对邻接位置列表进行本地查找来找到所需邻接表的位置。对于特征加载,DSP首先通过NVLink进行全对全操作来获取由远程GPU管理的特征向量的位置。如果特征向量被缓存在GPU中,则通过NVLink进行全对全操作获取它;否则,请求的GPU从CPU内存中加载特征向量。07实验评估在这部分中,我们进行了广泛的实验来评估DSP的性能。我们首先在第7.1节中介绍实验设置,然后在第7.2节中将DSP与最先进的GNN训练系统进行比较,最后在第7.3节中测试我们的设计(包括数据布局、CSP和训练流程)。3990PPoPP ’23,2023年2月25日至3月1日,加拿大蒙特利尔 Zhenkun等。0表3.实验中图数据集的统计数据0产品论文Friendster0顶点数2M 111M 66M0边数123M 3.2B 3.6B0平均度数50.5 28.8 54.50特征维度100 128 2560拓扑大小(GB)0.984 25.6 28.80特征大小(GB)0.8 56.8 67.607.1实验设置我们在三个广泛用于GNN评估的图数据集上进行实验,它们的统计数据如表3所示。Products[5]是来自亚马逊的产品共购网络,其中节点是产品,边表示两个产品一起购买。Papers[38]是一个引用图,其中每个节点是一篇论文,边表示一篇论文引用了另一篇论文。Friendster[41]是一个游戏网络,其中每个节点是一个用户,两个用户之间存在友谊关系的边。我们将DSP与四个最先进的GNN训练系统进行比较,即PyG(v2.0)、DGL-CPU(v0.8)、DGL-UVA(v0.8)和Quiver(v0.1)。PyG和DGL-CPU将图结构和节点特征都存储在CPU内存中,使用CPU进行图采样,并将图样本发送到GPU进行训练。DGL-UVA和Quiver将图结构存储在CPU内存中,并使用UVA技术在采样过程中访问图拓扑。不同的是,DGL-UVA将所有节点特征存储在CPU上,而Quiver将热节点特征缓存在GPU上。我们注意到DGL-UVA允许特征缓存,但要求所有节点特征适应单个GPU的内存。由于Papers和Friendster的节点特征都无法适应我们的实验GPU,我们在实验中禁用了DGL-UVA的特征缓存。我们不与GNNLab[42]进行比较,因为它要求图拓扑适应一个GPU,并进行异步训练以提高效率。按照现有的工作[25,46],我们训练一个具有256个隐藏层的3层GraphSAGE模型,批量大小为1024,并默认进行邻居级别的采样,扩展因子为[15, 10, 5]。实验在一台配备8个V100GPU的服务器上进行,每个GPU具有16GB内存,配备64个核心和480GB主内存的Intel Xeon E5-2686CPU。服务器的设备间通信拓扑与DGX-1[26]类似,其中GPU通过NVLink连接,而CPU和GPU通过PCIe连接。在报告结果时,保留三个有效数字。0正确性。DSP执行与基准系统相同的BSP训练逻辑,因此当执行相同数量的训练纪元(或mini-batch)时,DSP具有相同的训练进展(即训练损失或测试准确度)作为其他系统。0(a)准确度 vs. 批次计数(b)准确度 vs. 训练时间0图9.使用8个GPU对Papers图进行GraphSAGE训练的训练质量。虚线表示收敛的准确度。0相同的训练进展(即训练损失或测试准确度)与其他系统相同。为了进行合理检查,我们在图9中绘制了DSP、DGL-UVA和Quiver的训练进展。在这个实验中,我们省略了PyG,因为Quiver采用了与PyG相同的训练后端。图9a显示了DSP的准确度 vs.mini-batch计数曲线与DGL-UVA和Quiver重叠,这表明我们的实现是正确的。然而,由于DSP的mini-batch时间比DGL-UVA和Quiver短,所以在图9b中,当运行相同的时间时,DSP的准确度更高。具体而言,DSP、DGL-UVA和Quiver分别需要183秒、698秒和629秒来将模型训练到收敛。在后续的实验中,我们将“纪元时间”(即一次遍历所有种子节点所需的时间)作为主要性能指标,因为短的纪元时间直接转化为短的端到端训练时间。07.2主要结果我们在表4中报告了系统的纪元时间,这导致了一些观察结果。首先,对于不同的数据集和GPU数量,DSP始终优于基准线。与PyG和DGL-CPU相比,DSP的加速比可以超过10倍;考虑到每个配置下最快的基准线,DSP在大多数情况下的加速比超过2倍。其次,当使用更多的GPU时,DSP通常比基准线具有更大的性能优势,这表明DSP实现了良好的可扩展性,在多GPU服务器上运行时这是至关重要的。实际上,在某些情况下,DSP甚至实现了超线性加速。例如,在Papers上,从4个GPU增加到8个GPU时,加速比为3.31倍。这是因为DSP在GPU上存储图拓扑结构并缓存节点特征,因此当GPU数量增加时,DSP不仅可以从更多的计算能力中受益,还可以从更便宜的通信中受益。可以观察到PyG和DGL-CPU的可扩展性较差。这是因为它们使用CPU进行图采样,而GPU争夺有限的CPU线程,使得CPU成为训练的瓶颈。尽管Quiver在大多数情况下比DGL-UVA慢,但它在GPU上缓存了节点特征。我们发现这是因为Quiver使用GPU内存。45678901234562535455565012345640001.0218.4280.576.661805101520253000.511.524010顺序地运行,并在图 12中报告了DSP相对于DSP-Seq的加速比。结果显示,DSP在所有数据集和GPU数量上都一致优于DSP-Seq,这与图 6中的GPU利用率结果相符。图 12还显示,我们的流水线在使用1个GPU时性能提升较小,但在使用更多GPU时性能提升更显著。例如,使用8个GPU时,DSP相对于DSP-Seq的加速比在三个数据集上都超过了1.5倍。这是因为在使用更多GPU时,内核变得更轻,通信成本增加,因此有更多机会并行化任务。08 结论0在本文中,我们提出了DSP,一个解决使用多个GPU进行GNN训练时高通信成本和低GPU利用率问题的系统。为了实现高通信效率,DSP采用了定制的数据布局,并提出了用于图采样的集合原语,这些设计旨在利用GPU之间快速的NVLink连接。为了提高GPU利用率,DSP采用生产者-消费者式的流水线来重叠不同mini-batch的任务。广泛的实验证明,DSP在效率上显著优于最先进的GNN训练系统,并且我们的设计是有效的。4020DSP:具有多个GPU的高效GNN训练 PPoPP ’23, 2023年2月25日至3月1日, 加拿大蒙特利尔0参考文献0[1] 2020. Euler. https://github.com/alibaba/euler. [2] 2021. Quiver.https://github.com/quiver-team/torch-quiver. [3] 2022. NVSHMEM.https://developer.nvidia.com/nvshmem. [4] 匿名. 2022.无重复采样的过程.https://anonymous.4open.science/r/Anonymous-593E/CSP-layerwise-proof.pdf. [在线;2023年1月访问].0[5] K. Bhatia, K. Dahiya, H. Jain, P. Kar, A. Mittal, Y. Prabhu, and M.Varma. 2016. 多标签数据集和代码的极端分类存储库.http://manikvarma.org/downloads/XC/XMLRepository.html0[6] Jie Chen, Tengfei Ma, and Cao Xiao. 2018. FastGCN:通过重要性采样加速图卷积网络的学习. In 第6届国际学习表示会议, ICLR2018, 加拿大温哥华, 2018年4月30日至5月3日. OpenReview.net.0[7] Jianfei Chen, Jun Zhu, and Le Song. 2018.具有方差缩减的随机训练图卷积神经网络. In 第35届国际机器学习会议,ICML 2018, 瑞典斯德哥尔摩, 2018年7月10-15日 . 941–949.0[8] Mark Cheung and José M. F. Moura
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 5
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于Python和Opencv的车牌识别系统实现
- 我的代码小部件库:统计、MySQL操作与树结构功能
- React初学者入门指南:快速构建并部署你的第一个应用
- Oddish:夜潜CSGO皮肤,智能爬虫技术解析
- 利用REST HaProxy实现haproxy.cfg配置的HTTP接口化
- LeetCode用例构造实践:CMake和GoogleTest的应用
- 快速搭建vulhub靶场:简化docker-compose与vulhub-master下载
- 天秤座术语表:glossariolibras项目安装与使用指南
- 从Vercel到Firebase的全栈Amazon克隆项目指南
- ANU PK大楼Studio 1的3D声效和Ambisonic技术体验
- C#实现的鼠标事件功能演示
- 掌握DP-10:LeetCode超级掉蛋与爆破气球
- C与SDL开发的游戏如何编译至WebAssembly平台
- CastorDOC开源应用程序:文档管理功能与Alfresco集成
- LeetCode用例构造与计算机科学基础:数据结构与设计模式
- 通过travis-nightly-builder实现自动化API与Rake任务构建
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功