ICDE 2023 | FASI:一个在大图上对FPGA友好的子图同构算法

前言

PKUMOD博士研究生苏勋斌关于用FPGA硬件加速子图同构问题的论文《FASI: FPGA-friendly Subgraph Isomorphism on Massive Graphs》被ICDE 2023接收。

子图同构(又可称为子图匹配)算法是图算法领域的一个重要的课题。由于其问题本身的计算复杂性,随着数据图规模的扩大,如何快速有效地在真实世界的大图上找出所有匹配变得越来越具有挑战性。因此,利用硬件来加速子图匹配算法便越来越受到人们的关注。近些年来,子图匹配算法在GPU上的实现已有了许多的研究工作,但是它们当中的许多能处理的数据图规模都受限于片上空间的大小。FPGA通过其流水线并行也表现出了潜在的竞争力,然而在FPGA上的子图匹配工作很少。在本文中,我们提出了FASI,一个基于FPGA实现的子图匹配算法。不同于现存的基于边验证(edge-verification)的FPGA上的FAST算法,我们采用基于最坏情况下最优连接的流水线设计方法,它充分利用了FPGA的数据级流水特性和突发读写(burst I/O)优化。具体来说,我们设计了一套对FPGA访问友好的数据结构LPCSR,用于对邻接表的高效访存。其次,我们提出了联合并行流水的策略来加速在FPGA上的匹配过程。最后,我们利用合并访存机制和预分配写回策略两项优化技术进一步提高算法的性能。实验结果表明,在多个大规模的真实图数据集上,FASI都比多个现存的CPU,GPU和FPGA上的子图匹配算法有更好的性能。

介绍

近些年来,子图匹配问题在图分析领域扮演着重要的角色。子图匹配算法的目标是在数据图中找出与给定的查询图同构的所有不同的子图,它被广泛地应用于不同的领域,包括社交网络分析,生物领域中的蛋白质相互作用分析,化合物搜索,图模式挖掘,RDF图查询处理等等。但是,快速有效地计算出所有的子图匹配是很有挑战性的,这是因为子图匹配问题是一个很经典的NP难的问题。因此,如何在大图上加速子图匹配是本文的重点。

一般来说,加速子图匹配问题有两个优化方向。其一是在软件层面上实现更加精细的子图匹配算法,大量的CPU上的工作都提出了各自的优化技术,主要包括(但不限于)找到一个更好的匹配顺序,更高效的剪枝策略和构建辅助索引等等。尽管现存的CPU上的子图匹配算法使用了各式各样的启发式策略,当数据图的规模变大时,它们的搜索空间仍然很大。而对于CPU来说,它不能提供很高的并行度,也没有一个灵活的缓存机制,因此其性能不令人满意。第二个优化方向是利用硬件的大规模并行能力来加速子图匹配过程。这一类算法大多采用BFS的执行策略,因此产生的大量的中间结果和硬件有限的片上资源是需要着重考虑的问题。GPU作为老牌的硬件,具有高度的并行性,但其片上存储较少,能耗也比较高。而FPGA作为新兴的硬件,虽然其并行度不如GPU,但利用其数据级流水的特性,通过合理地设计流水线并行,可以表现出不输GPU的性能。除此之外,FPGA比GPU有着更大的片上存储空间和更低的能耗。

我们的目标是设计一个可以处理大图的利用FPGA加速的子图匹配算法。总的来说,在FPGA上设计子图匹配算法主要面临三个挑战:

  • 有限的片上资源:FPGA的片上存储包括Block RAM(BRAM)和Ultra-RAM(URAM)。尽管FPGA的片上存储空间比GPU更大,但相对于数据图规模和中间结果数量来说仍然是不足的。因此,FPGA需要外部存储(DRAM)来辅助,而访问DRAM的速度是远远不如访问片上资源的。所以,这就需要我们优化访存机制和设计缓存机制来减少访存代价。

  • 较低的时钟频率:FPGA的能耗较低,与之对应的就是其有着比GPU和CPU更低的时钟频率。因此,这就要求我们设计合理的流水线算法,通过加深流水线深度,去获得更高的并行度,以获得更好的性能。

  • 并行写冲突:当多条流水线同时需要将它们得到的结果写回到DRAM时,如果它们写回的地址相同,就有可能产生写冲突的问题。而如何在不牺牲性能或只用少量代价的情况下,确保多条流水线并行输出结果的正确性也是需要考虑的一个问题。

针对前面提到的问题,我们提出了一个FPGA上的基于最坏情况下最优连接(WOJ)的流水线优化的子图匹配算法FASI。不同于现存的FPGA上的工作FAST,我们将整个基于WOJ的子图匹配过程放在FPGA上处理,而不是仅仅利用FPGA进行边验证。具体来说,我们设计了一个对FPGA访问友好的数据结构LPCSR,它可以利用FPGA上的突发读写优化,加速对邻接表的访存。同时,我们提出了一个流水线连接的方式来平行化整个子图匹配过程,这利用了FPGA的数据级流水特性,可以部分地重叠访问DRAM的延迟,并且减少片上缓存中间结果的需求。除此之外,我们还设计了访存合并机制以进一步提高访存效率,提出了预分配写回策略以避免并行时的写回冲突问题。

我们跟现有的前沿的CPU,GPU和FPGA上的子图匹配算法进行了对比,实验结果表明我们的算法FASI在能支持的图规模和算法性能上都有明显的优势。

背景知识

图一:FPGA基本架构

图一中展示了FPGA的基本架构。FPGA(现场可编程门阵列)是一种由可配置逻辑块和内存块组成的集成电路。用户可以通过可配置线路连接逻辑单元和存储单元实现任意自定义的逻辑。FPGA通常作为CPU的协同处理器用来加速计算。FPGA与CPU通过PCIe总线相连,CPU配备主存(main memory),FPGA配备全局存储(global memory)。

图二:burst I/O

FPGA处理访存请求是遵循AXI协议的,每个内存请求都有一个AXI头,用于存储辅助信息。FPGA上的突发读写优化可以提高连续访问的速度,如图二所示。如果没有突发读写优化,这些访问请求会一个接一个的处理。但是,如果使用突发读写优化,AXI协议允许将这些请求聚合为一个burst请求,只需要处理一个AXI头,然后可以一直接收数据。

图三:数据级流水

FPGA中的数据级流水为实现基于硬件级模型的流水线执行查询处理提供了可能。如图三所示,传统的流水线查询是在软件级别上的,是指令级流水,即首先转移成一组CPU指令,包括生成、预取、解码等指令。但是,FPGA使用的是数据级流水,可以直接在片上创建计算模块,然后在模块间使用数据流传输,而不需要这些指令的开销,因此其流水线实现具有更高的性能。

FASI概况

FASI系统主要包括两个组成部分,一个是CPU主机端,一个是FPGA内核,如图四所示。

对于CPU主机端,它的主要任务是预处理数据。在离线预处理阶段,它会对数据图进行重排操作,使得重排后的数据图更利于内存访问合并,具体的图排序策略会在后文具体阐述。对数据图重新排序后,CPU主机端构造对FPGA访问友好的数据结构LPCSR,并通过PCIe总线将其加载到FPGA的全局存储上。当接收到查询图,系统运行时,CPU主机端会为每个查询顶点生成相应的候选点集,并基于启发式的策略生成一个全局的匹配顺序,许多其他工作中的产生匹配顺序的策略都可以在这一阶段使用,本文主要着眼于FPGA上的流水线设计。之后,CPU主机端会将生成的候选点集和匹配顺序通过PCIe总线传输给FPGA内核,然后启动FPGA内核进行子图匹配计算。在FPGA内核运行时,CPU主机端只需要等待接收最后的结果,是空闲的,因此我们可以将一部分匹配工作分享给CPU端,实际上FASI是CPU和FPGA协同处理的系统。

图四:FASI系统框架

至于FPGA内核的设计,我们利用FPGA的数据级流水特性来实现查询的流水式评估(pipelined evaluation)。我们采用基于WOJ的连接方式,即在每轮迭代中扩展一个查询顶点,并对这个顶点相关的边做集合求交操作。在匹配过程中,会产生许多中间结果,如果采用传统的实例化评估(materialized evaluation),那么这些中间结果由于数目太多无法缓存在片上,只能转存到FPGA的DRAM上,然后在下一轮迭代中再被取用。然而,FPGA对DRAM的访问是很耗时的。而采用流水式评估,需要缓存的只是部分中间结果,并且由于FPGA对流水线的优化,其流水线执行性能很高,可以大幅度减少片上所需的缓存区大小。与此同时,也可以部分地重叠CPU和FPGA间的传输开销。除了利用流水线并行之外,我们还为FPGA内核创建了多个处理引擎(PE),这些处理引擎可以并行地处理不同的候选集部分。

LPCSR数据结构

由于图数据的I/O不规则性,内存访问成本制约了FPGA子图匹配的性能。在子图匹配过程中,一个频繁被使用到的操作是访问一个顶点的所有标签相同的邻居顶点。而对于传统的CSR结构来说,所有顶点的邻居列表都是连续存放的,没有基于标签的划分。因此,当要访问一个顶点的所有标签为的邻居时,CSR会访问更多的冗余数据,并且这部分标签不对应的邻点是可以被过滤掉的,无形中又增加了过滤阶段的开销。

面对这一问题,GSI[2]提出了对GPU访问友好的PCSR数据结构,它将数据图基于边标签进行划分,然后为了解决图划分后顶点ID不再连续的问题,它将顶点ID哈希到一些固定大小的桶中,称为组,然后根据组ID来组织CSR结构。然而这个结构对FPGA来说却不够友好。其一,由于FPGA的内存事务带宽只有GPU上的一半,因此每个组的规模减小了,导致更容易产生哈希冲突,组溢出的概率大大增加。其二,这种组哈希的方式无法保证访存局部性,不利于连续突发读写。它有可能将连续的顶点的邻居列表存储到相距很远的两个组中。

为了利用FPGA的突发读写优化来加速对邻接表的访存,我们设计了一个对FPGA访问友好的数据结构,称为LPCSR,如图五所示。首先我们同样需要对数据图按标签进行划分,将其划分为多个基于邻居顶点标签切分的子图。为了解决每个切分子图中顶点ID不连续的问题,我们在LPCSR中引入了两个额外的层:

  • 索引列表:存储每个顶点在不同的切分子图的CSR的点表中的位置,将所有顶点的位置索引顺序组成的列表。

  • 邻域结构数组:对于每个顶点,存储其在索引列表中的起始偏移和存在性位图。如果一个顶点出现在某个标签的切分子图中,那么对应的位会被置为1。所有顶点的起始偏移和存在性位图被收集起来,组成一个邻域结构数组。

图五:LPCSR数据结构

因此,一个完整的LPCSR结构包括四层:索引列表,邻域结构数组和传统CSR中的点表和边表。前两层用于快速地定位一个顶点的所有标签为的邻居列表,后两层用于连续地访问邻居列表,而不破坏其局部性。

PE结构

图六:PE结构

每个PE结构如图六所示,它主要由三大类功能模块组成,包括一个候选集读取器,一系列的扩展模块和一个结果写回器。为了减少全局存储和片上存储之间耗时的数据传输操作,在我们的设计中,我们维护了一系列的先入先出缓冲区,这些缓冲区有的在BRAM上,有的在URAM上。具体来说,URAM具有更大的存储容量,BRAM拥有更快的访问速度。因此,我们使用BRAM来存储取回的候选点和邻接表,使用URAM来缓存部分中间结果,以避免频繁地将中间结果转存回DRAM。候选集读取器负责从DRAM中按批次地读取候选顶点到BRAM中。沿着给定的全局匹配顺序,每个扩展模块负责将上一步产生的中间结果用下一个查询顶点进行扩展,采用的是vertex-at-a-time的方式,然后将新产生的中间结果放入下一层的中间结果缓冲区中。每两个扩展模块间都有一个中间结果缓冲区。最后,结果写回器负责将收集到的最终匹配结果按批次地写回到DRAM中。

从逻辑上讲,我们可以将PE结构看作一个WOJ模块,用一棵左深连接树表示它。是一棵左深的二叉树,每个叶子节点对应一个查询顶点和其候选点集,每个内部节点表示扩展一个前缀子查询图,对应着扩展模块。我们采用的是eager pipelining,即下层操作符一产生结果就会推送给上层,而不需要等待上层操作符请求数据,产生的结果会先缓存到二者间的先入先出缓存队列中。

每个扩展模块也可以展开,包括一个邻接表读取器和一系列的交集模块。邻接表读取器负责从DRAM中读取邻接列表,交集模块负责执行具体的多表求交操作。因此,扩展模块同样可以被视作一棵左深的交集树,每个叶子节点对应一个查询顶点和其标签约束的邻接表,除了最右的叶子节点对应下一个查询顶点和其候选点集的位图表示。

综上,一个WOJ被分解成了多个流水模块,从而运用FPGA的数据级流水特性,可以实现快速的子图匹配。

优化技术

为了进一步提高算法的吞吐量,一个直接的想法设计多条独立的流水线,但是多个独立的流水线不共享中间结果,这会带来负载不均衡的问题。因此,我们采用一个联合并行流水的策略。我们在单个PE中实现多条流水线,并且使他们从片上共享缓冲区中拉取和推送数据。这一方面解决了多条流水线间负载不均衡的问题,另一方面为合并访存提供了更多的机会,因为同时从DRAM中访问的邻居列表变多了。当然,这也引起了并行写冲突的问题。综上,我们设计了一套合并访存机制和预分配写回策略来对算法进行优化。

  • 合并访存机制:内存控制器将合并来自中间结果缓冲区的多个中间结果的内存访问请求,合并宽度为,其中受缓冲区大小的限制。具体来说,对于那些需要读取的邻接表,我们测算它们之间的距离,如果两个点的邻居列表间的距离低于一个阈值,我们将合并这两个内存访问请求,并容忍它们之间的冗余。因此,为了提高合并访存的效率,我们希望读取尽量少的冗余数据的同时,尽量多的合并随机访存请求,这就要求我们找到一个合适的顶点排布顺序。在我们的图排序算法中两个顶点相互靠近基于的原则是:(1)它们的邻居列表在匹配过程中经常被同时访问;(2)它们之间的距离需要尽量小。我们定义了一个访存连续性分数,用来描述在某个顶点顺序下的访存连续性的好坏:

  • 节约空间的预分配写回策略:当得到的最终结果需要被并行地写回DRAM时,写冲突问题无可避免。为了解决这一问题,最简单的方式是采用两步输出机制,GPU中的许多子图匹配算法采用此策略,即在第一轮连接时计算匹配的数目,然后通过前缀和计算输出的地址,在第二轮再次执行相同的连接操作,将得到的结果写回到相应的地址。很显然,这种做法执行了两遍连接操作,带来了大量冗余的计算开销。为了解决这一问题,我们采用了预分配写回策略,对于需要求交的多个邻接表,我们寻找其最大的下界和最小的上界,然后将这两个顶点在最小的邻接表中进行二分搜索,获得一个估计的结果数目,将其作为预分配的空间,最终结果的数目一定小于这个值,并且浪费的空间有限。除此之外,对边界顶点的二分搜索也不是额外的开销,它们被隐藏于实际的交集树的执行中。

实验

我们在不同类型不同大小的数据集上进行了实验,实验所用的数据集如表一所示。

表一:数据集信息

我们在FPGA U200卡上实现了FASI,并与几个现存的前沿的子图匹配算法进行了对比实验,包含了CPU上的子图匹配算法CECI[3],DAF[4],RAPID[5],GPU上的子图匹配算法GpSM[6],GSI[2]和FPGA上的子图匹配算法FAST[1],实验结果如下图所示

图七:性能比较

在所有的数据集上,我们的表现都要优于其他的竞争者。DAF和CECI是两个基于索引枚举框架的CPU算法,它们使用了更加复杂的过滤策略,但由于它们是串行算法,没有流水线并行化,因此它们的性能不如FASI。同理,RAPID混合了基于探索的方法和基于连接的方法,是目前较为先进的CPU算法,但由于其并行度低,因此性能也不如FASI。GSI和GpSM是GPU上采用BFS策略的子图匹配算法,但由于它们都采用了实例化评估的方式,因此中间结果的传输大大影响了它们的性能。GpSM表现更差一点,因为它还采用了两步输出方案,因此其计算量更大。另一个重要的问题是,GPU上的子图匹配算法在处理更大的数据图时,会有显存溢出的问题。FAST是现有FPGA上唯一的子图匹配算法,但是它承受了大量的计算CST结构的开销,并且它采用的边验证策略会产生大量无效的冗余中间结果,因此其性能不尽如人意。

除此之外,我们还在实验中验证了FASI算法关于图规模大小和流水线条数的可扩展性,也验证了我们的优化各自的性能提升以及数据结构的合理性,欢迎感兴趣的读者阅读我们的原文。

总结

本文提出了一个FPGA上处理大图的子图匹配算法FASI,它利用了FPGA的数据级流水特性和突发读写优化。不同于现有的FAST算法,FASI将整个基于WOJ的匹配过程都交给FPGA处理。为了提升访存性能,我们设计了LPCSR数据结构和合并访存机制。为了加速匹配过程,我们设计了基于左深连接树的流水线连接。我们的算法在性能和图规模上相比较于现有的子图匹配算法都有明显的提升。

参考文献

[1] X. Jin, Z. Yang, X. Lin, S. Yang, L. Qin, and Y. Peng, “Fast: Fpga-based subgraph matching on massive graphs,” in 2021 IEEE 37th International Conference on Data Engineering (ICDE). IEEE, 2021, pp. 1452–1463.

[2] L. Zeng, L. Zou, M. T. O¨ zsu, L. Hu, and F. Zhang, “Gsi: Gpu-friendly subgraph isomorphism,” in 2020 IEEE 36th International Conference on Data Engineering (ICDE). IEEE, 2020, pp. 1249–1260.

[3] B. Bhattarai, H. Liu, and H. H. Huang, “Ceci: Compact embedding cluster index for scalable subgraph matching,” in Proceedings of the 2019 International Conference on Management of Data, 2019, pp. 1447– 1462.

[4] M. Han, H. Kim, G. Gu, K. Park, and W.-S. Han, “Efficient subgraph matching: Harmonizing dynamic programming, adaptive matching order, and failing set together,” in Proceedings of the 2019 International Conference on Management of Data, 2019, pp. 1429–1446.

[5] S. Sun, X. Sun, Y. Che, Q. Luo, and B. He, “Rapidmatch: a holistic approach to subgraph query processing,” Proceedings of the VLDB Endowment, vol. 14, no. 2, pp. 176–188, 2020.

[6] H.-N. Tran, J.-j. Kim, and B. He, “Fast subgraph matching on large graphs using graphics processors,” in International Conference on Database Systems for Advanced Applications. Springer, 2015, pp. 299– 315.

欢迎关注北京大学王选计算机研究所数据管理实验室微信公众号“图谱学苑“
实验室官网:https://mod.wict.pku.edu.cn/

实验室开源产品图数据库gStore:
gStore官网:http://www.gstore.cn/
GitHub:https://github.com/pkumod/gStore
Gitee:https://gitee.com/PKUMOD/gStore

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值