TensorFlow的分布式矩阵计算实现方法与系统技术方案

技术编号:27684932 阅读:11 留言:0更新日期:2021-03-17 03:47
一种TensorFlow的分布式矩阵计算实现方法与系统,在TensorFlow运行时通过对底层矩阵乘法计算操作进行拦截,将计算参数传递至计算代理程序并进行分布处理,再通过使用共享内存实现不同进程之间数据的传输,实现分布式矩阵计算。本发明专利技术不依赖于高性能GPU等特定的计算机硬件,不需要对运行程序进行修改适配,利用多个ARM服务器,通过直接对底层的计算进行分布式处理,可使TensorFlow代码进行多节点并行化运行。

【技术实现步骤摘要】
TensorFlow的分布式矩阵计算实现方法与系统
本专利技术涉及的是一种分布式信息处理领域的技术,具体是一种面向ARM服务器上TensorFlow的分布式矩阵计算实现方法与系统。
技术介绍
在大规模、分布式运行这一方向下,目前机器学习模型的多机并行运行可分为数据并行和模型并行两种。其中,数据并行是一种广泛使用的方式。数据并行的计算加速是指在多个计算节点上,对不同的数据进行同样的计算过程,得到最终结果。这种并行方式在多GPU并行和多节点并行中获得广泛应用,它可以将数据集分布在不同的节点上来实现对大数据集的支持,也可以利用到各个计算设备、计算节点的算力。模型层面的并行化运行是将模型进行分拆,把不同的计算过程分布在不同的节点上进行计算,一个输入数据会经过不同的节点,最终得到一个计算结果。此种并行计算方式可通过横向扩展支持超大规模机器学习模型,适合于模型本身参数量过大的情形。在分布式的机器学习中,模型的参数更新、梯度传播等数据都需要高效的网络通信方式以减少延迟,避免过大的通信成本。分布式计算中,各个节点之间的通信应根据运行的任务来选择更合适的方式。目前,多机节点间通信主要有HTTP、RPC、MPI等方式。RPC(RemoteProcedureCall)即远程过程调用,它允许机器在本地调用一个部署在其他节点上的过程,其形式与调用本地服务十分类似,RPC在多种分布式系统中有着广泛应用。MPI(MessagePassingInterface)即消息传递界面,是一个跨语言的通信协议,多用于并行计算和高性能计算。r>目前,投入业务使用的分布式机器学习系统主要基于一般的x86架构服务器,ARM架构的CPU目前在移动设备上应用较多,在服务器领域中逐渐开始推广。由于ARM指令集属于RISC精简指令集,在处理一些复杂度比较高的任务时,与现行的x86指令集相比有一定劣势,但因其较高的效能,目前也逐渐开始出现了一些使用ARM架构的服务器CPU。与目前一些常用的服务器相比,ARM服务器对通用型显卡的支持相对较弱,在机器学习领域中,NVIDIAGPU的应用和开发者生态相对来说更加完善,而ARM架构的服务器目前难以使用这些工具。
技术实现思路
本专利技术针对现有ARM架构服务器难以使用主流GPU及相关框架等计算加速软硬件的不足,提出一种TensorFlow的分布式矩阵计算实现方法与系统,不依赖于高性能GPU等特定的计算机硬件,不需要对运行程序进行修改适配,利用多个ARM服务器,通过直接对底层的计算进行分布式处理,可使TensorFlow代码进行多节点并行化运行。本专利技术是通过以下技术方案实现的:本专利技术涉及一种面向ARM服务器上TensorFlow的分布式矩阵计算实现方法,在TensorFlow运行时通过对底层矩阵乘法计算操作进行拦截,将计算参数传递至计算代理程序并进行分布处理,再通过使用共享内存实现不同进程之间数据的传输,实现分布式矩阵计算。所述的分布处理是指:计算代理根据矩阵乘法的特性对计算量进行分割,并分派给其他的节点进行计算,然后计算代理程序再将各个节点的计算结果进行整理、合并后,发回给TensorFlow。本专利技术涉及一种实现上述方法的系统,其由参与计算的服务器节点组成,其中一个服务器节点是作为主节点,在主节点上运行TensorFlow程序和计算代理程序,在作为计算节点的其余的服务器节点仅运行分布处理程序。技术效果本专利技术整体解决了目前ARM服务器缺少特定的计算加速硬件支持的技术问题。与现有技术相比,本专利技术在不需要改动TensorFlow程序源代码的基础上,对TensorFlow程序的运行进行并行化加速,不依赖于特定的计算加速硬件,可在多台ARM服务器组成的集群上执行并行计算。实验表明,本专利技术对于单次计算的加速效果较好,尤其对于较大的矩阵乘法计算,其加速效果明显。当单次运算时间远远大于网络通信所需要的时间时,整个系统的计算加速效果可接近计算时间平均分配的加速效果。另外,在代码运行过程中,对整个运行流程进行的性能采样表明,本专利技术采用的测试程序在实际运行时产生的矩阵乘法大多为较小规模的计算,例如,有大量的128行、32列的矩阵与32行、32列的矩阵相乘的计算。TensorFlow本身带有一定的多线程并行计算的运行调度机制,这在单机运行的场景下非常实用。结合本专利技术以及TensorFlow的并发调度计算,通过对部分计算进行优化调度,可在尽量不影响原有计算流程的前提下,提升计算性能。附图说明图1为实施例系统集群示意图;图2为本专利技术流程图;图3为实施例主节点内部示意图;图4为实施例主节点中TensorFlow层示意图;图5为实施例计算节点内部示意图;图6为实施例时序分析图。具体实施方式本实施例涉及一种面向ARM服务器上TensorFlow的分布式矩阵计算系统,即集群,其由参与计算的服务器节点组成,其中一个服务器节点是作为主节点,在主节点上运行TensorFlow程序和计算代理程序,在作为计算节点的其余的服务器节点仅运行分布处理程序。所述的主节点是指:集群中的一个节点,该节点运行TensorFlow程序和计算代理程序。所述的计算代理程序与TensorFlow进行通信并获取矩阵数据和返回计算结果的同时,与分布处理程序进行通信,分发矩阵数据、接收计算结果并对计算结果进行后续处理。所述的分布处理程序运行于所有非主节点的服务器中,从计算代理程序接收矩阵数据进行计算,并返回计算结果。如图1所示,为基于上述系统的面向ARM服务器上TensorFlow的分布式矩阵计算实现方法,包括以下步骤:步骤一:在主节点上设置基于Python3.6.9的程序运行环境、经过修改的TensorFlow1.14版本以及上述计算代理程序。所述的TensorFlow程序用于与计算代理程序通信并分布式处理计算任务。步骤二:通过MPI在主节点上启动计算代理程序,并根据定义的节点网络地址,利用MPI程序的开源运行环境(ORTE)组件在计算节点上启动分布处理程序,计算代理程序和分布处理程序都进入等待状态,直至开始运行TensorFlow程序。所述的ORTE具体是支持高性能计算的分布式运行环境,可在异构的集群上运行,可以实现跨进程、跨节点的进程间通信。步骤三:当主节点开始运行TensorFlow程序,且需进行矩阵乘法操作时,TensorFlow程序通过信号量,即TensorFlow底层运行程序计算代理程序之间共享的内存读写锁,向计算节点发出分布处理通知以启动分布处理程序。步骤四:如图2所示,在主节点上,本专利技术在TensorFlow矩阵运算模块中改动的部分将在各个服务器节点上接管矩阵乘法,并进行分布式计算处理:TensorFlow程序通过信号量和内置矩阵乘法参数的共享变量,将本次分布处理的矩阵乘法参数传递给计算代理程序。所述的矩阵乘法参数包括:矩阵数据类型、两个参与乘本文档来自技高网...

【技术保护点】
1.一种面向ARM服务器上TensorFlow的分布式矩阵计算实现方法,其特征在于,在TensorFlow运行时通过对底层矩阵乘法计算操作进行拦截,将计算参数传递至计算代理程序并进行分布处理,再通过使用共享内存实现不同进程之间数据的传输,实现分布式矩阵计算;/n所述的分布处理是指:计算代理根据矩阵乘法的特性对计算量进行分割,并分派给其他的节点进行计算,然后计算代理程序再将各个节点的计算结果进行整理、合并后,发回给TensorFlow;/n所述的计算代理程序与用于与计算代理程序通信并分布式处理计算任务的TensorFlow进行通信并获取矩阵数据和返回计算结果的同时,与分布处理程序进行通信,分发矩阵数据、接收计算结果并对计算结果进行后续处理;/n所述的分布处理程序从计算代理程序接收矩阵数据进行计算,并返回计算结果。/n

【技术特征摘要】
1.一种面向ARM服务器上TensorFlow的分布式矩阵计算实现方法,其特征在于,在TensorFlow运行时通过对底层矩阵乘法计算操作进行拦截,将计算参数传递至计算代理程序并进行分布处理,再通过使用共享内存实现不同进程之间数据的传输,实现分布式矩阵计算;
所述的分布处理是指:计算代理根据矩阵乘法的特性对计算量进行分割,并分派给其他的节点进行计算,然后计算代理程序再将各个节点的计算结果进行整理、合并后,发回给TensorFlow;
所述的计算代理程序与用于与计算代理程序通信并分布式处理计算任务的TensorFlow进行通信并获取矩阵数据和返回计算结果的同时,与分布处理程序进行通信,分发矩阵数据、接收计算结果并对计算结果进行后续处理;
所述的分布处理程序从计算代理程序接收矩阵数据进行计算,并返回计算结果。


2.根据权利要求1所述的分布式矩阵计算实现方法,其特征是,具体包括:
步骤一:在主节点上设置基于Python3.6.9的程序运行环境、经过修改的TensorFlow1.14版本以及计算代理程序;
步骤二:通过MPI在主节点上启动计算代理程序,并根据定义的节点网络地址,利用MPI程序的开源运行环境组件在计算节点上启动分布处理程序,计算代理程序和分布处理程序都进入等待状态,直至开始运行TensorFlow程序;
步骤三:当主节点开始运行TensorFlow程序,且需进行矩阵乘法操作时,TensorFlow程序通过信号量,即TensorFlow底层运行程序计算代理程序之间共享的内存读写锁,向计算节点发出分布处理通知以启动分布处理程序;
步骤四:在TensorFlow矩阵运算中进行的改动接管矩阵乘法并进行分布式计算处理:TensorFlow程序通过信号量和内置矩阵乘法参数的共享变量,将本次分部处理的矩阵乘法参数传递给计算代理程序;
所述的矩阵乘法参数包括:矩阵数据类型、两个参与乘法的矩阵的维度和尺寸以及分片传输的数量;
步骤五:计算代理程序在主节点的内存上建立缓存队列、创建缓存空间并分配MPI的通信管道,然后通过共享内存读写锁通知TensorFlow程序以准备传输矩阵数据;
步骤六:矩阵数据的传输包括分别传输两个被乘矩阵和结果矩阵三个阶段,对于一个A·B=C的矩阵乘法计算,在结果矩阵其中:w为A矩阵的宽;
步骤七:分布处理程序在完成一个分片的计算之后,将计算结果存入本地的缓冲队列,通过MPI将缓冲队列中的计算数据传输给主节点的计算代理程序,主节点通过一个线程,由计算代理程序的MPI接口将接收到的数据存入结果缓存队列;主节点通过一个另外线程由计算代理程序不断查询结果缓存队列,将新收到的计算数据累加到结果矩阵中的对应位置;
步骤八:当所有分片都计算完成后,计算代理程序将合并完成的结果传输给TensorFlow程序:计算代理程序通过共享内存读写锁通知TensorFlow程序开始传输数据,并将分片序号、分片数据存入共享内存空间,通过共享内存读写锁进行TensorFlow和计算代理程序之间的同步,当...

【专利技术属性】
技术研发人员:郑文立李亭君沈耀陈全过敏意
申请(专利权)人:上海交通大学
类型:发明
国别省市:上海;31

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

1