没有合适的资源?快使用搜索试试~ 我知道了~
多GPU高效GNN训练
392→DSP:多GPU高效GNN训练蔡振坤1、周启辉1、肖岩2、郑大3、宋翔3、郑晨光1、郑俊1、乔治·卡里皮斯31香港中文大学计算机科学及工程学系2南方科技大学计算机科学与工程系3亚马逊网络服务{zkcai,qhzhou,cgzheng,jcheng}@cse.cuhk.edu.hk,yanx@sustech.edu.cn,{dzzhen,xiangsx,gkarypis}@amazon.com摘要联合使用多个GPU来训练图神经网络(GNN)对于处理大型图和实现高效率至关重要。然而,我们发现,现有的系统遭受高通信成本和低GPU利用率,由于不正确的数据布局和训练过程。因此,我们提出了一个被称为DiquettedS ipelining(DSP)的系统,用于多GPU GNN训练。DSP采用定制的数据布局来利用GPU之间的快速NVLink连接,该连接将图形拓扑和流行节点特征存储在GPU内存中。为了在多个GPU上进行高效的图形采样,我们引入了一个集体采样原语(CSP),它将采样任务推到数据上以减少通信。我们还设计了一个基于生产者-消费者的流水线,它允许来自不同小批的任务我们将DSP与最先进的GNN训练框架进行了比较,结果表明DSP在不同的数据集,GNN模型和GPU数量下始终表现出基线。DSP的加速比可以达到26倍,在大多数情况下超过2倍。CCS概念:·计算方法机器学习;并行计算方法。关键词:图神经网络,模型训练,GPU1介绍图神经网络(GNNs)是一类专门为图数据设计的模型,有许多变体,包括GCN [19],GAT [37],GraphSAGE[14]等。它们在许多图形任务(如节点)实现了前两位作者的贡献质量相当,肖岩是相应的作者。允许制作本作品的全部或部分数字或硬拷贝供个人或课堂使用,无需付费,前提是复制品不以营利或商业利益为目的制作或分发,并且复制品在第一页上带有此通知和完整的引用必须尊重作者以外的其他人所拥有的本作品组件的版权。允许用信用进行提取 复制,或重新发布,张贴在服务器上或重新分发到列表,需要事先特定的许可和/或费用。 请求权限请发邮件至permissions@acm.org。PPoPP©2023版权归所有者/作者所有。 出版权授权给ACM。ACM ISBN 979-8-4007-0015-6/23/02。- 是的- 是的十五块https://doi.org/10.1145/3572848.3577528图1. 使用8个GPU时不同图形采样方法的通信量(按理想标准化)分类[11,15,33]、节点聚类[34]和链接预测[20,44],并且因此被广泛地用于包括电子商务[32]、社交网络[23,40]和生物网络的各种信息学[8,12]。基于采样的训练[6,7,22,36],它消耗图形样本(即,从种子节点的邻域采样的子图)以小批量更新GNN模型,由于其高效率和良好的模型精度而被广泛使用早期的系统,如GraphLearn [47]和Euler [1],使用CPU训练 GNN,因此它们的训练速度受到CPU计算能力的限制后来,PyG [9],DGL [39]和ByteGNN [45]通过在CPU上进行图形采样并将图形样本传输到GPU进行计算来联合利用CPU和GPU。然而,基于CPU的图形采样是缓慢的,并且经由PCIe传输图形样本的成本[16]《明史》:“明者,明也,明也。具有GPU采样器功能的DGL)完全在GPU进行采样,并结合图形采样的内核优化。但是它们需要图形数据适合单个GPU,因此无法处理大型图形。由于GPU服务器现在通常具有多个GPU,并且实际图形可能很大[38,41],因此通过联合利用GPU的计算和存储能力,将GNN训练扩展到多个GPU为此,Quiver[2] 和DGL-UVA( 即, 具 有 GPU UVA 采 样功 能 的DGL[35])[39]将图形拓扑存储在CPU内存中,并将缓存节点功能存储在GPU内存中。每个GPU独立进行图形采样,并使用UVA通过PCIe访问图形拓扑(和缓存外节点功能)然而,我们发现,他们遭受两个问题,损害效率。通信成本高 对于图形采样,Quiver和DGL-UVA通过PCIe从CPU内存读取采样的图形节点。这导致读取放大(即,读取的数据量大于请求的数据量),因为PPoPPZhenkun,etal.393表1.使用不同GPU时,DGX-1 GPU服务器上NVLinks和PCIe的聚合带宽(GBps)[26]1-GPU2-GPU4-GPU8-GPUPCIe323264128NVLink01004001200(a) (b)特征加载图2.当改变物理线程时,Quiver的图形采样和特征加载内核的执行速度。使用一个具有5120个物理线程的GPU最小PCIe请求大小是50字节[24](32字节用于有效载荷,18字节用于包报头)。 如图1所示,UVA采样的通信量远大于仅获取所需数据的假设理想情况。更糟糕的是,UVA采样在慢速PCIe上进行通信,而GPU之间的NVLink连接通常要快得多,如表1所示。此外,Quiver和DGL-UVA仅允许具有直接NVLink连接的GPU相互访问缓存节点功能。考虑到NVLink带宽比PCIe大得多,在没有直接NVLink连接的情况下(通过多跳转发)从远程GPU读取节点功能可能仍然比通过PCIe从CPU内存读取更快。GPU利用率低 Quiver和DGL-UVA不能充分利用GPU,因为它们顺序执行不同任务的内核。这部分是因为GNN训练的内核比普通神经网络的内核更轻。例如,图2显示在使用GPU上的所有物理线程之前,图形采样和特征加载的运行时间都稳定下来。当使用多个GPU,问题变得更加严重,因为(i)每个GPU的工作负载变得更轻,以及(ii)内核更有可能被图形数据上的不规则内存访问(UVA或全局内存访问)阻塞。通过解决这两个问题,我们构建了DSP系统,用于使用多个GPU进行有效的基于采样的GNN训练。 为了降低通信成本,DSP采用定制的数据布局,以充分利用GPU之间的快速NVLink [28]连接。具体地,图结构被分割成良好连接的图补丁,并且每个补丁被存储在一个GPU上。 这允许图形采样通过快速NVLink进行所有通信,并避免PCIe的读取放大问题。使用剩余的内存,每个GPU缓存不同的节点功能,并且所有GPU形成通过NVLink共享的大型聚合缓存,以减少节点功能通过PCIe对CPU内存的访问对于GNN训练的每个小批次,DSP使用三个任务,即,取样器、装载器和训练器。采样器为一组种子节点产生图形样本加载器为图形样本加载节点特性训练器对图样本进行计算以更新模型。对于采样器,我们提出了一个集体采样原语(CSP),其中GPU联合进行采样分区图。CSP将每个图节点上的采样任务推送到其驻留的GPU,而不是拉取邻接列表。这种任务推送模式的通信成本比从远程GPU拉取数据要低得多(见图1),因为通常只有一小部分节点CSP还允许在每个GPU上融合小采样内核以实现高效执行,并且在表达不同的图形采样方法方面是通用的。 为了提高GPU利用率,我们观察到不同小批量的采样器,加载器和训练器没有数据依赖性,因此可以并发运行。 因此,我们设计了一个基于生产者-消费者队列的训练管道,其中任务通过为队列生产数据或从队列消费数据来异步运行。 使用流水线,通信内核可能会导致死锁,因为它们在GPU上具有不同的启动顺序。我们通过协调GPU的内核启动顺序来解决死锁我们进行了广泛的实验,将DSP与最先进的GNN训练系统进行比较,包括PyG [9],DGL [39],DGL-UVA和Quiver [2]。结果表明,DSP在不同数据集、GNN模型和GPU数量上的表现始终优于基线。在基线上的加速可以是一个数量级,在大多数情况下超过DSP还实现了比基线更好的可扩展性我们还进行了详细的剖析,以评估DSP的设计实验结果表明,CSP比现有的基于CPU和基于UVA的采样设计效率更高,加速比可达20倍。训练流水线有效提高了GPU利用率,可以将epoch时间减少1.5倍以上总之,我们做出了以下贡献。我们观察到,现有系统在使用多个GPU进行基于采样的GNN训练时存在高通信成本和低GPU利用率的问题我们提出了CSP,这是第一个进行图形采样与多个GPU联合。CSP通过使用快速的NVLinks和将任务推送到数据中来表示不同的图形采样方案,具有通用性我们观察到不同GNN训练小批量的任务是独立的,并设计了一个基于生产者-消费者的流水线来重叠GPU利用率的任务1CSP比Ideal使用更少的通信,因为对于Ideal来说,对图拓扑的所有访问都是远程的,但CSP在每个GPU上都有一些本地访问···DSP:多GPU高效GNN训练PPoPP394���()∈������(−)(−)������KCB一个DGEFH一一种子CECE层1BKGHBH层2(a) 图(b)逐节点样本(c)分层采样图3.图采样的一个示例,种子节点是第二,层数为2,扇出向量为[2,2]。我们定制数据布局以充分利用快速NVLinks并实现DSP系统,该系统在GNN训练方面的性能明显优于最先进的系统2基于采样的GNN在这一部分中,我们介绍了基于采样的GNN训练的背景,以便于进一步讨论。考虑一个图���=���,���,其中每个节点������具有一个特征向量,引文网络中每个作者节点的作者简档一个���多层GNN生成一个嵌入������通过聚合来自以下各项的信息,图4. DSP的总体结构。图3显示了两种流行的图形采样方法的示例,即2层GNN的逐节点采样[14]和逐层采样[10扇出向量控制每层中要采样的节点数量。 对于同一层中的每个节点,独立地进行逐节点采样,并且扇出向量[2,2]意味着对于通过���在第二次世界大战中,模型能够被表达为(ε≥1)层,GNN层,每个节点应该采样两个邻居。对同一层中的所有节点联合进行分层采样ℎ���=AGGREGATE���(ℎ��� −1,∀ ∈ N(���)∪���;��� ),(1)而扇出向量[2,2]意味着在两个层中,������采样节点总数应为2。采样在A其中集合N(N)包含图中节点N的邻居ℎ −1is the embedding of node��� in the(���− 1)th layer,and������节点可以是无偏的(即,邻居被采样是第七层聚集函数的模型参数���均匀地)或偏置(即,每个节点都有一个权重,根据权重对邻居进行采样注意对于第一层,N0是输入图附带的节点N1的特征向量。为了训练GNN模型,将节点的输出嵌入������与地面真实嵌入���进 行 比 较 , 以计算模型参数的梯度。对于图样本,需要其所有节点的特征向量来计算种子节点的输出嵌入。功能缓存。节点特征向量通常具有这会导致高维度,并且可能不适合GPU内存,通过展开Eq.(1)中,可以观察到,计算Rb2需要Rb2的1跳邻居的层���的因此,使用节点训练需要所有���- 跳的邻居���。在真实世界的幂律图中,一个节点可能有许多邻居,并且所涉及的节点数量随着跳数的增加而迅速增加,因此复杂度很高对于大型图,基于采样的训练(以下简称为训练)由于其高效性和良好的准确性而被广泛使用[7,22,36]。具体而言,训练是在小批量中进行的,并且在每个小批量中,使用图中的一些节点(称为批量的种子节点)而不是所有节点此外,在计算种子节点的输出嵌入时���,不是使用所有的������������s-hop邻域,而是从s-hop邻域中采样子图(称为图样本)以降低复杂度。特别地,对于第���-层GNN,在第一层中对种子节点的邻居进行采样,然后在第二层中对第一层样本的邻居进行采样;该过程继续,直到到达层-���,其形成树结构的子图。图表。因此,一些节点特征向量需要存储在CPU内存中,并根据需要提取到GPU。现有的工作观察到,在GNN训练期间,一些节点比其他节点更频繁地被访问[18,21,25],并建议将这些热节点缓存在GPU内存中以降低特征提取成本[18,21,25]。引入了几个标准来选择热节点,例如大的入度,PageRank分数和反向PageRank分数。3DSP框架介绍了DSP的数据布局和训练工作流程我们假设DSP在文中使用多个GPU,但请注意DSP也可以使用单个GPU。3.1数据布局如图4所示,DSP将图形拓扑划分为补丁,并在每个GPU上存储一个补丁,其中每个补丁包含一些节点及其邻接列表。我们使用METIS [17]中的图划分算法来最小化交叉补丁边缘的数量并平衡CPU图形面片冷特征GPUGPU种子节点种子节点图形面片图形面片1采样器采样器2热门功能装载机装载机热门功能3模型教练教练模型·PPoPPZhenkun,etal.395补丁. 这是因为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之间共同分区以用于数据局部性。3.2训练过程DSP 保 持 与 Quiver 和 DGL-UVA 相 同 的 批 量 同 步 并 行(BSP,这意味着迭代应观察在其先前迭代中进行的所有模型更新利用数据并行范例,其中每个GPU针对小批量处理不同的图形样本。如图4所示,每个GPU运行三个执行不同任务的工作进程,我们将在下面详细介绍取样器。 在小批量中,每个GPU从分配给它的种子节点加载一批种子节点,并且每个GPU上的采样器通过与其他GPU上的采样器协作来为其种子节点构造图样本。在数据准备过程中,我们将种子节点分配给GPU,其图形补丁包含节点以减少通信。���当采样器需要访问存储在其他GPU上的图形拓扑时,它会通知这些GPU上的采样器,而不是提取数据以减少通信。这是通过我们的集体采样原语(CSP)来实现的,这将在第4节中介绍。对于图3中的示例,给定种子节点���,采样器将构造图3(b)中的图样本装载机。 对于小批处理,每个GPU上的加载器获取由GPU。例如,图3(b)中的图样本需要节点的特征向量���������������,如:���在特征加载之前,加载器收集所有图样本的请求节点,以避免重复加载。 对于缓存在GPU内存中的热特征向量,加载器通过NVLink使用集体的所有对所有通信。对于存储在CPU内存中的冷特征向量,加载器使用UVA技术获取它们。我们并行加载热和冷特征向量,因为它们使用不同的通信链路。教练对于小批量,每个GPU上的训练器将图样本(连同特征)作为输入,在前向传递中计算种子节点的输出嵌入,并在后向传递中计算模型参数的梯度。所有训练器都持有模型参数的副本由于GNN模型很小,梯度通信通常比图采样和特征加载便宜由于它们的数据依赖性,同一小批的采样器、加载器和训练器任务然而,我们观察到每次运行一个任务时GPU利用率很低。为了提高GPU利用率,设计了一个流水线来并行化来自不同小批的任务,我们将在第5节中详细介绍。为了在多台机器上利用GPU, DSP在机器上复制图形拓扑和热特征,并在机器之间划分冷特征因此,机器只为冷特征和模型同步进行通信。 当在单个GPU上运行时,跨GPU通信(例如,用于采样和特征加载)变为本地存储器访问。DSP与NCCL进行GPU间通信,而NVSHMEM库[3]可能更有效。我们之所以做出这样的选择,是因为NVSHMEM只能处理具有直接NVLink连接的GPU,而某些GPU服务器没有NVLink网格。此外,DSP的关键设计(例如,数据布局、CSP和训练流水线)与通信库正交,并且也可以与NVSHMEM集成。4集体抽样原语在这一部分中,我们介绍了我们的CSP,它协调多个GPU构建图形样本上的图形拓扑划分的GPUs。我们首先假设在描述中使用了逐节点采样,然后展示CSP如何表达其他采样方法。4.1工序CSP逐层进行图形采样一个层将每个GPU上的一些边界节点作为输入,这些边界节点的邻居需要被采样;输出是边界节点的采样邻居,这些边界节点反过来又成为下一层的边界以图3(b)中的图示例为例,在第一层中,前沿节点是种子节点DSP:多GPU高效GNN训练PPoPP396���联系我们������������。DSP将节点权重随边一起������洗牌样品洗牌表2. CSP中的一些可配置参数类型说明种子数组GPU方案的种子节点集字符串逐层或逐邻采样层采样要采样的层数IsBiased布尔有偏或无偏采样扇出整数列表要采样图5. 在三个阶段中传导一层CSP的示例,即,洗牌、取样和重新洗牌。 GPU 1具有边界节点���和���,并保存节点和的邻接列表������;GPU 2具有边界节点���和���,并保存节点和的邻接列表������;每个边界节点采样2个邻居。对于第二层,要采样的邻居的数量为2,输出为1和2;对于第二层,前沿节点为1和2。���,两个节点都需要对2个邻居进行采样,输出分别为���和���(对于节点���)���和(���对于节点)���。对于每一层,CSP由所有GPU上的采样器通过三个阶段联合进行,即,洗牌、取样和重新洗牌。对于混洗,每个边界节点被传送到保存其邻接列表的GPU;对于采样,每个GPU对其接收的边界节点的所需数量的邻居进行本地采样;对于重新混洗,每个边界节点的采样邻居���被传送回请求节点的邻居采样的GPU���。图5显示了具有2个GPU和4个前沿节点的三个阶段的工作示例在混洗阶段中,将节点N1和N2分别传送到GPU 2和GPU 1,其中存储它们的邻接列表在采样阶段,每个GPU对其管理的每个边界节点采样2个邻居,例如GPU 2采样节点���和���边界节点���。在重新混洗阶段中,经取样的相邻者经转移以建构(举例来说)图形样本,���且���作为节点的相邻者样本从GPU 2转移到GPU 1���。对于邻接列表存储在本地的边界节点(例如,节点A和B),混洗和重新混洗成为本地存储器访问。由于单个GPU的通信和采样任务很小,因此观察到具有较差的效率讨论。与Quiver [2]和DGL-UVA [39]采用的UVA采样相比,CSP具有三个优点。首先,CSP利用GPU之间的快速NVLink连接进行通信,而不是GPU和CPU之间的慢速其次,UVA遭受读取放大,而NVLink没有。最后,我们将每个种子节点分配给保存其邻接列表的GPU,并使用一个GPU管理连接良好的图形补丁,这使得对每个GPU上的邻接列表的多次访问都是本地的相比之下,UVA采样需要CPU-GPU通信,每次访问邻接列表。CSP使用任务推送范例,其中用于前沿节点的采样任务被转发到保持其邻接列表的GPU另一种方法是数据拉取范式,它从远程GPU获取边界节点的邻接列表以进行采样。任务推送范例具有较低的通信成本,因为通常只需要很小的数量(例如,10)的邻居被采样用于每个边界 节 点 但 是 邻 接 列 表 可 以 包 含 许 多 邻 居 ( 例 如 ,1000)。4.2CSP的表现力CSP在表达不同的图采样算法时是通用的,我们在表2中列出了CSP的一些可配置参数。对于无偏采样[14],边界节点的每个邻居都随机均匀采样 对于有偏采样[31],图中的每个节点���与非负权重������相关联,并且对于边界节点���,与neig相关联。hb或集合N(n),其邻b或n是概率抽样的CSP是由im实现的同步操作在每个阶段结束时形成同步屏障具体来说,每个GPU首先准备要发送的数据,然后通知其他GPU它们将接收的数据量,最后通过NCCL all-to-all发送数据[27]。加载器还使用此过程来获取缓存在远程GPU内存中的热节点特征。在采样阶段,每个GPU使用单个内核执行它在层中接收的所有采样任务。另一种方法是将CSP实现为并行操作,其中每个GPU在完成一个阶段后与其他GPU通信,并单独执行每个接收到的任务。这种设计消除了同步,���在数据准备过程中���进行编译,以便GPU可以访问节点在采样期间局部加权。为了进行有偏采样,UVA采样需要从CPU内存中读取节点的整个邻接表,而CSP只通过将任务推送到数据来传输前沿和采样节点对于逐节点采样,扇出向量直接指定CSP应为每个边界节点采样的邻居的数量对于逐层采样,扇出向量仅指定每层中要采样的节点总数,并且我们如下确定每个边界节点对于图样本f,将当前边界节点的集合记为F,并假设GPU 1GPU 2一EBF一BEFBCDE一CG一FGHDECE一GCGDE一EBFCE一GCGDEPPoPPZhenkun,etal.397利用率%.++100DSP序列DSP100DSP序列DSP加载程序队列80 8060 60402001- GPU2-GPU4-GPU8-GPU(a) 论文402001-GPU2-GPU4-GPU8-GPU(b) Friendster培训师队列图6. 顺序执行(DSP-Seq)和流水线的GPU利用率,第7节中详细介绍了实验设置需要对边界节点进行采样,我们对每个边界节点进行采样。在F中,概率������图7.GNN培训管道的工作流程。这会导致GPU处于空闲状态例如,采样器和训练器都需要等待它们的对等体在其他GPU上完成,而加载器需要与对等体进行数据通信。������=n∈F��� ������、(二)以管道为基础。每个小批量的采样器、装载器和培训器任务必须按顺序执行,其中,R2是与R3的邻居相关联的总权重其是用于无偏采样的最小邻域的数目对当前前沿节点的采样采用了n次替换,���已采样的邻居数在CSP中的应用上述过程相当于获取边界节点的邻接列表,然后进行采样,但具有更小的通信成本。我们证明了DSP也可以进行逐层采样而无需替换[4]。我们注意到CSP也可以进行图随机游走,从一个节点开始,以递归方式随机移动到它的一个邻居[13,31,43]。具体地,随机游走可以被实现为逐节点采样的特殊情况,其扇出对于所有层都是1。可以引入终止条件来确定随机游走是否应该在混洗阶段中继续,并且可以移除重新混洗阶段。5GNN培训管道在这一部分中,我们首先展示了重叠采样器,加载器和训练器任务的动机,然后介绍了我们的训练管道的设计。动机最初,我们实现了DSP-Seq,它按顺序执行不同的小批量。如图6所示,当使用多个GPU时,DSP-Seq的GPU利用率较低利用率低是由两个原因造成的首先,如图2中的Quiver和DGL-UVA所示,某些GPU内核很小,无法充分利用GPU资源,特别是当使用许多GPU且每个GPU的工作负载很轻时。例如,采样器的通信内核只需要少量的线程就可以充分利用NVLink带宽。训练器的计算内核对于最后的GNN层是轻量级的,因为涉及少量节点其次,GPU内核需要等待和通信他们的数据依赖性。因此,为了提高GPU的利用率,有机会将不同小批量的任务重叠。 我们观察到,不同小批量的采样器和加载器没有数据依赖性,因为它们工作在不同的图样本上。因此,我们使用图7中的基于生产者-消费者的训练流水线,其中采样器、加载器和训练器将数据放入队列和/或以小批量的粒度异步地消费来自队列的数据。具体地,采样器将图样本放入加载器队列中;加载器消耗加载器队列中的图样本,并将图样本连同其所需的特征向量放入训练器队列中;训练器一次一个小批次地消耗训练器队列中的图样本以计算梯度。通过管道,采样器,加载器和训练器任务可以通过为不同的小批量工作来并发运行。例如,在给定的时间,采样器可以为小批量���2构造图样本,加载器可以为小批量���1加载特征,而训练器正在为小批量���进行计算。我们通过为每个队列配置容量限制来控制任务的进度,当运行速度太快的任务无法将结果放入队列时,它们将被阻止。根据经验,我们发现将队列容量限制设置为2足以重叠任务。图6显示了我们的流水线有效地提高了GPU利用率,特别是当GPU数量很大时。我们的流水线为每个任务使用一个工人实例另一种方法是为采样器和加载器使用多个工作器,并将每个工作器分配给不同小批次的图形样本。注意,我们不能使用多个worker作为训练器,因为这违反了BSP训练的语义由于两个原因,未使用多实例设计。首先,它会消耗更多的内存用于正在进行的工作,因此留下更少的GPU内存来缓存图形拓扑和节点特征。第二,随着每个GPU上的工作器越来越多,CPU和GPU的资源争用也越来越严重。采样器装载机教练利用率%DSP:多GPU高效GNN训练PPoPP398如果工作器在挂起集合中,则等待工作器变为就绪,否则。请注意,CCC只控制内核的启动顺序,不同工作者的通信内核仍然可以并行运行启动通信线程正在等待通信线程6执行DSP具体来说,我们使用DGL的GPU图形采样内核,对同一块中的每个图块进行局部采样图8.一个通信死锁的例子。根据经验,我们发现使用多个采样器和加载器会降低整体性能。集中的通信协调。不同GPU上的采样器、加载器和训练器的工作人员通过NVLink全对全通信与其同行进行通信。但是,由于两个属性,当我们并发运行工作线程时可能会发生死锁。(i)GPU内核的资源分配是不可撤销的,因此内核只能在完成时释放资源。(ii)只有当对等工作器的通信内核在所有GPU上启动时,所有对所有通信才能进行。我们在图8中展示了这样一个示例,其中GPU 1首先为采样器启动通信内核,但GPU 2首先为加载器启动通信。如果GPU 1也开始用于加载器的通信或GPU 2也开始用于采样器的通信,然而,由于资源争用,这可能是不可能的。举例来说,在GPU 1上,用于加载器的通信内核可请求已由取样器获取的流式传输多处理器(SM),但取样器不能释放SM,因为其正在等待GPU2上的取样器。出于 类 似 的 原 因 , CUDA 中 的 设 备 同 步 功 能 ( 例 如 ,cudaMemcpy、cudaMalloc和cudaFree)也可能导致死锁,因为它们会阻塞后续通信,并且只能在所有先前通信结束时才能启动。通信死锁归结为这样一个事实,即通信内核在不同的GPU上可以有不同的启动顺序。因此,我们使用集中式通信协调(CCC)方案,该方案分配一个GPU(呼叫领导者)来决定所有GPU的通信内核的统一启动顺序具体来说,我们为每个工作者分配一个id,并确保对等工作者(例如, 同一小批量的采样器)在不同的GPU上具有相同的ID。在每个GPU上,当准备好进行通信时,工作者在挂起集合中注册其id领导者GPU使用队列来管理其准备好的通信内核,并按其提交顺序启动内核。 一旦leader为worker启动了通信内核,它就会将worker的id广播给所有GPU。在接收到工作者id时,跟随GPU启动工作者的通信内核CSP的一个阶段。Pytorch的数据流图和自动梯度功能在训 练 器 中用 于 梯 度 计 算 。 我 们 采 用 NCCL [27] 库 通 过NVLink在GPU之间进行通信。每个GPU上的图形补丁使用压缩稀疏行(CSR)格式存储,其中节点在邻接列表中记录DSP为每个节点分配全局ID和本地ID。节点的全局用于查找保存其邻接列表的GPU我们对节点重新编号,以确保每个图块中的节点具有连续的全局ID,这使得查找成为一个简单的范围检查。本地id用于在每个GPU上的CSR中找到节点的邻接列表,并且当GPU接收用于采样任务的前沿节点时,我们将全局id存储在邻接列表中,因为这避免了采样节点从局部id到全局id的转换(因为它们将被用作边界节点或进行特征提取)。每个GPU保存邻接位置列表和特征位置列表,其指示邻接列表和特征向量被存储的位置(即,在GPU或CPU中)。这使DSP能够处理拓扑结构不适合GPU内存的大型由于DSP使用CSP进行采样,因此对节点图的邻接列表的访问总是由管理图的图形补丁的GPU进行因此GPU通过对邻接位置列表的本地查找来找到所需邻接列表的位置。对于特征加载,DSP首先在NVLink上使用全对全操作来获取由远程GPU管理的特征向量的位置。如果特征向量缓存在GPU中,则通过NVLink上的所有对所有操作获得;否则,请求GPU从CPU内存加载特征向量7实验评价在这一部分中,我们进行了大量的实验来评估DSP的性能我们首先在第7.1节中介绍实验设置,然后在第7.2节中将DSP与最先进的GNN训练系统进行比较,最后在第7.3节中测试我们的设计(包括数据布局,CSP和训练管道)。GPU1SM1SM2SM3SM4取样器(t1)装载机(t3)GPU2装载机(t2)取样器(t4)SM1SM2SM3SM4时间PPoPPZhenkun,etal.399表3. 实验中图形数据集的统计7.1实验设置我们对广泛用于GNN评估的三个图形数据集进行了实验,其统计数据汇总于表3中。 Products [5]是一个来自亚马逊的产品共同购买网络,其中节点是产品,边表示两种产品一起购买。 Papers[38]是一个引用图,其中每个节点是一篇论文,边意味着一篇论文引用了另一篇论文。Friend-ster[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和Webster的节点特征都不能适应我们的实验GPU,我们在实验中禁用了DGL-UVA的特征缓存。我们不与GNNLab [42]进行比较,因为它需要图形拓扑适合一个GPU,并进行异步训练以提高效率。根 据现 有的 工作 [25 , 46], 我们 训 练了 一个 3 层的Graph-SAGE模型,所有层的隐藏大小为256,批量大小为1024,并在默认情况下进行相邻采样,扇出为[15,10,5]。 实验在配备有8个V100 GPU的服务器上进行,每个GPU具有16 GB内存和具有64个核心和480 GB主内存的Intel Xeon E5-2686 CPU。服务器的设备间通信拓扑类似于DGX-1 [26],其中GPU通过NVLink连接,而CPU和GPU通过PCIe连接。我们在报告结果时保留三位正确性。 DSP执行与基线系统相同的BSP训练逻辑,因此当执行相同数量的训练时期(或小批量)时,DSP具有(a) 准确度与批次计数(b)准确度与训练时间图9. GraphSAGE在Papers图形上的训练质量,具有8个GPU。虚线表示收敛精度。相同的训练进度(即,训练损失或测试准确度)。为了进行合理性检查,我们在图9中绘制了DSP、DGL-UVA和Quiver的训练进度。我们在这个实验中省略了PyG,因为Quiver采用了与PyG相同的训练后端图9a表明,V.S. DSP的小批量计数曲线与DGL-UVA和Quiver重叠,表明我们的实现是正确的。但是,由于DSP的小批量时间比DGL-UVA和Quiver短,因此在图9 b中运行相同的时间时,DSP实现了更高的精度。具体来说,DSP、DGL-UVA和Quiver分别需要183秒、698秒和629秒来训练模型收敛。在随后的实验中,我们使用纪元时间(即,经过所有种子节点的一遍的时间)作为主要性能度量,因为短的历元时间直接转化为短的端到端训练时间。7.2主要结果我们在表4中报告了系统的历元时间,这导致了几个观察结果。首先,DSP始终优于不同数据集和GPU计数的基线。与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在GPU上缓存节点功能,而DGL-UVA没有,但在大多数情况下,Quiver比DGL-UVA慢。我们发现这是因为Quiver使用GPU内存产品论文Friendster顶点2M111M66M边缘123M3.2B3.6B平均度50.528.854.5特征尺寸100128256拓扑大小(GB)0.98425.628.8功能大小(GB)0.856.867.6DSP:多GPU高效GNN训练PPoPP400×表4. 每个epoch的训练时间(以秒为单位),最佳为粗体,次佳为斜体系统1-GPU2-GPU4-GPU8-GPU1-GPU2-GPU4-GPU8-GPU1-GPU2-GPU4-GPU8-GPUPyg28.820.417.116.113189.068.349.21110828575477DGL-CPU14.79.296.435.4511176.062.345.11080781537470箭袋5.714.062.822.5170.942.323.817.2449249145118DGL-UVA6.876.033.171.6147.539.630.218.3432410207107DSP3.111.750.9920.61339.124.515.34.6227011664.644.8表5.使用8个GPU训练GCN的时间点(以秒为单位),粗体为最佳,斜体为第二佳9876540 1 2 3 4 56节点功能大小(GB)(a) 论文65554535250123456节点功能大小(GB)(b) Friendster图10.当节点功能的缓存大小不同时,使用8个GPU进行实验CUDA中用于采样的分配接口,例如,cudaMal- loc和cudaFree,它们的开销很大相比之下,DGL-UVA采用了Pytorch中更高效的内存管理接口,这些接口也被DSP所使用然而,当从1个GPU增加到2个GPU时,DGL-UVA的可扩展性非常差这是因为2个GPU位于同一个PCIe交换机上,并且在访问CPU内存时争用带宽。Quiver和DSP也存在类似的问题,但DGL-UVA受到的影响最大,因为它通过PCIe访问所有数据。这种现象表明了使用NVLink的重要性,因为它不仅比PCIe更快,而且还有助于通过卸载通信来为了展示DSP的通用性,我们用另一种流行的GNN模型GCN [19]进行了实验表5报告了系统的历元时间 结果表明,DSP considerably优于基线的一个很大的利润。与GraphSAGE的情况相比,GCN的DSP加速比通常更大。例如,在Frind
下载后可阅读完整内容,剩余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直接复制
信息提交成功