首页 / 专利库 / 资料储存系统 / 逻辑单元号 / 基于FPGA-CPU异构环境的大规模数据查询加速装置及方法

基于FPGA-CPU异构环境的大规模数据查询加速装置及方法

阅读:748发布:2020-05-11

专利汇可以提供基于FPGA-CPU异构环境的大规模数据查询加速装置及方法专利检索,专利查询,专利分析的服务。并且本 发明 公布了一种基于FPGA-CPU异构环境用于图 数据库 的大规模数据查询 加速 方法及其在FPGA上的实现装置,将待查询处理的大规模数据表示为资源描述 框架 RDF格式的大规模图数据集,基于FPGA-CPU异构环境实现查询加速,解决在大规模数据集上对数据进行快速的查询的问题,加速图数据库查询,可广泛应用于基于图 数据处理 的应用技术领域。将该方法应用于自然语言问答智能查询中。实施表明,采用本发明方法,查询加速比例在两倍以上,可达到十倍加速,可以更好地满足对响应时间要求较高的应用需求。,下面是基于FPGA-CPU异构环境的大规模数据查询加速装置及方法专利的具体信息内容。

1.一种基于FPGA-CPU异构环境的大规模数据查询加速方法,将待查询处理的大规模数据表示为资源描述框架RDF格式的大规模图数据集,基于FPGA-CPU异构环境实现查询加速;
包括如下步骤:
1)将待查询处理的大规模数据识别为多个要素,包括:实体、实体属性及关系;将实体相应表示为RDF格式中的节点,实体固有的属性表示为RDF格式中的节点的属性,实体和实体之间的关系以及实体和属性的关系表示为RDF格式中的边;RDF格式数据由节点和边组成,图中一条边的源点为主语,边上的标签为谓词,被指向的节点为宾语;
对以RDF格式表示的大规模数据进行数据预处理,执行如下操作:
11)将大规模图数据集中的图数据按照谓词划分成多个子图,将每个子图数据的邻接矩阵使用优化存储消耗后的CSR格式进行存储;所述邻接矩阵为将所有节点的邻接列表按一定顺序排列构成的二维列表;邻接列表为图中任意节点链接的所有节点的列表;图采用CSR存储格式或CSC存储格式;
12)对每个CSR格式图数据中的邻接列表,使用编号与二进制段方法BID&BS方法进行压缩,得到压缩后的CSR格式数据;执行如下操作:
121)用二进制串来表示正整数数组,所述正整数数组为CSR中的邻接表,串中的元素取值为0或1,数组中元素是节点的编号;
122)将二进制串划分为多个长度一致的块,每一个块设置同一长度的唯一的编号Block ID;当块内的二进制串均为0,则直接丢弃;
123)当对两个由多个块构成的集合取交集时,首先匹配块编号,对块编号一致的两个块,按位取交,得到交集结果;
2)将预处理得到的CSR格式数据写入FPGA端的存储单元上,得到不同谓词对应的子图被压缩成CSR格式的邻接列表在FPGA端存储单元的物理地址;
3)当用户进行查询时,执行如下操作:
31)对用户查询进行解析后,根据图中数据,得到候选点表数据;
32)通过CPU控制单元将候选点表数据及FPGA端计算单元在运算过程中的控制信号传输给FPGA端的计算单元进行表连接计算计算并优化;执行如下操作:
321)通过分割数据,将数据放到不同的动态随机存取存储器DRAM内存单元端口,提高FPGA硬件上对内存单元的并行访问效率;
322)利用FPGA硬件上的高速片上随机存取存储器BRAM单元,设置数据缓冲区;
323)基于FPGA硬件构建数据读取、计算、写回的三级流线,在每个计算和读取操作中设置并行处理模块;
33)FPGA端的计算单元完成计算以后,将结果传回给CPU端控制单元,CPU端生成编号结果,再转化成对应的字符串结果,即为输出给用户的查询结果。
2.如权利要求1所述的基于FPGA-CPU异构环境的大规模数据查询加速方法,其特征是,步骤31)中,具体对大规模图数据集gStore使用SPARQL查询中各个变量的度数和边上的标签对各个变量可能的取值进行过滤解析,得到所述候选点表数据。
3.如权利要求1所述的基于FPGA-CPU异构环境的大规模数据查询加速方法,其特征是,步骤32)中,控制信号包括控制FPGA端计算单元开始计算的信号、CSR格式数据在FPGA端存储单元上的硬件地址和辅助信息。
4.如权利要求1所述的基于FPGA-CPU异构环境的大规模数据查询加速方法,其特征是,步骤33)具体包括如下操作:
331)FPGA端计算单元有序处理表的连接操作;CPU控制单元接受FPGA端计算单元返回的结果,返回结果的形式由多个节点ID和一个BID&BS块构成的一个元组;CPU端控制单元同时控制多个FPGA端计算单元;
332)CPU端控制单元将每个FPGA端计算单元的结果转化成连接操作的最终结果或下一步FPGA端计算单元的输入,包括以下过程:
设定FPGA端计算单元的结果元组中有N个元素,将元组中前N-1个元素映射到CSR格式的偏移量数组上的节点ID,再将节点ID映射回在图数据库中的编号输出;第N个元素是一个BID&BS块;
将第N个元素解压,得到多个节点编号;
将得到的节点编号与前面N-1个元素,即构成一条最终结果;
所述最终结果的形式是长度为N,元素为节点编号的一个元组;每个元组表示符合查询要求的一个连接操作的编号组合;
该编号组合中即为系统最终输出给用户的查询结果。
5.如权利要求1所述的基于FPGA-CPU异构环境的大规模数据查询加速方法,其特征是,所述方法应用于自然语言智能问答查询,待查询处理的大规模数据为自然语言问答数据;
将自然语言问答数据中的人物、事件、事物识别为实体,相应表示为RDF格式中的节点;所述实体的属性定义为节点的属性。
6.一种基于FPGA-CPU异构环境的大规模数据查询加速装置,包括:大规模数据库模块、数据预处理器、CPU端控制单元和FPGA端;FPGA端包括FPGA端存储单元和FPGA端计算单元;
A.大规模数据库模块用于存储以资源描述框架RDF格式表示的大规模图数据集;数据节点数量在千万级及以上,边数量在亿级以上;大规模数据库模块包括图数据库数据及数据查询支持模块;
B.数据预处理器用于对数据进行预处理,包括:
将图数据库的连接操作;
抽取出其中的部分数据;
根据稀疏行压缩CSR格式生成访存友好的数据索引;
采取块编号与二进制段方法BID&BS对邻接表数据和候选点表数据进行压缩存储;
C.CPU端控制单元用于调用数据预处理器对数据进行预处理,具体为:
调用数据预处理器,得到压缩和转化的图数据,由FPGA端计算单元读取;
然后将FPGA端计算单元所需的数据传递给FPGA端计算单元;
同时,CPU控制单元还接受FPGA端计算单元返回的结果,每一个结果的形式是由多个节点ID和一个BID&BS块构成的一个元组,CPU端控制单元同时控制多个FPGA端计算单元;
CPU端控制单元会将每个FPGA端计算单元输出的数据转化成最终连接操作的结果或下一步FPGA端计算单元的输入;最终结果的形式是一个长度为N,元素为正整数的元组,每个元组表示符合查询要求的一个连接操作的编号组合;
D.FPGA端计算单元用于在FPGA硬件上执行多个表连接操作,在FPGA的逻辑单元上优化实现;包括:
首先通过分割数据,放到不同的动态随机存取存储器DRAM内存单元端口;
其次利用FPGA硬件上的高速片上随机存取存储器BRAM单元设计数据缓冲区;
最后利用FPGA硬件构建数据读取、计算、写回的三级流水线,在每个操作中设计并行处理逻辑,使得FPGA端计算单元快速地将单次多表连接操作得到的结果返回CPU控制单元。
7.如权利要求6所述基于FPGA-CPU异构环境的大规模数据查询加速装置,其特征是,以RDF格式表示的大规模图数据集具体采用LUBM数据集。
8.如权利要求6所述基于FPGA-CPU异构环境的大规模数据查询加速装置,其特征是,块编号与二进制段BID&BS方法具体步骤为:
121)用二进制串来表示正整数数组,串中的元素取值为0或1,数组中元素是节点的编号;
122)将二进制串划分为多个长度一致的块,每一个块设置同一长度的唯一的编号Block ID;当块内的二进制串均为0,则直接丢弃;
123)当对两个由多个块构成的集合取交集时,首先匹配块编号,对块编号一致的两个块,按位取交,得到交集结果。

说明书全文

基于FPGA-CPU异构环境的大规模数据查询加速装置及方法

技术领域

[0001] 本发明属于信息搜索查询技术领域,涉及大规模数据搜索加速技术,尤其涉及一种基于FPGA-CPU异构环境的大规模数据查询加速方法及其在FPGA上的实现装置。

背景技术

[0002] 在大规模数据检索与查询中,图数据库是一个使用图结构进行语义查询的数据库,它使用节点、边和属性来表示和存储数据。该系统的关键概念是图,它直接将存储中的数据项,与数据节点和节点间表示关系的边的集合相关联。这些关系使得存储单元中的数据链接在一起,并且可以通过特定的规范化的操作和查询语言进行检索。图数据库中最重要的内容是数据之间的关系,它们永久存储在数据库本身中,查询图数据库中的实体关联关系的速度是评价图数据库性能的主要因素。用户可以使用图数据库直观地显示实体的关联关系,对于处理高度互连的数据不可或缺。诸如电网络等一系列在现实生活中体现实体之间关系的具有重要意义的数据,对通过图数据库对这些数据进行快速而高效的检索、增删和分析处理。
[0003] 从图数据库中检索数据需要SQL之外的查询语言,SQL是为了处理关系系统中的数据而设计的,因此无法高效地处理遍历图。截至2019年,还没有出现一个像SQL那样通用的图查询语言。不过,已经有一些标准化的工作为各大供应商提供了查询语言。其中,SPARQL(SPARQL Protocol and RDF Query Language)语言使用三元组表达用户查询,支持多种聚合函数,被大多数供应商所支持。
[0004] 时至今日,图数据库在广泛的领域中得到了应用。诸如Google搜索引擎中的自动联想推荐、电商的交易网络中的欺诈检测、社交网络中的模式发现等等,都需要图数据库的支持。目前,大多数图数据库在处理百万级别到千万级别的边数的数据集时能达到一定的性能,但是,当数据规模扩大到亿级甚至十亿级时,其性能会出现显著的降低。而且不是线性的降低,而是几何级的降低。这一方面是由于这些图数据库内部采取的策略和算法不适用于如此巨大的数据规模,另一方面也由于大部分图数据完全运行在CPU上,采用串行的算法进行处理,并且需要从磁盘等慢速的存储单元读取数据,无法享受到目前新硬件发展所带来的优势。
[0005] 图数据库性能瓶颈,很大程度上在于,图数据规模巨大时,进行图上的Join操作需要耗费大量的时间和计算资源。为了实现图上的join操作,目前最常用的方法是,遍历其中一个集合,读取每一个节点的邻接列表,然后将其与另一个集合求交集,最后将结果加入结果集中。这种做法主要的缺点是,遍历图中点的顺序对计算性能的影响很大,因此,需要谨慎选取点的遍历顺序。其次,这种操作会带来大量的存储单元访问,严重影响处理的速度。
[0006] 目前,绝大部分图数据库在小规模数据集上的性能已经达到了一定的高度,然而,其中的某些策略在数据集规模扩大以后将会失效,甚至阻碍系统的高效执行。本发明旨在利用FPGA硬件平台,解决在大规模数据集上对数据进行快速的查询的问题。

发明内容

[0007] 为了克服上述现有技术的不足,本发明提供一种基于FPGA-CPU异构环境用于图数据库的大规模数据查询加速方法及其在FPGA上的实现装置,解决在大规模数据集上对数据进行快速的查询的问题,加速图数据库查询,可以广泛应用于基于图数据处理的应用技术领域。
[0008] 本发明提供的技术方案是:
[0009] 一种基于FPGA-CPU异构环境的大规模数据查询加速装置,包括:大规模数据库模、数据预处理器、CPU端控制单元、FPGA端(包括FPGA端存储单元和FPGA端计算单元)。
[0010] 大规模数据库模块用于存储以RDF(资源描述框架,Resource Description Framework)格式表示的大规模图数据集,如LUBM(the Lehigh University Benchmark)数据集。其节点数量在千万级及以上,边数量在亿级以上。大规模数据库模块包括图数据库数据及数据查询支持模块。RDF由节点和边组成,节点表示实体/资源、属性,边则表示了实体和实体之间的关系以及实体和属性的关系。通常来说,图中一条边的源点被称为主语,边上的标签被称为谓词,被指向的节点成为宾语。
[0011] 数据预处理器用于对数据进行预处理,为数据检索查询做准备。预处理包括:将图数据库的连接操作(join操作)所需的部分数据抽取出来;根据CSR(稀疏行压缩,Compressed Sparse Row)格式的规范生成访存友好的数据索引。同时,针对硬件环境中位操作性能最佳的特点,采取自行设计的块编号与二进制段方法(BID&BS,Block ID&Bit Stride方法)对邻接列表数据和候选点表数据进行压缩存储。具体步骤为,对一个数组,假如其中的元素都是正整数,而且有一个固定的范围,可以使用一个二进制串来表示这个数组,其中第i位为0表示i这个数没有出现在数组中,第i位为1表示i这个数出现在了数组中。这种表示方法的数组取交集时只需要对两个二进制串按位求与操作即可,非常适合FPGA端硬件实现。但是这样的二进制串往往很稀疏,浪费大量存储空间。于是,可以将二进制串划分为若干个长度一致的块(Block),并用同样多的位表示每一个块的唯一的编号(Block ID)。其中,如果这个块内的二进制串全部都是0,则可以直接丢弃不要。在取交集时,首先匹配块编号,对块编号匹配的两个块,按位取交,即可直接得到这一部分的交集的结果。此方法使得在使用本发明提供的基于FPGA-CPU异构环境的大规模数据查询加速装置进行查询加速时无需进行数据解压,也能够正常进行交集计算,从而大大提高查询性能,提高基于图数据查询的图计算算法的效率;
[0012] CPU端控制单元用于调用数据预处理器对数据进行一定的预处理,具体为,调用数据预处理器,得到预处理器压缩和转化之后的适合FPGA端计算单元读取的图数据。然后将FPGA端计算单元所需的数据传递给FPGA端计算单元,并使其更便于FPGA端计算单元读取。同时,CPU控制单元还接受FPGA端计算单元返回的结果,每一个结果的形式是由多个节点ID和一个BID&BS块构成的一个元组,CPU端控制单元同时控制多个FPGA端计算单元,并且这些FPGA端计算单元是有序的,第一个FPGA端计算单元处理两个表的连接操作,第二个FPGA端计算单元处理三个表的连接操作,以此类推。CPU端控制单元会将每个FPGA端计算单元输出的数据转化成最终连接操作的结果或下一步FPGA端计算单元的输入,具体转化方法是一致的,假设结果中有N个元素,对在元组中前N-1个元素,它们是被映射到某个CSR格式(结构)的偏移量数组上的节点ID,输出为最终结果时需要将它们映射回在图数据库中的编号,而第N个元素是一个BID&BS块,需要将它解压,得到的每一个编号都能够与前面N-1个元素构成一条最终结果。换而言之,最终结果的形式是一个长度为N,元素为正整数的元组,每个元组表示符合要求的一个连接操作的编号组合;
[0013] FPGA端计算单元用于在FPGA硬件上执行多个表连接(join)的算法,算法实现在FPGA的逻辑单元上,并且针对硬件运行的特点进行了优化。具体的优化策略为:首先,通过分割数据,放到不同的DRAM(Dynamic Random Access Memory,动态随机存取存储器)内存单元端口,提高FPGA硬件上对内存单元的并行访问效率;其次,利用FPGA硬件上的高速BRAM(Block Random Access Memory,片上随机存取存储器)单元,设计数据缓冲区;最后,利用FPGA硬件自定义的特点,构建数据读取、计算、写回的三级流线,在每个操作中,根据实际情况设计并行处理逻辑。最终,FPGA端计算单元可以快速地将单次多表连接操作得到的结果返回CPU控制单元。
[0014] 本发明还提供一种基于FPGA-CPU异构环境的大规模数据查询加速方法,针对以资源描述框架RDF格式表示的大规模图数据集实现基于FPGA-CPU的查询加速;包括如下步骤:
[0015] 1)将待查询处理的大规模数据识别为多个要素,包括:实体、实体属性及关系;将实体相应表示为RDF格式中的节点,实体固有的属性表示为RDF格式中的节点的属性,实体和实体之间的关系以及实体和属性的关系表示为RDF格式中的边;对以RDF格式表示的大规模数据进行数据预处理,RDF格式数据由节点和边组成,图中一条边的源点为主语,边上的标签为谓词,被指向的节点为宾语。
[0016] 具体实施对自然语言智能问答查询应用中,将知识库中的能够被赋予属性和关系的个体包括人物、事件、事物等定义为实体,相应表示为RDF格式中的节点,节点的属性定义为这些个体固有的属性,包括如人物的生日,事物的名称等;实体和实体之间的关系以及实体和属性的关系表示为RDF格式中的边。
[0017] 数据预处理包括:11)将大规模图数据集中的图数据按照谓词划分成多个子图,将每个子图数据的邻接矩阵使用优化存储消耗后的CSR格式进行存储。
[0018] RD F格式表示的大规模数据由节点和边组成,节点表示实体/资源、属性,边则表示了实体和实体之间的关系以及实体和属性的关系。通常来说,图中一条边的源点被称为主语,边上的标签被称为谓词,被指向的节点成为宾语。
[0019] 本发明提供的基于FPGA-CPU异构环境的大规模数据查询加速方法,连续地随机读取图中任意节点链接的所有节点的列表,该列表称为邻接列表。邻接列表分为出边邻接列表与入边邻接列表,分别表示节点作为主语或者宾语时的邻接列表。将所有节点的邻接列表按一定顺序排列构成的二维列表,即为邻接矩阵。图的CSR存储格式和CSC存储格式可提高访问的运行效率。
[0020] 12)对每个CSR格式图数据中的邻接列表,使用块编号与二进制段方法BID&BS方法进行压缩,得到压缩后的CSR格式数据。
[0021] 块编号与二进制段方法(BID&BS,Block ID&Bit Stride方法)对邻接列表数据和候选点表数据进行压缩存储。具体步骤为:
[0022] 121)用二进制串来表示CSR中的邻接表(为正整数数组),串中的元素取值为0或1,数组中元素是节点的编号;
[0023] 对一个数组,假如其中的元素都是正整数,而且有一个固定的范围,可以使用一个二进制串来表示这个数组,其中第i位为0表示i这个数没有出现在数组中,第i位为1表示i这个数出现在了数组中。这种表示方法的数组取交集时只需要对两个二进制串按位求与操作即可,非常适合FPGA端硬件实现。
[0024] 122)将二进制串划分为多个长度(位)一致的块(Block),每一个块设置同一长度的唯一的编号(Block ID);
[0025] 二进制串往往很稀疏,浪费大量存储空间。本发明将二进制串划分为若干个长度一致的块(Block),并用同样多的位表示每一个块的唯一的编号(Block ID);当块内的二进制串均为0,则直接丢弃;。
[0026] 123)当取两个由多个块构成的集合的交集时,首先匹配块编号,对块编号一致的两个块,按位取交,即可直接得到交集结果。2)在计算开始前,将预处理得到的CSR格式数据写入到FPGA端的存储单元上,得到不同谓词对应的子图被压缩成CSR格式的邻接列表在FPGA端存储单元的物理地址;
[0027] 3)当用户进行查询时,执行如下操作:
[0028] 31)对用户查询进行解析后,根据图中数据,得到候选点表数据;
[0029] 具体实施时,大规模图数据集采用gStore,gStore使用SPARQL查询中各个变量的度数和边上的标签对各个变量可能的取值进行过滤来解析得到候选点表数据;
[0030] 32)CPU控制单元将候选点表数据以及FPGA端计算单元在运算过程中需要的控制信号传输给FPGA端的计算单元进行表连接(join)的算法计算并优化;其中,控制信号包括控制FPGA端计算单元开始计算的信号,CSR格式数据在FPGA端存储单元上的硬件地址和辅助信息(如候选点表的长度,需要哪一个CSR格式数据)。
[0031] 包括如下步骤:
[0032] 321)通过分割数据,将数据放到不同的动态随机存取存储器DRAM内存单元端口,提高FPGA硬件上对内存单元的并行访问效率;
[0033] 322)利用FPGA硬件上的高速片上随机存取存储器BRAM单元,设置数据缓冲区;
[0034] 323)基于FPGA硬件自定义的特性,构建数据读取、计算、写回的三级流水线,在每个计算和读取操作中设置并行处理模块;
[0035] 33)FPGA端的计算单元完成计算以后,将结果传回给CPU端控制单元,CPU端利用这些结果生成最终的计算结果,再转化成对应的字符串结果,即为输出给用户的查询结果。具体操作包括:
[0036] 331)CPU控制单元接受FPGA端计算单元返回的结果,每一个结果的形式是由多个节点ID和一个BID&BS块构成的一个元组,CPU端控制单元同时控制多个FPGA端计算单元,并且这些FPGA端计算单元是有序的,第一个FPGA端计算单元处理两个表的连接操作,第二个FPGA端计算单元处理三个表的连接操作,以此类推。
[0037] 332)CPU端控制单元将每个FPGA端计算单元的结果转化成连接操作的最终结果或下一步FPGA端计算单元的输入。
[0038] 设定FPGA端计算单元的结果(一个元组)中有N个元素,将元组中前N-1个元素映射到CSR格式(结构)的偏移量数组上的节点ID,再将节点ID映射回在图数据库中的编号输出;第N个元素是一个BID&BS块,将第N个元素解压,得到若干个节点编号,这些节点编号应该包含在取交集的结果里。这些得到的编号都与前面N-1个元素即构成一条最终结果。最终结果的形式是一个长度为N,元素为节点编号的元组,每个元组表示符合查询要求的一个连接操作的编号组合。编号组合中,编号和节点数据是一一对应的,也就确定了一个查询答案中应该出现的节点集合,即为系统最终输出给用户的查询结果。
[0039] 与现有技术相比,本发明的有益效果是:
[0040] 本发明提供一种基于FPGA-CPU异构环境用于图数据库的大规模数据查询加速方法及其在FPGA上的实现装置,可应用于在处理连接操作时涉及候选点表和邻接列表的求交操作的数据库查询,解决在大规模数据集上对数据进行快速的查询的问题,加速图数据库查询,可以广泛应用于基于图数据处理的应用技术领域如社交网络、金融控、物联网应用、关系分析、IT运维、推荐引擎等。通过对输入输出格式进行调整,本发明可以与图数据库系统结合,提高图数据库系统的查询响应速度。将该方法应用于自然语言问答智能查询中,自然语言问答数据中的人物、事件、事物识别为实体,相应表示为RDF格式中的节点;实体的属性定义为节点的属性,实体和实体之间的关系以及实体和属性的关系表示为RDF格式中的边。具体实施表明,采用本发明技术方案,查询加速比例在两倍以上,可达到十倍加速,可以更好地满足对响应时间要求较高的应用需求,例如可以实现实时的图模式查询发现。附图说明
[0041] 图1为本发明实施例中采用的CSR结构(格式)示意图。
[0042] 图2为本发明实施例采用的BID&BS压缩方法实施示意图。
[0043] 图3是本发明提供的加速装置/加速器的结构框图
[0044] 图4是本发明提供的加速装置第0层的Kernel结构框图。
[0045] 图5是本发明实施例查询过程中取交集计算的流程框图。

具体实施方式

[0046] 下面结合附图,通过实施例进一步描述本发明,但不以任何方式限制本发明的范围。
[0047] 本发明提供一种基于FPGA-CPU异构环境用于图数据库的大规模数据查询加速方法及其在FPGA上的实现装置。加速图数据库查询可以支持大量基于图数据的应用场景。例如:需要快速寻找图数据中某种固定模式的应用场景:比如公司之间的持股关系可以表达成图数据的形式。欺诈检测是非常适合图数据库的一种应用场景。在现代欺诈及各种类型的金融犯罪中,例如行欺诈,信用卡欺诈,电子商务欺诈,保险欺诈等,欺诈者通常是使用改变自身身份等手段,来达到逃避风控规则的欺诈目的。但是,欺诈者往往难以改变所有涉及网络的关联关系,难以在所有涉及的网络群体中同步执行相同操作来躲避风控。而图数据可建立跟踪全局的用户跟踪视。但是,在不使用加速装置的情况下,时间代价无法接受。使用了加速装置后,算法运行速度可提高2倍以上。另外,还有需要支持自定义的实时查询的应用场景,其包括,很多研究机构与商业公司基于图数据(通常是知识图谱)来构建特定领域的或开放领域的自然语言问答系统。在这些问答系统底层,需要图数据库支持,以便于快速地从图数据中获取解析和回答自然语言问题所需的信息。例如,某人工智能公司研发的智能问答系统框架中,在使用句向量编码、句式解析、词义过滤、情感识别、文本聚类与分类等机器学习工具将自然语言转化为图数据库可以识别的SPARQL后,利用图数据库对后台以三元组形式存储的,涵盖常识、古诗词、生活事件、音乐等领域的,规模接近亿条边级的知识库进行检索。每天这样的访问约20万次左右,高峰时期并发约5个链接,平均每秒10次请求。这一步骤的时延约占总体时延的30%左右。使用本发明的技术方案对图数据库查询进行加速以后,能够将时延占比降低到15%,并使得高峰期吞吐量翻倍,从而帮助该公司实现了秒级以内的响应速度。
[0048] 上述基于FPGA-CPU异构环境的大规模数据查询加速方法中,大规模数据为在处理连接操作时涉及候选点表和邻接列表的求交操作的数据库,如图数据库,可应用于自然语言问答查询加速等应用中。具体实施以将自然语言知识库表示成图数据为例,包括如下操作:
[0049] 1)确定图数据中节点以及边对应的实际含义。在自然语言知识库中,节点通常表示知识库中的所有可以产生相互关系,具有属性的主体,比如人、事物、地点等,边则表示主体之间的相互关系,如互为配偶、出生地、所在地等。
[0050] 2)确定图数据中节点以及边的属性。节点的属性通常代表节点对应的实体的固有特性,例如,人的年龄、性别、生日,地点的名称等等。边的属性通常代表关系带有的特性。例如在互为配偶关系中,可能存在开始时间、结束时间等属性。
[0051] 3)根据上述定义,采用一定的图数据格式,将数据转化为图数据。以RDF格式为例,RDF格式中对节点和边的定义,以及其各自属性的定义方式都有详细的格式规定,根据格式规定进行数据转化即可。
[0052] 现有技术中,将自然语言转化为图数据库中的SPARQL查询的方法可包括以下步骤:
[0053] 1)进行实体识别,将自然语言中的元素与图数据库中的节点建立关联。
[0054] 在自然语言中包括的要素,在图数据库中可能有对应的节点,但是节点的名称和自然语言在字面内容上不一定完全一致。例如,自然语言中提及“李白”,在图数据库中,有可能对应的节点的标签为“李白(唐朝诗人)”。需要将二者联系起来。目前常用的方法基本上都要借助图数据库中的信息,利用模式匹配或者深度学习的方法来进行实体识别。
[0055] 2)确定依赖关系;
[0056] 所谓依赖关系是指自然语言的实体之间的语义关系。通常,一条依赖关系对应图数据中的两个节点以及一条边。目前常用依赖关系树生成的方法来确定依赖关系。
[0057] 3)生成查询。
[0058] 利用前面得出的实体信息和依赖关系信息,可通过机器学习方法,生成图数据库可以识别的查询。
[0059] 图数据库查询是非常基础的图数据操作,不管是对用户提供查询本身或是基于查询的应用接口,都对图数据库查询有一定的要求。图数据规模巨大时,进行图上的Join操作需要耗费大量的时间和计算资源。图上的Join操作与关系型数据库中表的Join操作类似,都是根据一定的条件寻找两个集合中的匹配项。不同之处在于,关系型数据库中通常采用等值条件来确定元素是否匹配,而图数据库中的Join操作则需要通过判断元素之间是否存在关系来确定元素是否匹配。与关系型数据库中的Join操作相比,图数据库中的Join操作涉及更多的存储读取和计算操作,因此更加复杂。
[0060] 从本质上上说,进行图上的Join操作的目的是为了进行子图同构的计算。在大部分图数据中,用户查询可以被表示为查询图。查询的执行等价于在整个数据图中寻找与查询图具有同构关系的子图。在计算机理论中,同构问题的定义为:两个简单图G和H称为是同构的,当且仅当存在一个将G的节点1……n映射到H的节点1……n的一一对应σ,使得G中任意两个节点i和j相连接,当且仅当H中对应的两个节点σ(i)和σ(j)相连接。如果G和H是有向图,那么同构的定义中还进一步要求对于G中任意两个相连的节点i和j,边(i,j)与它在H中对应的边(σ(i),σ(j))方向相同。FPGA的并行计算效率高。FPGA属于并行计算,一次可执行多个指令的算法,而传统的ASIC、DSP甚至CPU都是串行计算,一次只能处理一个指令集,如果ASIC和CPU需要提速,更多的方法是增加频率,所以ASIC、CPU的主频一般较高。FPGA虽然普遍主频较低,但对部分特殊的任务,大量相对低速并行的单元比起少量高效单元而言效率更高。另外,从某种角度上说,FPGA内部其实并没有所谓的“计算”,最终结果几乎是类似于ASIC“电路直给”,因此执行效率就大幅提高。
[0061] RDF(Resource Description Framework),即资源描述框架,其本质是一个数据模型(Data Model)。它提供了一个统一的标准,用于描述实体/资源。简单来说,就是表示事物的一种方法和手段。RDF形式上表示为SPO三元组,有时候也称为一条语句(statement),知识图谱中我们也称其为一条知识。
[0062] RDF由节点和边组成,节点表示实体/资源、属性,边则表示了实体和实体之间的关系以及实体和属性的关系。通常来说,图中一条边的源点被称为主语,边上的标签被称为谓词,被指向的节点成为宾语。
[0063] 在本发明中,需要连续地随机读取图中任意节点链接的所有节点的列表。在图论中,这个列表被称为邻接列表。在有向图中,邻接列表分为出边邻接列表与入边邻接列表,分别表示节点作为主语或者宾语时的邻接列表。将所有节点的邻接列表按一定顺序排列构成的二维列表,称为邻接矩阵。然而,在计算机系统中,连续的随机的对存储单元的访问将导致低下的运行效率。因此,研究人员通过借鉴稀疏矩阵的CSR(Compressed Sparse Row)存储格式,提出了图的CSR存储格式和CSC(Compressed Sparse Row,列稀疏压缩存储)存储格式。
[0064] 图1的CSR存储格式由两个数组C和E构成。其中,E由全体节点的邻接列表首尾相接构成。由于图数据库系统通常会为节点设置节点ID,因此,可以按照节点ID从大到小的顺序,来组合所有节点的邻接列表。而C的长度与图中的节点数量相同,下标为i的节点的值等于ID为i的节点的邻接列表在E中第一个元素的位置。当邻接列表为出边邻接列表时,称为CSR格式,当邻接列表为入边邻接列表时,称为CSC格式。由于数组C表示的是邻接列表在E中的偏移量,因此数组C又称为offset数组。
[0065] 本发明的技术方案包括:数据预处理部分、CPU控制单元部分和FPGA计算单元部分。具体实施时,本发明采用Verilog语言编写FPGA端的计算单元,使用C++编写CPU端的控制单元程序。本发明的开发与运行基于Xilinx公司销售的U200 FPGA板卡及其配套的运行以及开发环境。U200配备有16GB*4的内存空间,2175*18K的芯片内置存储空间。因此,在U200上实现本发明时,将邻接列表分割成128组,进行128路并行的交集计算。其配套的开发环境能够将Verilog语言对应的硬件逻辑映射到FPGA硬件之中。
[0066] 本发明基于开源的图数据库系统gStore,针对50亿边规模的lubm数据库,以及其对应的benchmark中涉及的join查询,实现一个CPU-FPGA异构的图数据库系统查询加速器。
[0067] 数据预处理部分
[0068] 目前,存在多种存储和表示图数据的标准格式,其中,RDF格式得到广泛的使用。本发明适用的图数据格式是RDF格式。在计算过程中,对图数据的邻接矩阵使用CSR格式进行存储。
[0069] 在RDF格式中,节点之间的关系使用三元组来表示。在进行用户查询处理的时候,三元组中主语、宾语和谓词的值都需要进行匹配。然而,CSR格式中并不能区别由不同的谓词链接的邻居。因此,在本发明中,对图数据根据谓词进行了分割。将所有具有同样谓词的边抽出来构成一个子图,并为每个子图生成一个单独的CSR结构(格式)。在查询处理过程中,通过额外的参数确定将要读取哪一个CSR中的数据。
[0070] 如此处理,仍然存在一个缺陷。根据谓词得到的子图的规模可能远小于原图的规模,使得CSR中的offset数组非常稀疏,浪费了大量的存储空间。因此,对于每一个子图,本发明预先维护了一个映射结构。对给定子图中全体度数大于等于1的节点,设其数量为n,按照ID从小到大的顺序,将其重新编号为0……n-1,再在新的编号下构建CSR中的offset矩阵,而E矩阵则保持不变,即邻接列表中的元素仍然是重编号之前的节点ID。
[0071] 同时,为了提高算法在FPGA硬件上的并行度,降低计算复杂度,本发明采用了一种基于二进制位串的数据压缩方式,称为BID&BS结构。
[0072] 从硬件角度上看,运行速度最快的是二进制的位操作。要使用位操作来完成取交集,最直观的思路是将集合中的元素表示为一个二进制串的形式,其中,第i位取1,说明集合中存在编号为i的元素存在,否则不存在(假设集合中的元素都是有编号的,实际上,绝大多数图数据库都会对节点进行编号)。然后,只需要对两个二进制串进行一次按位与操作,得到的结果就是交集的二进制串表示。但是,在实际应用的图中,绝大多数都是稀疏图,平均度数不高,从而导致二进制串中有大量的连续的0,影响性能。
[0073] BID&BS压缩法的基本思想是,对上述的二进制串分割成多个块,对每一部分,给一个唯一的Block ID(BID),而在每一个块内部,用一个二进制串Bit Stride(BS)表示集合元素的存在与否。这样,对于一个没有元素存在的块,可以直接去掉,不作计算,从而达到了数据压缩的效果,一定程度上缓解了数据稀疏的问题。对于有至少一个元素存在的块,可以用归并方法,先通过比较找到相同的BID,然后再对对应的BS进行按位与操作,得到结果。为了方便起见,我们记每个BID的长度均为g位,每个BS的长度均为s位,全集的元素数量为Ω,显然,此时能够得到Ω/s个不同的块,每个块分配一个唯一的BID,由于g的大小是可控的,因此不需要担心BID空间不足的问题。
[0074] 举个例子,假设现有两个集合S_0={0,2,3,5,6,7,64,65,66},S_1={2,3,7,18},设s=4,g=5,Ω=128,则生成的BID&BS结构如图2所示:
[0075] CPU控制单元部分
[0076] 1.加载阶段(离线):
[0077] 将数据从本地索引中读入主机内存,由于两表join是基于某个谓词的,故根据谓词id将图数据分成多个CSR结构(格式),每个CSR对应一个谓词id。由于是有向图,故需要两组CSR,一组用于存储出边的CSR结构(格式),一组用于存储入边的CSR结构(格式)。由于两种CSR不会相互影响,故将其贮存于两块FPGA卡的存储单元上。为了便于FPGA计算单元访问CSR,将每个CSR的不连续的顶点id映射为了连续的索引id。
[0078] 2.查询执行阶段(在线,以三变量查询为例):
[0079] 第一步,找到每个变量的候选点集。
[0080] 第二步,对于每个候选点集,用一个评价函数计算其优先级得分,倾向于从候选点个数少的变量开始join。
[0081] 第三步,执行两表join的计算单元程序:对于两表join,CPU控制单元会向FPGA端传输两个候选点表,前一个需要将顶点id映射为对应CSR的索引id,后一个会对候选点表进行压缩,将整个候选点表变为一个二进制串,第k位为1表示id为k的顶点出现在候选点表中,再每w位划分为一个组,将组的id的二进制位和w位拼接起来代表一组相邻的顶点id,如果w位全为0便可以不存储,最后FPGA计算单元会返回两表join的中间结果。
[0082] 第四步,执行三表join的计算单元程序:对于第三个表,它可能会跟前两个表均要join,由于CPU端控制单元收到的两表join的中间结果的每一项是一个数据对,因此数据对的第二项是一组顶点id,需要解压之后再映射为CSR的索引id,作为新的输入传给三表join的FPGA端计算单元,然后CPU端控制单元得到最后的结果。
[0083] 由于控制单元和计算单元使用了数据流的方式,因此两表join的计算单元和三表join的计算单元可以对应于两块FPGA卡。对于LUBM(the Lehigh University Benchmark)的benchmark(性能评测标准)而言,两个计算单元可以独立执行,各自访问不同的CSR结构(格式),不会冲突。
[0084] 对三个及以上变量的用户查询,则可以用同样的逻辑来处理,不同的是需要用到更多的FPGA硬件资源。由此体现本设计的可扩展性。
[0085] FPGA计算单元部分
[0086] 图3所示为本发明提供的加速装置/加速器的结构框图。在载入阶段,CPU上的控制单元程序将计算join所需的CSR数据写入到FPGA硬件的内存中。在查询执行阶段,在特定的执行顺序下,将Join切分成多个层次,层次之间采用流的方式进行数据传递。即当上一层计算得到了一个中间结果,就可以上传递到下一个层次,而不需要等到所有的中间结果计算完成,才能开始下一层的计算,从而极大地提高并行度。对每一个层级,CPU端的控制单元程序需要向FPGA传输本层计算所需的候选点表以及控制参数。同样地,控制单元程序使用流的形式来传输它们,以实现整体的数据流。
[0087] 以第0层为例,在每一层的模块结构如图4所示。从FPGA内存读取的邻接列表与从CPU端获取的候选点表被传递给多个处理两表或多表取交集的模块。具体的并行模块数量视数据集规模大小与FPGA硬件的具体配置而定。
[0088] 同样以第0层为例,图5展示了本发明实施例查询过程中取交集计算的流程。传入的候选点表会被等分成N份,相当于放入N个桶中。而每收到一个邻接列表,根据N个桶中节点ID的范围,可以将每个元素放入对应的桶中,然后在每个桶中进行归并取交集的计算。得到一个有效结果之后,便将结果传回CPU。
[0089] 具体实施时,大规模数据库模块用于存储以RDF(Resource Description Framework)格式表示的大规模图数据集。其节点数量在千万级及以上,边数量在亿级以上。例如,LUBM(the Lehigh University Benchmark)数据集(用于测试本发明的性能),包含有
50亿条边,约9亿个节点。又如从维基百科中抽取得到的dbpedia数据集,包括30亿条边,
1600万个节点。如此大规模的数据集,对单机的图数据库的性能有较高的要求。本发明选择了大学开发的gStore(https://github.com/pkumod/gStore)提供图数据库软件支持,因为其在大规模数据上单机查询的性能较好。
[0090] 需要注意的是,公布实施例的目的在于帮助进一步理解本发明,但是本领域的技术人员可以理解:在不脱离本发明及所附权利要求的精神和范围内,各种替换和修改都是可能的。因此,本发明不应局限于实施例所公开的内容,本发明要求保护的范围以权利要求书界定的范围为准。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈