当前位置: 首页 > 专利查询>南京大学专利>正文

基于Spark的分布式大规模矩阵乘法的矩阵计算方法技术

技术编号:13046547 阅读:145 留言:0更新日期:2016-03-23 14:20
本发明专利技术公开了一种基于Spark的分布式大规模矩阵乘法的矩阵计算方法,包括以下步骤:采用了一种基于分布式计算执行引擎Spark和单机线性代数库BLAS的系统框架;在该分布式系统中,定义与封装矩阵的相关运算接口,从分布式文件系统中读取矩阵文件,针对分布式计算环境的资源量以及待处理矩阵的规模,选择合适的方案执行分布式乘法:若两个矩阵规模都很小,汇集到本地进行单机乘法;若其中一个矩阵规模较小,则广播该矩阵执行乘法;若两个矩阵规模均很大,采用基于分块的分布式矩阵乘法。针对后两种情况,本发明专利技术分别提出了两种高效的解决方案,解决了现有的大数据处理平台对分布式矩阵运算的性能低,扩展性不好的问题。

【技术实现步骤摘要】

本专利技术涉及并行计算
,尤其涉及一种能支持大规模分布式矩阵进行高效分布式乘法的方法。
技术介绍
随着互联网时代的到来,人类数据的规模极大地增长,在大数据时代,许多现实中的应用,例如社交数据分析,网络搜索,广告计算和推荐系统,其核心之一就是矩阵计算。尤其是进来在深度学习领域获得关注的神经网络学习,其核心就可以采用多个连续矩阵相乘来进行实现。然而,面对日益增长的大规模数据,传统的单机矩阵计算因为受限制于硬件环境,已经无法满足基本需求,因而更需要一种高效的、支持大规模矩阵乘法的方法。近些年来,随着大规模分布式数据并行系统的流行,例如HadoopMapReduce,Spark等,越来越多的应用可以采用基础算子例如map,reduce,等来实现。与传统并行计算平台OpenMP和MPI相比,这些分布式数据并行系统为用户提供了跟简洁的接口,自动的良好容错性,以及极佳的可扩展性。已有的分布式矩阵乘法工作中,有基于HadoopMapReduce的HAMA运算库,但是受限制与HadoopMapReduce而性能一般;有基于传统ScaLAPACK技术的CARMA算法,但是受限制于传统MPI平台而在容错性上表现不佳,而且该算法由于采用广度优先搜索(BFS)进行分布式矩阵切块而无法与传统平台的算法进行兼容。Spark是一种有效的分布式数据并行计算框架,不同于稍早的HadoopMapReduce固定的map和reduce两种计算阶段,Spark的数据处理阶段流程是更加灵活的基于有向无环图的(DAG,directedacyclicgraph),两两执行任务之间的数据无需再写回到分布式文件系统中。Spark的程序执行模型基于RDD(ResilientDistributedDatasets)。RDD是一个容错的、并行的数据结构,可以让用户显式地将数据存储到磁盘和内存中,并能控制数据的分区,存储在内存中的RDD有助于共享数据,特别适合迭代式程序开发。这些优势使得Spark在诞生之日就收到广泛关注,并且在工业界越来越被广泛地使用。然而,Spark提供的并行化操作的算子都是比较底层的,高层算法设计人员难以掌握,不易于算法分析师通过矩阵模型直接设计算法。
技术实现思路
专利技术目的:为了克服现有的分布式数据处理系统中对大规模分布式矩阵乘法支持不佳的缺陷,本专利技术提供了一种基于Spark的分布式大规模矩阵乘法的矩阵计算方法,该方法使用户可以在交互式或者批处理环境中进行高效的大规模的分布式并行矩阵乘法计算,而无需了解并行计算的具体实现细节,解决了现有的大数据处理平台对分布式矩阵运算的性能低,扩展性不好,接口不丰富的问题。本专利技术的技术解决方案是:为了实现上述专利技术目的,本专利技术采用的技术方案基于现有的Spark分布式计算框架,输入矩阵文本的每一行存储了矩阵的行标号,以及该行向量,从分布式文件系统中读入矩阵A和B之后,求矩阵C,使得C=A*B。整个技术方案包括以下步骤:(1)利用Spark作为分布式计算执行引擎,并且在单个计算机上对矩阵进行计算时采用BLAS对矩阵计算进行加速;(2)从分布式文件系统中读入矩阵文件,得到基于行向量格式的分布式矩阵A和B,针对分布式计算环境的计算资源量以及待相乘矩阵的规模,选择合适的执行方法。如果两个矩阵规模均较小于单机计算阈值,选择步骤(3)的方法;如果其中一个矩阵小于广播阈值,则选择步骤(4)的方法;否则,以上两种条件均不满足时,选择步骤(5)的方法。(3)收集两个分布式矩阵到负责任务调度的driver(驱动体)端,然后进行单机矩阵乘法,得到最终结果矩阵C。(4)先收集较小规模的矩阵到driver端,然后广播该矩阵到所有运算节点上,每个节点上的较大规模矩阵的分区与该广播矩阵进行乘法运算,得到分布式结果矩阵C。(5)执行基于分块的分布式矩阵乘法,先将基于行向量的矩阵A和B转换为基于块矩阵的分布式矩阵,然后相关子块矩阵通过数据相关性连接在一起,所述子块矩阵间执行乘法,之后再累加得到分布式结果矩阵C。进一步地,在所述步骤(1)中的分布式执行计算引擎Spark会在每个运算节点上运行一个Java的守护进程,该分布式系统采用主从式(server-client)架构,有一个负责任务调度的driver(驱动体)和多个进行分布式计算的executor(执行体),当用户提交执行矩阵相乘的任务给driver后,便会分发任务到各个executor上进行运算。而在每个单机节点,为了提高执行速度,借助于JNI(JavaNativeInterface)技术,将子矩阵的线性代数运算交由传统科学计算领域所使用的基础线性代数库(例如ATLAS)而不是在Java进程中进行计算。这样做可以减少内存压力,同时提高运算速度。进一步地,所述步骤(2)中,基于行向量格式的分布式矩阵是该专利技术参照单机矩阵类提供的矩阵抽象表征,矩阵的RDD由若干分区构成,每个分区内有若干行构成,每一行的格式是基于<行序列,行向量>的key-value对。还有一种基于分块的格式的分布式矩阵,矩阵的RDD由若干分区构成,每个分区内包含一个基于<子矩阵ID,子矩阵>的key-value对,该格式适合使用在步骤(5)的乘法运算,这两种类型的实现都有其较好的应用场景,而且都提供一致的接口函数,互相之间也可以无缝衔接转换。进一步地,所述步骤(2)中,如所述矩阵的规模小于107个元素,则认为该矩阵属于较小矩阵。默认单机计算阈值参数与广播阈值参数相同,均为107,用户可以根据计算环境调整这两个参数。进一步地,所述步骤(4)的过程具体如下,不失一般性,我们假设此种情形下矩阵A是大规模的矩阵,而矩阵B是较小规模的矩阵。(1)基于行的分布式矩阵是由分布在不同计算节点的若干分区构成,其每个分区是包含若干行向量的迭代器,遍历该迭代器,将该分区内的所有行向量拼接成一个临时矩阵,由于基于Fortran实现的底层BLAS运算库的矩阵是按列索引的,所以为了减少cache缓存缺失几率,将每个分区内的行向量按列索引的方式赋值给临时矩阵,同时将分区内的行序列存储起来。(2)对于小矩阵B,由于每个分区内的临时矩阵是原先矩阵的转置,为了保证结果的准确性,广播该矩阵的转置矩阵到每一个计算节点上,与每个分区所形成的临时矩阵进行乘法运算。这样就将运算C=A*B转换成了其对应的转置矩阵操作:CT=BT*AT。由于将向量-矩阵之间的BLAS2-lev本文档来自技高网
...

【技术保护点】
一种基于Spark的分布式大规模矩阵乘法的矩阵计算方法,其特征在于:输入矩阵文本的每一行存储了矩阵的行标号,以及该行向量,从分布式文件系统中读入矩阵A和矩阵B之后,求分布式结果矩阵C,使得C=A*B,包括以下步骤:(1)利用Spark作为分布式计算执行引擎,并且在单个计算机上对矩阵进行计算时采用BLAS对矩阵计算进行加速;(2)从分布式文件系统中读入矩阵文件,得到基于行向量格式的分布式矩阵A和矩阵B,针对分布式计算环境的计算资源量以及待相乘矩阵的规模,选择合适的执行方法:如果两个矩阵规模均较小于单机计算阈值,选择步骤(3)的方法;如果其中一个矩阵小于广播阈值,则选择步骤(4)的方法;否则,如以上两种条件均不满足时,选择步骤(5)的方法;(3)收集两个分布式矩阵到负责任务调度的driver端,然后进行单机矩阵乘法,得到结果矩阵C;(4)先收集较小规模的矩阵到driver端,然后广播该较小规模的矩阵到所有运算节点上,每个节点上的较大规模矩阵的分区与该较小规模的矩阵进行乘法运算,得到分布式结果矩阵C;(5)执行基于分块的分布式矩阵乘法,先将基于行向量的矩阵A和矩阵B转换为基于块矩阵的分布式矩阵,然后构成分布式矩阵的相关子块矩阵通过数据相关性连接在一起,所述子块矩阵间执行乘法,之后再累加得到分布式结果矩阵C。...

【技术特征摘要】
1.一种基于Spark的分布式大规模矩阵乘法的矩阵计算方法,其特征在
于:输入矩阵文本的每一行存储了矩阵的行标号,以及该行向量,从分布式文
件系统中读入矩阵A和矩阵B之后,求分布式结果矩阵C,使得C=A*B,包括以
下步骤:
(1)利用Spark作为分布式计算执行引擎,并且在单个计算机上对矩阵进
行计算时采用BLAS对矩阵计算进行加速;
(2)从分布式文件系统中读入矩阵文件,得到基于行向量格式的分布式矩
阵A和矩阵B,针对分布式计算环境的计算资源量以及待相乘矩阵的规模,选
择合适的执行方法:如果两个矩阵规模均较小于单机计算阈值,选择步骤(3)
的方法;如果其中一个矩阵小于广播阈值,则选择步骤(4)的方法;否则,如
以上两种条件均不满足时,选择步骤(5)的方法;
(3)收集两个分布式矩阵到负责任务调度的driver端,然后进行单机矩
阵乘法,得到结果矩阵C;
(4)先收集较小规模的矩阵到driver端,然后广播该较小规模的矩阵到
所有运算节点上,每个节点上的较大规模矩阵的分区与该较小规模的矩阵进行
乘法运算,得到分布式结果矩阵C;
(5)执行基于分块的分布式矩阵乘法,先将基于行向量的矩阵A和矩阵B
转换为基于块矩阵的分布式矩阵,然后构成分布式矩阵的相关子块矩阵通过数
据相关性连接在一起,所述子块矩阵间执行乘法,之后再累加得到分布式结果
矩阵C。
2.根据权利要求1所述的基于Spark的分布式大规模矩阵乘法的矩阵计算
方法,其特征是:所述步骤(1)中,每个计算节点维护一个Spark的Java虚
拟机进程运行时,同时安装基础线性代数库BLAS,使得每个节点进行矩阵运算
时,通过Java虚拟机进程直接调用原生计算库。
3.根据权利要求1所述的基于Spark的分布式大规模矩阵乘法的矩阵计算
方法,其特征是:所述步骤(2)中,较小矩阵的设定阈值与计算集群的CPU以
及网络环境有关,如所述矩阵的规模小于107个...

【专利技术属性】
技术研发人员:黄宜华顾荣唐云
申请(专利权)人:南京大学
类型:发明
国别省市:江苏;32

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1