CN105426344A - 基于Spark的分布式大规模矩阵乘法的矩阵计算方法 - Google Patents

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

Info

Publication number
CN105426344A
CN105426344A CN201510758182.3A CN201510758182A CN105426344A CN 105426344 A CN105426344 A CN 105426344A CN 201510758182 A CN201510758182 A CN 201510758182A CN 105426344 A CN105426344 A CN 105426344A
Authority
CN
China
Prior art keywords
matrix
distributed
block
multiplication
sub
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201510758182.3A
Other languages
English (en)
Inventor
黄宜华
顾荣
唐云
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nanjing University
Original Assignee
Nanjing University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nanjing University filed Critical Nanjing University
Priority to CN201510758182.3A priority Critical patent/CN105426344A/zh
Publication of CN105426344A publication Critical patent/CN105426344A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Computational Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Theoretical Computer Science (AREA)
  • Computing Systems (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Complex Calculations (AREA)

Abstract

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

Description

基于Spark的分布式大规模矩阵乘法的矩阵计算方法
技术领域
本发明涉及并行计算技术领域,尤其涉及一种能支持大规模分布式矩阵进行高效分布式乘法的方法。
背景技术
随着互联网时代的到来,人类数据的规模极大地增长,在大数据时代,许多现实中的应用,例如社交数据分析,网络搜索,广告计算和推荐系统,其核心之一就是矩阵计算。尤其是进来在深度学习领域获得关注的神经网络学习,其核心就可以采用多个连续矩阵相乘来进行实现。然而,面对日益增长的大规模数据,传统的单机矩阵计算因为受限制于硬件环境,已经无法满足基本需求,因而更需要一种高效的、支持大规模矩阵乘法的方法。
近些年来,随着大规模分布式数据并行系统的流行,例如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-level乘法运算转换成了矩阵-矩阵之间的BLAS3-level乘法运算,避免了频繁的数据拷贝,运算速度得到明显提升。
(3)由于我们根据上述步骤得到的结果是CT,所以需要按列逐一访问,将每一列与先前存储的行序列合并成<行序列,行向量>的格式,从而最终得到结果矩阵C。
进一步地,所述步骤(5)的过程具体如下:
(1)对于两个大规模的分布式矩阵,根据不同的矩阵长宽比例和集群的运算资源信息,选择基于块的分布式矩阵划分方式Mb、Kb和Nb,即将矩阵A划分成总共Mb*Kb块的矩阵,以及将矩阵B划分成总共Kb*Nb块的矩阵。当两个矩阵规模比较接近时,令Mb=Kb=Nb,输入计算集群的所有逻辑核总数量P,则否则就参照CARMA的方式划分,只是这里传入CARMA的集群逻辑核总数量是2P而并非原始数据P。根据划分然后将基于行向量的分布式矩阵转换为基于块矩阵的分布式矩阵。
(2)对已经转换好的A矩阵中的每个子块矩阵发射Nb次,同时对B矩阵中的每个子块矩阵发射Mb次,为了保证高并发度,被复制发射出的这些子块矩阵会赋予相同的partitioner,保证这一共2*Mb*Kb*Nb块子块矩阵能够均匀的分配Mb*Kb*Nb个任务中进行计算。
(3)相关的子块矩阵会因为key值的相关性从而进行连接操作,因为保证了高并发度,每个任务读入两个相关子块,执行一次乘法操作,从而一共得到Mb*Kb*Nb个子块构成的中间结果。
(4)对这些总共Mb*Kb*Nb个子块进行累加求和操作,得到最终的Mb*Nb个子块矩阵所构成的结果矩阵C。
本发明的有益效果是:(1)通过将分布式数据平行处理系统Spark与单机高性能线性代数库ATLAS的结合,很好地解决了传统MPI并行计算领域在容错性方面的问题,同时考虑到了具体运算的实际性能。(2)通过将所有并行线性代数计算函数包装在一个分布式矩阵类当中,本发明在交互式以及批处理环境中提供了一个用户友好的使用方式。计算机用户可以像操作传统单机矩阵运算库一般操作分布式矩阵来进行并行线性代数计算,减轻了计算机用户在使用本发明时的学习成本。(3)本发明在易用性和接口完整性上均优于Spark自带机器学习库中相关的矩阵乘法内容。(4)在使用本发明经行大规模的线性代数计算时,性能和处理速度都要优于Spark自带机器学习库中的乘法,且能借助于该方面实现神经网络。
附图说明
图1是本发明的整体架构示意图。
图2是本发明所涉及的两种分布式矩阵的底层实现示意图。
图3是本发明的整体流程示意图。
图4是本发明执行基于分块的分布式矩阵乘法运算时的流程示意图。
具体实施方式
下面结合附图和具体实施例,进一步阐明本发明,应理解这些实施例仅用于说明本发明而不用于限制本发明的范围,在阅读了本发明之后,本领域技术人员对本发明的各种等价形式的修改均落于本申请所附权利要求所限定的范围。
本发明的技术方案主要由两个软件模块组成:一个是分布式大数据处理系统Spark,另外一个是单机的基础线性代数子程序库。分布式大数据处理系统Spark是Apache基金会的一个开源系统(项目主页http://spark.apache.org/),这个软件不属于本发明内容。基础线性代数子程序库(BasicLinearAlgebraSubprograms,BLAS)是一个应用程序接口标准,用以规范发布基础线性代数操作的数值库(如矢量或矩阵乘法),有很多符合该标准的实现,例如NetlibBLAS,ATLAS,OpenBLAS等(BLAS软件库不属于本发明内容,本发明说明书中所提“BLAS软件库”均代指“与BLAS应用程序接口标准兼容的软件库”)。整个系统框架如图1所示,系统架构图中最上面两层属于该发明内容。
该系统中对于分布式矩阵乘法一共有两种定义格式,如图2所示,分别是基于行划分的Row-Matrix(行矩阵),和基于块划分的Block-Matrix(块矩阵)。Row-Matrix中每个RDD的分区中存储若干行,每一行都是一个基于该行序列号和该行向量的key-value对;而Block-Matrix中,每个RDD的分区中存储一个基于子矩阵ID和子矩阵内容的key-value对。第一种数据格式更具有现实的物理含义,在数据挖掘领域,矩阵的一行就是表示输入样本数据的一个实例,而第二种数据格式则在分布式矩阵乘法中具有重要的意义,更适合基于分块的算法,在本发明中,这两种类型的实现都有其较好的应用场景,而且都提供一样的接口函数,互相之间也可以无缝衔接转换。在本说明书中,不失一般性,我们认为用户的原始输入是自然的基于行划分的矩阵文本文件。
用户使用本发明执行大规模矩阵乘法的具体流程如图3所示:用户通过交互式或者批处理的方式,指明输入矩阵文本文件。从分布式文件系统中读入矩阵A和B之后,执行矩阵乘法求矩阵C,使得C=A*B。进一步地,整个技术方案包括以下步骤:
(1)利用Spark作为分布式计算执行引擎,并且在单个计算机上对矩阵进行计算时采用BLAS对矩阵计算进行加速;
(2)从分布式文件系统中读入矩阵文件,得到基于行向量格式的分布式矩阵A和B,针对分布式计算环境的计算资源量以及待相乘矩阵的规模,选择合适的执行方法。若矩阵的规模小于107个元素,可以认为矩阵规模较小。默认单机计算阈值参数与广播阈值参数相同,均为107,用户可以根据计算环境调整这两个参数。如果两个矩阵规模均较小于单机计算阈值,选择步骤(3)的方法;如果其中一个矩阵小于广播阈值,则选择步骤(4)的方法;否则,以上两种条件均不满足时,选择步骤(5)的方法。
(3)使用collect操作,收集两个分布式矩阵到负责任务调度的driver(驱动体)端,然后进行单机矩阵乘法,得到结果矩阵C。
(4)先收集较小规模的矩阵到driver端,然后广播该矩阵到所有运算节点上,每个节点上的较大规模矩阵的分区与该广播矩阵进行乘法运算,得到分布式结果矩阵C。
(5)执行基于分块的分布式矩阵乘法,先将基于行向量的矩阵A和B转换为基于块矩阵的分布式矩阵,然后相关子块矩阵通过数据相关性连接在一起,所述子块矩阵间执行乘法,之后再累加得到分布式结果矩阵C。
进一步地,在所述步骤(1)中的分布式执行计算引擎Spark会在每个运算节点上运行一个Java的守护进程,该分布式系统采用主从式(server-client)架构,有一个负责任务调度的driver(驱动体)和多个进行分布式计算的executor(执行体),当用户提交执行矩阵相乘的任务给driver后,便会分发任务到各个executor上进行运算。而在每个单机节点,为了提高执行速度,借助于JNI(JavaNativeInterface)技术,将子矩阵的线性代数运算交由传统科学计算领域所使用的基础线性代数库(例如ATLAS)而不是在Java进程中进行计算。这样做可以减少内存压力,同时提高运算速度。
进一步地,所述步骤(4)的过程具体如下,不失一般性,我们假设此种情形下矩阵A是大规模的矩阵,而矩阵B是较小规模的矩阵。
(1)基于行的分布式矩阵是由分布在不同计算节点的若干分区构成,对于较大规模的基于行的分布式矩阵A,其每个分区是包含若干行向量的迭代器,遍历该迭代器,将该分区内的所有行向量拼接成一个临时矩阵,由于基于Fortran实现的底层BLAS运算库的矩阵是按列索引的,所以为了减少cache缓存缺失几率,将每个分区内的行向量按列索引的方式赋值给临时矩阵,同时将分区内的行序列存储起来。
(2)对于小矩阵B,由于每个分区内的临时矩阵是原先矩阵的转置,为了保证结果的准确性,广播该矩阵的转置矩阵到每一个计算节点上,与每个分区所形成的临时矩阵进行乘法运算。这样就将运算C=A*B转换成了其对应的转置矩阵操作:CT=BT*AT。由于将向量-矩阵之间的BLAS2-level乘法运算转换成了矩阵-矩阵之间的BLAS3-level乘法运算,避免了Java进程与本地运算库之间的频繁数据拷贝,运算速度得到明显提升。
(3)由于我们根据上述步骤得到的结果是CT,所以还需要按列逐一访问,将每一列抽取出来与先前存储的行序列合并成<行序列,行向量>的格式,从而最终得到结果矩阵C。
进一步地,所述步骤(5)的过程具体如下:
(1)对于两个大规模的分布式矩阵,根据不同的矩阵长宽比例和集群的运算资源信息,选择基于块的分布式矩阵划分方式Mb、Kb和Nb,即将矩阵A划分成总共Mb*Kb块的矩阵,以及将矩阵B划分成总共Kb*Nb块的矩阵。Mb、Kb和Nb的数值可以由用户指定,若不指定,本发明针对已有的实验环境结果和Spark官方对于每个CPU逻辑核安排2到3个运算子任务的建议,默认使用以下两种方案执行:当两个矩阵规模比较接近时,令Mb=Kb=Nb,设输入计算集群的所有逻辑核总数量P,则否则参照CARMA(Communication-avoidingRecursiveMatrixMultiply,通信避免的递归矩阵乘法)的方式划分,并且设置传入CARMA的集群逻辑核总数量是2P而并非原始数据P。
(2)将基于行向量的分布式矩阵转换为基于块矩阵的分布式矩阵,行矩阵中每一行的格式是形如<index,rowVector>的key-value对,根据上一步骤得到的划分Mb、Kb和Nb,算出rowVectoor所产生的若干子行向量subRowVector以及每个subRowVector所对应属于的块矩阵的子矩阵ID,这样每一行所发出的是形如<blockID,(index,subRowVector)>的若干key-value对。然后通过groupByKey操作,使得具有相同blockID的subRowVector汇集在一起,并根据各自原先的index得出每一行在新的子块矩阵中的相对位置,从而将若干行拼装成子块矩阵,从而实现了行矩阵到块矩阵的转换过程。
(3)下面的操作步骤可以参考图4,对已经转换好的矩阵A中的每个<子块ID,子块矩阵>利用flatMap操作发射Nb次,key-value对中value值保持不变,仍然为每个子块矩阵,key值需要修改,原先块矩阵的key值是子矩阵ID,包含该子块位于该分块矩阵的位置信息,即行块索引blkId.row和列块索引blkId.col,现在需要额外添加其他信息用于后续的连接操作。具体操作如下:令变量i从0到Nb-1进行赋值,计算seq=blkId.row*Nb*Kb+i*Kb+blkId.col,则对于矩阵A的每个子块,分别发射的key-value对<(blkId.row,i,seq),子块矩阵>,这样共发射Nb次。同样我们需要对转换好的矩阵B中每个<子块ID,子块矩阵>利用flatMap操作发射Mb次。与上述类似,令变量i从0到Mb-1进行赋值,计算seq=i*Nb*Kb+blkId.col*Kb+blkId.row,则对于矩阵B的每个子块,分别发射的key-value对<(i,blkId.col,seq),子块矩阵>,这样共发射Mb次。在图4中,seq的值用了不同的灰度来表示。为了保证高并发度,被复制发射出的这些子块矩阵会赋予相同的partitioner,并且设置改partitioner的分区数目是Mb*Kb*Nb。在图4中即伴随着flatMap之后的partitionBy操作即对这些中间状态的子块赋予partitioner,保证这样一共2*Mb*Kb*Nb块子块矩阵能够均匀的分配到Mb*Kb*Nb个任务中进行计算。
(4)相关的子块矩阵会因为key值的相关性从而进行连接操作,因为保证了高并发度,每个任务读入两个相关子块,执行一次乘法操作,从而一共得到Mb*Kb*Nb个子块构成的中间结果,中间结果的key-value对再转换成<(blkId.row,blkId.col),子块矩阵>的格式,用于下一次的累加操作。
(5)对这些总共Mb*Kb*Nb个子块使用reduceByKey累加操作求和,得到最终的Mb*Nb个子块矩阵所构成的结果矩阵C。
进一步地,本发明与基于MapReduce的HAMA矩阵相乘库相比,在性能还是易用性上都更好,与Spark自带的机器学习库MLlib中的相关矩阵乘法运算相比,考虑了不同分布式矩阵实现之间的无缝互相转换,对用户保持了底层实现的透明性,并且细致地将矩阵分布式乘法划分成了3种类别,并且每一种都进行了优化,在完备性和性能上都要由于MLlib中的矩阵运算(参见表1)
综上所述,本发明实现的原型系统在进行大规模矩阵乘法操作时,计算耗时更短、计算速度更快(参见表1),证明了本发明提出的方法的有效性,验证了本发明的有益效果。
表1:本发明与SparkMLlib在分布式矩阵乘法运算的性能比较(单位:秒,NA表示该运算未能在2500秒内完成)

Claims (6)

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个元素,则认为该矩阵属于较小矩阵;默认单机计算阈值参数与广播阈值参数相同,均为107
4.根据权利要求1所述的基于Spark的分布式大规模矩阵乘法的矩阵计算方法,其特征是:所述步骤(4)包含以下步骤:
1)所述分布式矩阵由分布在不同计算节点的若干分区构成,每个所述分区包含若干行向量的迭代器,遍历该迭代器,将该分区内的所有行向量拼接成一个按列索引的临时矩阵;
2)对于较小矩阵,广播所述较小矩阵的转置矩阵到每一个计算节点上,与所述临时矩阵进行乘法运算;
3)将所述步骤2)得到的矩阵每个分区的每一列逐一抽取出来,维持成基于行的分布式矩阵,从而得到分布式结果矩阵C。
5.根据权利要求1所述的基于Spark的分布式大规模矩阵乘法的矩阵计算方法,其特征是:所述步骤(5)中,包含以下步骤:
①对于两个大规模的分布式矩阵,根据不同的矩阵长宽比例和集群的运算资源信息,选择基于块的分布式矩阵划分方式Mb、Kb和Nb,即将矩阵A划分成总共Mb*Kb块的矩阵,以及将矩阵B划分成总共Kb*Nb块的矩阵;将基于行向量的分布式矩阵转换为基于块矩阵的分布式矩阵;
②对已经转换好的矩阵A中的每个子块矩阵发射Nb次,同时对矩阵B中的每个子块矩阵发射Mb次;
③相关的所述子块矩阵因为key值的相关性从而进行连接操作,每个任务读入两个相关的所述子块矩阵,执行一次乘法操作,从而一共得到Mb*Kb*Nb个子块矩阵构成的中间结果;
④对所述Mb*Kb*Nb个子块矩阵进行累加求和操作,得到最终的Mb*Nb个子块矩阵所构成的分布式结果矩阵C。
6.根据权利要求1所述的基于Spark的分布式大规模矩阵乘法的矩阵计算方法,其特征是:所述步骤②中,赋予被复制发射出的这些子块矩阵相同的partitioner,保证这一共2*Mb*Kb*Nb块子块矩阵能够均匀的分配至Mb*Kb*Nb个任务中进行计算。
CN201510758182.3A 2015-11-09 2015-11-09 基于Spark的分布式大规模矩阵乘法的矩阵计算方法 Pending CN105426344A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510758182.3A CN105426344A (zh) 2015-11-09 2015-11-09 基于Spark的分布式大规模矩阵乘法的矩阵计算方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510758182.3A CN105426344A (zh) 2015-11-09 2015-11-09 基于Spark的分布式大规模矩阵乘法的矩阵计算方法

Publications (1)

Publication Number Publication Date
CN105426344A true CN105426344A (zh) 2016-03-23

Family

ID=55504559

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510758182.3A Pending CN105426344A (zh) 2015-11-09 2015-11-09 基于Spark的分布式大规模矩阵乘法的矩阵计算方法

Country Status (1)

Country Link
CN (1) CN105426344A (zh)

Cited By (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106980906A (zh) * 2017-03-19 2017-07-25 国网福建省电力有限公司 一种基于spark的Ftrl电压预测方法
CN107256203A (zh) * 2017-06-28 2017-10-17 郑州云海信息技术有限公司 一种矩阵向量乘法的实现方法和装置
CN107341133A (zh) * 2017-06-24 2017-11-10 中国人民解放军信息工程大学 基于任意维数矩阵lu分解的可重构计算结构的调度方法
WO2017193769A1 (zh) * 2016-05-11 2017-11-16 星环信息科技(上海)有限公司 机器学习模型之间进行转换的方法与设备
CN107577708A (zh) * 2017-07-31 2018-01-12 北京北信源软件股份有限公司 基于SparkMLlib文档分类的类库构建方法及系统
CN107612886A (zh) * 2017-08-15 2018-01-19 中国科学院大学 一种Spark平台Shuffle过程压缩算法决策方法
CN107679726A (zh) * 2017-09-26 2018-02-09 成都优易数据有限公司 一种优化分布式运算过程效率的评价方法
WO2018176882A1 (zh) * 2017-03-31 2018-10-04 华为技术有限公司 一种矩阵与矢量的乘法运算方法及装置
CN109729734A (zh) * 2017-08-31 2019-05-07 北京中科寒武纪科技有限公司 芯片装置及相关产品
CN109961136A (zh) * 2017-12-14 2019-07-02 北京中科寒武纪科技有限公司 集成电路芯片装置及相关产品
CN109978153A (zh) * 2017-12-27 2019-07-05 北京中科寒武纪科技有限公司 集成电路芯片装置及相关产品
CN109978152A (zh) * 2017-12-27 2019-07-05 北京中科寒武纪科技有限公司 集成电路芯片装置及相关产品
CN109978154A (zh) * 2017-12-28 2019-07-05 北京中科寒武纪科技有限公司 集成电路芯片装置及相关产品
CN109992742A (zh) * 2017-12-29 2019-07-09 华为技术有限公司 一种信号处理方法及装置
CN110147249A (zh) * 2018-02-12 2019-08-20 上海寒武纪信息科技有限公司 一种网络模型的计算方法及装置
CN110163360A (zh) * 2018-02-13 2019-08-23 上海寒武纪信息科技有限公司 一种计算装置及方法
CN110163350A (zh) * 2018-02-13 2019-08-23 上海寒武纪信息科技有限公司 一种计算装置及方法
CN110163349A (zh) * 2018-02-12 2019-08-23 上海寒武纪信息科技有限公司 一种网络模型的计算方法及装置
CN110276447A (zh) * 2018-03-14 2019-09-24 上海寒武纪信息科技有限公司 一种计算装置及方法
CN110383300A (zh) * 2018-02-13 2019-10-25 上海寒武纪信息科技有限公司 一种计算装置及方法
CN110688993A (zh) * 2019-12-10 2020-01-14 中国人民解放军国防科技大学 一种基于Spark作业的计算资源确定方法及装置
CN110751161A (zh) * 2018-07-23 2020-02-04 优视科技(中国)有限公司 基于Spark的节点相似度计算方法、装置及终端
CN112506677A (zh) * 2020-12-09 2021-03-16 上海交通大学 TensorFlow的分布式矩阵计算实现方法与系统
CN113238283A (zh) * 2021-05-10 2021-08-10 南京大学 一种基于分布式并进计算框架的逆时偏移成像方法
US11308389B2 (en) 2017-12-14 2022-04-19 Cambricon Technologies Corporation Limited Integrated circuit chip apparatus
US11544546B2 (en) 2017-12-27 2023-01-03 Cambricon Technologies Corporation Limited Integrated circuit chip device
US11620130B2 (en) 2018-02-13 2023-04-04 Shanghai Cambricon Information Technology Co., Ltd Computing device and method
US11630666B2 (en) 2018-02-13 2023-04-18 Shanghai Cambricon Information Technology Co., Ltd Computing device and method
US11847554B2 (en) 2019-04-18 2023-12-19 Cambricon Technologies Corporation Limited Data processing method and related products

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103106183A (zh) * 2013-01-29 2013-05-15 福建天晴数码有限公司 基于mapreduce的大规模稀疏矩阵乘法运算的方法
CN103294648A (zh) * 2013-05-08 2013-09-11 中国人民解放军国防科学技术大学 支持多mac运算部件向量处理器的分块矩阵乘法向量化方法
CN104462023A (zh) * 2014-12-31 2015-03-25 合一网络技术(北京)有限公司 基于mapreduce框架的超大规模稀疏矩阵乘法运算的方法
CN104951427A (zh) * 2015-06-30 2015-09-30 深圳清华大学研究院 以矩阵为中心的分布式计算框架

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103106183A (zh) * 2013-01-29 2013-05-15 福建天晴数码有限公司 基于mapreduce的大规模稀疏矩阵乘法运算的方法
CN103294648A (zh) * 2013-05-08 2013-09-11 中国人民解放军国防科学技术大学 支持多mac运算部件向量处理器的分块矩阵乘法向量化方法
CN104462023A (zh) * 2014-12-31 2015-03-25 合一网络技术(北京)有限公司 基于mapreduce框架的超大规模稀疏矩阵乘法运算的方法
CN104951427A (zh) * 2015-06-30 2015-09-30 深圳清华大学研究院 以矩阵为中心的分布式计算框架

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
RONG GU等: "Efficient Large Scale Distributed Matrix Computation with Spark", 《2015 IEEE INTERNATIONAL CONFERENCE ON BIG DATA》 *
孙远帅等: "基于Hadoop 的大矩阵乘法处理方法", 《计算机应用》 *

Cited By (84)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2017193769A1 (zh) * 2016-05-11 2017-11-16 星环信息科技(上海)有限公司 机器学习模型之间进行转换的方法与设备
CN106980906A (zh) * 2017-03-19 2017-07-25 国网福建省电力有限公司 一种基于spark的Ftrl电压预测方法
CN106980906B (zh) * 2017-03-19 2020-10-13 国网福建省电力有限公司 一种基于spark的Ftrl电压预测方法
WO2018176882A1 (zh) * 2017-03-31 2018-10-04 华为技术有限公司 一种矩阵与矢量的乘法运算方法及装置
CN107341133A (zh) * 2017-06-24 2017-11-10 中国人民解放军信息工程大学 基于任意维数矩阵lu分解的可重构计算结构的调度方法
CN107341133B (zh) * 2017-06-24 2021-01-22 中国人民解放军信息工程大学 基于任意维数矩阵lu分解的可重构计算结构的调度方法
CN107256203A (zh) * 2017-06-28 2017-10-17 郑州云海信息技术有限公司 一种矩阵向量乘法的实现方法和装置
CN107577708A (zh) * 2017-07-31 2018-01-12 北京北信源软件股份有限公司 基于SparkMLlib文档分类的类库构建方法及系统
CN107612886A (zh) * 2017-08-15 2018-01-19 中国科学院大学 一种Spark平台Shuffle过程压缩算法决策方法
CN107612886B (zh) * 2017-08-15 2020-06-30 中国科学院大学 一种Spark平台Shuffle过程压缩算法决策方法
CN110222308B (zh) * 2017-08-31 2020-12-29 安徽寒武纪信息科技有限公司 一种矩阵乘矩阵运算方法及装置
US11775311B2 (en) 2017-08-31 2023-10-03 Cambricon Technologies Corporation Limited Processing device and related products
US11409535B2 (en) 2017-08-31 2022-08-09 Cambricon Technologies Corporation Limited Processing device and related products
US11354133B2 (en) 2017-08-31 2022-06-07 Cambricon Technologies Corporation Limited Processing device and related products
CN110083390A (zh) * 2017-08-31 2019-08-02 北京中科寒武纪科技有限公司 一种gemv运算运算方法及装置
US11347516B2 (en) 2017-08-31 2022-05-31 Cambricon Technologies Corporation Limited Processing device and related products
US11334363B2 (en) 2017-08-31 2022-05-17 Cambricon Technologies Corporation Limited Processing device and related products
CN109729734B8 (zh) * 2017-08-31 2020-11-24 中科寒武纪科技股份有限公司 芯片装置及相关产品
CN109729734B (zh) * 2017-08-31 2020-10-27 中科寒武纪科技股份有限公司 芯片装置及相关产品
US11561800B2 (en) 2017-08-31 2023-01-24 Cambricon Technologies Corporation Limited Processing device and related products
CN109729734A (zh) * 2017-08-31 2019-05-07 北京中科寒武纪科技有限公司 芯片装置及相关产品
CN110245751B (zh) * 2017-08-31 2020-10-09 中科寒武纪科技股份有限公司 一种gemm运算方法及装置
US11531553B2 (en) 2017-08-31 2022-12-20 Cambricon Technologies Corporation Limited Processing device and related products
CN110222308A (zh) * 2017-08-31 2019-09-10 北京中科寒武纪科技有限公司 一种矩阵乘矩阵运算方法及装置
CN110231958A (zh) * 2017-08-31 2019-09-13 北京中科寒武纪科技有限公司 一种矩阵乘向量运算方法及装置
CN110245752A (zh) * 2017-08-31 2019-09-17 北京中科寒武纪科技有限公司 一种全连接运算方法及装置
CN110245751A (zh) * 2017-08-31 2019-09-17 北京中科寒武纪科技有限公司 一种gemm运算运算方法及装置
CN107679726A (zh) * 2017-09-26 2018-02-09 成都优易数据有限公司 一种优化分布式运算过程效率的评价方法
US11900241B2 (en) 2017-12-14 2024-02-13 Cambricon Technologies Corporation Limited Integrated circuit chip apparatus
US11562216B2 (en) 2017-12-14 2023-01-24 Cambricon Technologies Corporation Limited Integrated circuit chip apparatus
US11562219B2 (en) 2017-12-14 2023-01-24 Cambricon Technologies Corporation Limited Integrated circuit chip apparatus
US11507810B2 (en) 2017-12-14 2022-11-22 Cambricon Technologies Corporation Limited Integrated circuit chip apparatus
CN109961136A (zh) * 2017-12-14 2019-07-02 北京中科寒武纪科技有限公司 集成电路芯片装置及相关产品
US11586891B2 (en) 2017-12-14 2023-02-21 Cambricon Technologies Corporation Limited Integrated circuit chip apparatus
US11704545B2 (en) 2017-12-14 2023-07-18 Cambricon Technologies Corporation Limited Integrated circuit chip apparatus
US11507809B2 (en) 2017-12-14 2022-11-22 Cambricon Technologies Corporation Limited Integrated circuit chip apparatus
US11308389B2 (en) 2017-12-14 2022-04-19 Cambricon Technologies Corporation Limited Integrated circuit chip apparatus
US11900242B2 (en) 2017-12-14 2024-02-13 Cambricon Technologies Corporation Limited Integrated circuit chip apparatus
US11741351B2 (en) 2017-12-27 2023-08-29 Cambricon Technologies Corporation Limited Integrated circuit chip device
US11544546B2 (en) 2017-12-27 2023-01-03 Cambricon Technologies Corporation Limited Integrated circuit chip device
CN109978152B (zh) * 2017-12-27 2020-05-22 中科寒武纪科技股份有限公司 集成电路芯片装置及相关产品
US11748603B2 (en) 2017-12-27 2023-09-05 Cambricon Technologies Corporation Limited Integrated circuit chip device
US11983621B2 (en) 2017-12-27 2024-05-14 Cambricon Technologies Corporation Limited Integrated circuit chip device
US11748602B2 (en) 2017-12-27 2023-09-05 Cambricon Technologies Corporation Limited Integrated circuit chip device
CN109978153A (zh) * 2017-12-27 2019-07-05 北京中科寒武纪科技有限公司 集成电路芯片装置及相关产品
US11748604B2 (en) 2017-12-27 2023-09-05 Cambricon Technologies Corporation Limited Integrated circuit chip device
US11748601B2 (en) 2017-12-27 2023-09-05 Cambricon Technologies Corporation Limited Integrated circuit chip device
CN109978152A (zh) * 2017-12-27 2019-07-05 北京中科寒武纪科技有限公司 集成电路芯片装置及相关产品
US11748605B2 (en) 2017-12-27 2023-09-05 Cambricon Technologies Corporation Limited Integrated circuit chip device
CN109978154A (zh) * 2017-12-28 2019-07-05 北京中科寒武纪科技有限公司 集成电路芯片装置及相关产品
CN109992742A (zh) * 2017-12-29 2019-07-09 华为技术有限公司 一种信号处理方法及装置
CN110163349A (zh) * 2018-02-12 2019-08-23 上海寒武纪信息科技有限公司 一种网络模型的计算方法及装置
CN110163349B (zh) * 2018-02-12 2021-03-23 上海寒武纪信息科技有限公司 一种网络模型的计算方法及装置
CN110147249B (zh) * 2018-02-12 2021-02-09 上海寒武纪信息科技有限公司 一种网络模型的计算方法及装置
CN110147249A (zh) * 2018-02-12 2019-08-20 上海寒武纪信息科技有限公司 一种网络模型的计算方法及装置
CN110163361A (zh) * 2018-02-13 2019-08-23 上海寒武纪信息科技有限公司 一种计算装置及方法
CN110163363A (zh) * 2018-02-13 2019-08-23 上海寒武纪信息科技有限公司 一种计算装置及方法
CN110163361B (zh) * 2018-02-13 2021-06-25 上海寒武纪信息科技有限公司 一种计算装置及方法
CN110163360B (zh) * 2018-02-13 2021-06-25 上海寒武纪信息科技有限公司 一种计算装置及方法
CN110163350B (zh) * 2018-02-13 2021-06-08 上海寒武纪信息科技有限公司 一种计算装置及方法
CN110163363B (zh) * 2018-02-13 2021-05-11 上海寒武纪信息科技有限公司 一种计算装置及方法
CN110163360A (zh) * 2018-02-13 2019-08-23 上海寒武纪信息科技有限公司 一种计算装置及方法
CN110163362B (zh) * 2018-02-13 2020-12-11 上海寒武纪信息科技有限公司 一种计算装置及方法
US11620130B2 (en) 2018-02-13 2023-04-04 Shanghai Cambricon Information Technology Co., Ltd Computing device and method
US11630666B2 (en) 2018-02-13 2023-04-18 Shanghai Cambricon Information Technology Co., Ltd Computing device and method
US11663002B2 (en) 2018-02-13 2023-05-30 Shanghai Cambricon Information Technology Co., Ltd Computing device and method
CN110163356B (zh) * 2018-02-13 2020-10-09 上海寒武纪信息科技有限公司 一种计算装置及方法
US11704125B2 (en) 2018-02-13 2023-07-18 Cambricon (Xi'an) Semiconductor Co., Ltd. Computing device and method
US11709672B2 (en) 2018-02-13 2023-07-25 Shanghai Cambricon Information Technology Co., Ltd Computing device and method
US11720357B2 (en) 2018-02-13 2023-08-08 Shanghai Cambricon Information Technology Co., Ltd Computing device and method
CN110383300B (zh) * 2018-02-13 2024-03-05 上海寒武纪信息科技有限公司 一种计算装置及方法
CN110163356A (zh) * 2018-02-13 2019-08-23 上海寒武纪信息科技有限公司 一种计算装置及方法
US11740898B2 (en) 2018-02-13 2023-08-29 Shanghai Cambricon Information Technology Co., Ltd Computing device and method
CN110163350A (zh) * 2018-02-13 2019-08-23 上海寒武纪信息科技有限公司 一种计算装置及方法
CN110163362A (zh) * 2018-02-13 2019-08-23 上海寒武纪信息科技有限公司 一种计算装置及方法
CN110383300A (zh) * 2018-02-13 2019-10-25 上海寒武纪信息科技有限公司 一种计算装置及方法
CN110276447A (zh) * 2018-03-14 2019-09-24 上海寒武纪信息科技有限公司 一种计算装置及方法
CN111626413A (zh) * 2018-03-14 2020-09-04 上海寒武纪信息科技有限公司 一种计算装置及方法
CN110751161A (zh) * 2018-07-23 2020-02-04 优视科技(中国)有限公司 基于Spark的节点相似度计算方法、装置及终端
CN110751161B (zh) * 2018-07-23 2023-08-22 阿里巴巴(中国)有限公司 基于Spark的节点相似度计算方法、装置及终端
US11847554B2 (en) 2019-04-18 2023-12-19 Cambricon Technologies Corporation Limited Data processing method and related products
CN110688993A (zh) * 2019-12-10 2020-01-14 中国人民解放军国防科技大学 一种基于Spark作业的计算资源确定方法及装置
CN112506677A (zh) * 2020-12-09 2021-03-16 上海交通大学 TensorFlow的分布式矩阵计算实现方法与系统
CN113238283A (zh) * 2021-05-10 2021-08-10 南京大学 一种基于分布式并进计算框架的逆时偏移成像方法

Similar Documents

Publication Publication Date Title
CN105426344A (zh) 基于Spark的分布式大规模矩阵乘法的矩阵计算方法
Chen et al. A bi-layered parallel training architecture for large-scale convolutional neural networks
Hockney et al. Parallel Computers 2: architecture, programming and algorithms
CN105117286B (zh) MapReduce中任务的调度方法和流水化执行方法
CN104035751A (zh) 基于多图形处理器的数据并行处理方法及装置
CN104036451A (zh) 基于多图形处理器的模型并行处理方法及装置
CN106547627A (zh) 一种Spark MLlib数据处理加速的方法及系统
Liu Parallel and scalable sparse basic linear algebra subprograms
CN106933777B (zh) 基于国产申威26010处理器的基2一维fft的高性能实现方法
Li et al. Accelerating sparse cholesky factorization on sunway manycore architecture
CN116258042A (zh) 一种基于ddm的大规模传热异构并行仿真方法
CN105404611A (zh) 一种基于矩阵模型的多计算引擎的自动选择方法
Haris et al. SECDA-TFLite: A toolkit for efficient development of FPGA-based DNN accelerators for edge inference
Wei et al. Deploying and scaling distributed parallel deep neural networks on the Tianhe-3 prototype system
Tang et al. Optimized sparse Cholesky factorization on hybrid multicore architectures
Ivutin et al. Design efficient schemes of applied algorithms parallelization based on semantic Petri-Markov net
Il’in On an integrated computational environment for numerical algebra
Alaasam et al. Refactoring the monolith workflow into independent micro-workflows to support stream processing
Duan et al. Spark clustering computing platform based parallel particle swarm optimizers for computationally expensive global optimization
US11900239B2 (en) Systems and methods for accelerating sparse neural network execution
Ding et al. An automatic performance model-based scheduling tool for coupled climate system models
Lu et al. TileSpTRSV: a tiled algorithm for parallel sparse triangular solve on GPUs
Petersohn et al. Scaling Interactive Data Science Transparently with Modin
Teng et al. Scheduling performance of real-time tasks on mapreduce cluster
Ni et al. DeepQT: learning sequential context for query execution time prediction

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20160323

WD01 Invention patent application deemed withdrawn after publication