本发明涉及深度学习异构加速技术领域,更具体地说,涉及一种数据处理方法及装置。
背景技术:
大数据和高性能计算平台的发展极大的推进了深度学习的步伐,在深度学习中,当数据集和参数模型非常大时,培养大型模型便需要借助分布式计算框架。apachespark有着非常卓越的内存计算和可扩展的分布式计算性能,能够有效的提高深度学习中的超参数调优及大规模模型部署。
在深度学习的两个关键活动:分类和卷积中,需要很高的内在并行度、大量的浮点计算能力以及矩阵计算。gpu及fpga凭借其出色的异构加速计算和浮点计算能力,极大的提高了深度学习的速度和性能,相对cpu处理有所需服务器更少、功耗更低的特点。
spark对于可变长度的数据,通过解析元数据后,在内存中存储了一个相对偏移量和长度,利用unsaferow实例充当指向以此长度存储的行数据的指针,在处理一行数据时,才把数据读取到内存中;而fpga在加速数据处理时,只能暂时读入这一行数据。发明人发现,这种数据读取方式对于fpga加速spark计算明显没有充分利用到fpga的可并行性,使得fpga的数据读取速度较慢,进一步导致fpga对于数据的处理速度较慢。
综上所述,如何提供一种能够充分利用fpga的可并行性以提高其数据处理速度的技术方案,是目前本领域技术人员亟待解决的问题。
技术实现要素:
本发明的目的是提供一种数据处理方法及装置,以充分利用fpga的可并行性以提高其数据处理速度。
为了实现上述目的,本发明提供如下技术方案:
一种数据处理方法,包括:
将分布式计算平台中存储的待处理数据转换成按列存储的parquet格式;
利用spark将所述parquet格式的待处理数据按行组加载入内存中,并在内存中对所述待处理数据进行解压和反序列化后发送至fpga异构计算装置进行对应计算。
优选的,将待处理数据转换成按列存储的parquet格式,包括:
生成包含有全部待处理数据的parquet文件,并在该文件中将全部待处理数据切分成行组,其中每个所述行组中包含所有待处理数据的列的列块,且任一列块均存储有对应列中对应部分的待处理数据。
优选的,在所述parquet文件中将全部待处理数据切分成行组,包括:
在所述parquet文件中将全部待处理数据切分成行组,其中每个所述行组的大小与所述分布式计算平台中数据块的大小相同。
优选的,利用spark将所述parquet格式的待处理数据按行组加载入内存中,包括:
利用spark中预先利用c语言设置的函数将所述parquet格式的待处理数据按行组加载入内存中。
优选的,将在内存中进行解压和反序列化后的待处理数据至fpga异构计算装置之后,还包括:
获取所述fpga异构计算装置返回的计算结果并将该计算结果返回给所述spark,所述计算结果为所述fpga异构计算装置利用接收到的待处理数据进行对应计算得到的。
一种数据处理装置,包括:
转换模块,用于:将分布式计算平台中存储的待处理数据转换成按列存储的parquet格式;
处理模块,用于:利用spark将所述parquet格式的待处理数据按行组加载入内存中,并在内存中对所述待处理数据进行解压和反序列化后发送至fpga异构计算装置进行对应计算。
优选的,所述转换模块包括:
转换单元,用于:生成包含有全部待处理数据的parquet文件,并在该文件中将全部待处理数据切分成行组,其中每个所述行组中包含所有待处理数据的列的列块,且任一列块均存储有对应列中对应部分的待处理数据。
优选的,所述转换单元包括:
转换子单元,用于:在所述parquet文件中将全部待处理数据切分成行组,其中每个所述行组的大小与所述分布式计算平台中数据块的大小相同。
优选的,所述处理模块包括:
加载单元,用于:利用spark中预先利用c语言设置的函数将所述parquet格式的待处理数据按行组加载入内存中。
优选的,还包括:
返回模块,用于:将在内存中进行解压和反序列化后的待处理数据至fpga异构计算装置之后,获取所述fpga异构计算装置返回的计算结果并将该计算结果返回给所述spark,所述计算结果为所述fpga异构计算装置利用接收到的待处理数据进行对应计算得到的。
本发明提供了一种数据处理方法及装置,其中该方法包括:将分布式计算平台中存储的待处理数据转换成按列存储的parquet格式;利用spark将所述parquet格式的待处理数据按行组加载入内存中,并在内存中对所述待处理数据进行解压和反序列化后发送至fpga异构计算装置进行对应计算。本申请公开的技术方案中,先将分布式计算平台中存储的待处理数据转换成按列存储的parquet格式,再按照行组将parquet格式的待处理数据加载入内存中进行相关处理后发送至fpga异构计算装置进行对应计算。不同于现有技术中需要一行数据一行数据的读取方式,本申请中对parquet格式的待处理数据按照行组进行读取,能够充分利用到fpga异构计算装置的可并行性,使得fpga异构计算装置的数据读取速度较快,进而大大提高了fpga异构计算装置的数据处理速度。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本发明实施例提供的一种数据处理方法的流程图;
图2为本发明实施例提供的一种数据处理装置的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参阅图1,其示出了本发明实施例提供的一种数据处理方法的流程图,可以包括:
s11:将分布式计算平台中存储的待处理数据转换成按列存储的parquet格式。
本申请中可以先确定存储于分布式计算平台中的待处理数据是否为按列存储的parquet格式,如果是,则不做处理,如果否,则需要将这些待处理数据转换成按列存储的parquet格式。parquet格式的数据相较行式存储有降低磁盘存储空间、支持向量运算、获取更好的扫描性能的优点。本申请公开的一种数据处理方法中各步骤的执行主体均可以为数据处理装置,而该数据处理装置可以集成于spark中,因此本申请汇总各步骤的执行主体均可以为spark。
s12:利用spark将parquet格式的待处理数据按行组加载入内存中,并在内存中对待处理数据进行解压和反序列化后发送至fpga异构计算装置进行对应计算。
将待处理数据转换成按列存储的parquet格式后,再需要将其加载入内存中时则可以直接利用spark将其按行组加入内存,进而在内存中利用parquet函数库中提供的对应接口进行解压及反序列化等相关处理后发送至fpga异构计算装置使得fpga异构计算装置对接收到的数据进行对应的计算。
本申请公开的技术方案中,先将分布式计算平台中存储的待处理数据转换成按列存储的parquet格式,再按照行组将parquet格式的待处理数据加载入内存中进行相关处理后发送至fpga异构计算装置进行对应计算。不同于现有技术中需要一行数据一行数据的读取方式,本申请中对parquet格式的待处理数据按照行组进行读取,能够充分利用到fpga异构计算装置的可并行性,使得fpga异构计算装置的数据读取速度较快,进而大大提高了fpga异构计算装置的数据处理速度。
本发明实施例提供的一种数据处理方法,将待处理数据转换成按列存储的parquet格式,可以包括:
生成包含有全部待处理数据的parquet文件,并在该文件中将全部待处理数据切分成行组,其中每个行组中包含所有待处理数据的列的列块,且任一列块均存储有对应列中对应部分的待处理数据。
需要说明的是将待处理数据转换成按列存储的parquet格式,具体则是在parquet文件中将所有待处理数据水平切分成rowgroup(行组),一个rowgroup包含所有列中对应部分的columnchunk(列块),一个columnchunk存储该列的待处理数据,也即水平切分得到行组,而行组内部则按列切分,从而每个行组包含待处理数据的所有列的部分列块,而所有行组组合到一起就可以得到全部待处理数据;如需要将10行4列的待处理数据切分成两个行组,则将前5行及这5行在4列中对应的数据作为第一个行组,而后5行及这5行在4列中对应的数据作为第二个行组,最终得到两个均为5行4列的行组。从而通过这种方式快速方便的将待处理数据转换成parquet格式,进一步保证了本发明实施例提供的数据处理方法的顺利实现。
本发明实施例提供的一种数据处理方法,在parquet文件中将全部待处理数据切分成行组,可以包括:
在parquet文件中将全部待处理数据切分成行组,其中每个行组的大小与分布式计算平台中数据块的大小相同。
需要说明的是,行组的大小可以根据实际需要进行配置,本申请中将其设置成与分布式计算平台中的数据块大小相同,无需对数据块进行切分或结合,简化了操作过程。
本发明实施例提供的一种数据处理方法,利用spark将parquet格式的待处理数据按行组加载入内存中,可以包括:
利用spark中预先利用c语言设置的函数将parquet格式的待处理数据按行组加载入内存中。
需要说明的是,本发明实施例提供的技术方案可以基于c语言实现,其中可以预先利用c语言编写对应的函数实现对待处理数据的按行组读取并加载入内存中以及后续对待处理数据的处理发送等。具体来说,本申请以c语言实现了一种存在于内存中的数据模型,该模型以parquet存储格式为基础,结合javanativeinterface(jni,jni提供了scala和c语言及opencl的通信,允许代码和数据在不同语言间进行交互),可以实现parquet文件的元数据解析、数据读取、解压缩、反序列化等功能并可以提供与scala交互的接口。从而可以利用c语言简单快速的实现本申请公开的技术方案。
本发明实施例提供的一种数据处理方法,将在内存中进行解压和反序列化后的待处理数据至fpga异构计算装置之后,还可以包括:
获取fpga异构计算装置返回的计算结果并将该计算结果返回给spark,计算结果为fpga异构计算装置利用接收到的待处理数据进行对应计算得到的。
将处理过后的待处理数据发送到fpga异构计算装置,由fpga异构计算装置中的算法进行相应的数据处理后,反馈回spark,便于spark基于计算结果进行下一步操作。
另外需要说明的是,本发明的实施例中对于与现有技术中对应技术方案实现原理一致的部分并未详细说明,以免过多赘述。
本发明实施例还提供了一种数据处理装置,如图2所示,可以包括:
转换模块11,用于:将分布式计算平台中存储的待处理数据转换成按列存储的parquet格式;
处理模块12,用于:利用spark将parquet格式的待处理数据按行组加载入内存中,并在内存中对待处理数据进行解压和反序列化后发送至fpga异构计算装置进行对应计算。
本发明实施例提供的一种数据处理装置,转换模块可以包括:
转换单元,用于:生成包含有全部待处理数据的parquet文件,并在该文件中将全部待处理数据切分成行组,其中每个行组中包含所有待处理数据的列的列块,且任一列块均存储有对应列中对应部分的待处理数据。
本发明实施例提供的一种数据处理装置,转换单元可以包括:
转换子单元,用于:在parquet文件中将全部待处理数据切分成行组,其中每个行组的大小与分布式计算平台中数据块的大小相同。
本发明实施例提供的一种数据处理装置,处理模块可以包括:
加载单元,用于:利用spark中预先利用c语言设置的函数将parquet格式的待处理数据按行组加载入内存中。
本发明实施例提供的一种数据处理装置,还可以包括:
返回模块,用于:将在内存中进行解压和反序列化后的待处理数据至fpga异构计算装置之后,获取fpga异构计算装置返回的计算结果并将该计算结果返回给spark,计算结果为fpga异构计算装置利用接收到的待处理数据进行对应计算得到的。
本发明实施例提供的一种数据处理装置中相关部分的说明请参见本发明实施例提供的一种数据处理方法中对应部分的详细说明,在此不再赘述。
对所公开的实施例的上述说明,使本领域技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。