基于中央数据池的遥感信息提取模型分布式训练方法

未命名 07-22 阅读:142 评论:0


1.本发明涉及数据训练技术领域,具体涉及基于中央数据池的遥感信息提取模型分布式训练方法。


背景技术:

2.遥感影像提取在气象、智慧城市、军事等领域具有广泛的应用。近年来,随着高分辨率和宽覆盖成像等遥感技术的不断进步和发展,遥感卫星使用频率越来越高的同时,遥感影像的数据量也在急剧地升,单幅能有gb级别的大小,整轨数据量甚至突破百gb乃至tb级别,这在给应用领域带来大量数据的同时也加大了处理难度。事实上,在使用单机训练遥感影像提取模型时,大规模训练集和高复杂度模型通常不能被完整的存储,而且其训练时间也令人无法忍受。例如把tb级以上的遥感数据放在一台计算机上,以目前的数据传输技术和计算机性能,模型的训练进度将非常迟缓,这时通常会对整体数据进行分配。又比如深度学习模型在训练过程中会产生大量的矩阵运算,运算的结果和中间值通常保存在内存或者显存当中,而有些深度学神经网络参数量过多,那么cnn层权值矩阵所占用的存储空间可能将会超过单个gpu显存的容量。这时需要将cnn层的超大矩阵做分块处理,可将其拆分到不同的显卡上进行协同计算。故而,多节点多显卡协同并行训练的分布式技术在深度学习网络训练中地应用显得尤为重要。
3.tensorflow作为工业化背景最成熟的深度学习框架,自其被推出以来凭借着谷歌公司强劲的科技实力背景以及其本身较为稳定的性能和较为完善的功能等特点,一直统治着人工智能领域深度学习框架市场,受到了各种开源团队的推崇与维护,现已更新至2.11版本。以tensorflow技术为基础研究遥感影像信息分布式提取具有重要的价值意义。
4.tensorflow是一个基于数据流编程(dataflow programming)的符号数学系统,顾名思义,它的核心要义是令张量(tensor)流动起来。tensorflow也是一个设计用于快速执行数值计算和并行自动化的库,并行化是由其智能执行引擎自动实现的,通常无需做很大的调整,自动实现的并行化效果就很好,支持在一个或多个cpu和gpu中执行和部署并行代码。此外,tensorflow像theano那样创建数学表达式,但不将表达式编译成机器码,而是在使用c++编写的外部引擎中执行他们,从本质上来讲,在程序没有执行时,它是一个静态图,当程序启动并有数据输入时,其成为数据流图。tensorflow使用数据流图进行数值计算,图中的每个节点代表数学运算,节点之间的边代表其中传递的多维数组,使用之前需提前定义好静态图,这种计算模式促使tensorflow拥有了移植性强、生态完善、性能最优的特点,它灵活的架构让开发者们在多种平台开展计算任务。更进一步的:tensorflow原生的分布式训练框架在对神经网络进行训练时,各节点会将全部训练数据加载至计算节点,这虽然从一定程度上减少了训练数据传输的时间延迟,加快了训练速度,但给计算节点带来了沉重的内存负担,限制了其处理大规模数据的能力。
5.现有的tensorflow分布式深度学习框架,使用grpc作为跨主机通信层的具体方法,同时通过nvidia的nccl来实现基于同步环形梯度更新的全规约算法。(1)grpc:rpc远端
服务的思想或者形式在分布式系统中有着广泛的应用,其性能对分布式训练中各个节点之间的通信有着至关重要的作用。通常rpc实现多基于xml、json序列化或http等传输协议。grpc是一种特殊的rpc协议框架,具有跨语言跨平台的特点,其数据报文基于http2.0协议标准而自定义设计的,可以支持双向流、头部压缩、多复用请求等特性。(2)数据分配:在多节点分布式训练中,需要对数据集进行分片以确保模型的收敛性和可重现性。基于远程调用的数据集分片如图1所示,假设集群中有4个计算节点,每个计算节点配备4块显卡,每个计算节点都分配有一个代表完整数据集的数据副本,每批次训练数据长度为l,当训练至当前批次数据时将该批次数据平分至所有节点,即每个节点分得l/4长度的数据,又因为节点内每个线程负责各自负责一块gpu训练,所以节点内将l/4的数据再分至每个线程,每个线程相对当前批次数据长度的l/16。单个节点内的各gpu将各自负责的训练数据利用其中模型前向反向传播后,得到4份模型更新参数梯度,然后在cpu求和并平均。最后,集群内的各个节点通过全规约算法完成模型参数的接收和更新。计算集群在使用原始tensorflow分布式框架进行深度学习训练时,完全的训练数据副本会被各个计算节点中的训练进程重复调用至各自内存中,训练副本大小的极限取决于各计算节点的内存容量,而计算机的内存通常比较昂贵,其容量有限。此时,这种具有明显冗余数据的训练方法会限制模型训练集规模,从而造成神经网络模型整体得不到充分学习以至于性能较差的后果。
6.因此,提供一种通过对数据分片并控制进程动态对从磁盘加载数据至内存的方式解决分布式训练框架各进程占用的内存资源过多的问题,提升分布式训练算法的空间效率的基于中央数据池的遥感信息提取模型分布式训练方法,已是一个值得研究的问题。


技术实现要素:

7.本发明的目的是提供一种通过对数据分片并控制进程动态对从磁盘加载数据至内存的方式解决分布式训练框架各进程占用的内存资源过多的问题,提升分布式训练算法的空间效率的基于中央数据池的遥感信息提取模型分布式训练方法,本发明弃用tensorflow的分布式训练方法,使用horovod分布式训练框架对tensorflow单机程序进行ring-all-reduce同步梯度更新全归约分布式训练,同时结合mpi跨主机通信技术和lmdb数据库数据映射技术,设计了基于构建中央数据池的数据加载优化算法,通过对数据分片并控制进程动态对从磁盘加载数据至内存的方式解决分布式训练框架各进程占用的内存资源过多的问题,提升分布式训练算法的空间效率。
8.本发明的目的是这样实现的:基于中央数据池的遥感信息提取模型分布式训练方法,包括以下步骤:步骤s1、建立lmdb数据集:引入lmdb数据进行分布式深度学习模型训练,其中lmdb数据为原始数据并通过lmdb数据库原语制作而成,为数据并行提供数据源;步骤s2、生成数据块指针集:基于s1步骤建立的lmdb数据集,通过基于构建中央数据池的数据切分方法在训练初始化时对其进行实时切割,生成供网络训练的数据块指针集,为朴素分布式训练提供训练数据地址;步骤s3、进行朴素分布式训练:基于s2步骤生成的数据块指针集,通过中央数据池数据加载方法将训练数据从磁盘映射至内存,而后集群据此映射数据对模型进行朴素梯度下降情况下的多机分布式深度学习训练。
9.所述步骤s1的具体步骤如下:将图像数据裁剪至多个小块数据并对其进行标准化,然后使用原语操作对所述每块数据进行编号并通过set《key,value》键值对的关系给每块数据赋予唯一的地址值,数据块(value)和地址值(key)呈现出一一对应的关系,最终得到整个数据集,每个set变量构成单个数据块实体,数据集整体即为set集合;set集合:{set1,set2,
……
setn-1,setn},其中n代表第n块数据的编号。所述步骤s2的具体步骤如下:基于s1步骤生成的set集合,抽取set集合中的key值,形成key值集合,然后将其随机打乱,构成乱序key值集合,乱序数据有效提升模型的训练精度;乱序key集合:{key3,key1,key4,
……
keyn,keyn-1},其中n代表第n块数据的编号。
10.所述步骤s3的具体步骤如下:步骤s3.1将训练样本数据从文件系统中映射至内存空间:基于步骤s2生成的乱序key值集合,设有方法getvalue(key)可以通过地址值获得数据块,则有getvalue(keyn)=dn,又有批训练样本集合其中xp指训练数据,yp指标签,m指显卡数量,p指当前样本数据块所在显卡的进程编号;设置数据集迭代次数为n,小批量mini-batch的大小b,当前步长为s,全局步长step_per_epoch,步长计算为key集合长度除以批大小,即为len(keys)/b,进程号为rank,进程(gpu)总数为j,数据块指针地址(key)为pointer,训练过程和步骤如下所示:首先cpu端初始化模型参数w;对于每一次迭代中:

每个gpu训练任务进程获得的数据块指针为pointer=rank+(j
×
s),然后通过getvalue(keyn)即可获得对应样本;

j块gpu进行并行训练;

训练完毕后gpu在各自计算节点基于分得数据块内完成神经网络的前向后向传播,并通小批量随机梯度下降法完成梯度下降,最终得到模型更新后的参数w,其过程如下式所示:其中,w
s-1
代表上一步长的全局模型参数,d
rank
表示当前步长模型变量的梯度,表示当前步长下rank号显卡进程所负责的模型更新参数;步骤s3.2各gpu通过全规约通信架构完成模型参数更新:各gpu基于步骤s3.1的

步中的结果,通过全规约通信架构进行全局模型参数更新。
11.所述步骤s3.2中的全规约具体步骤如下:

将模型参数等分为j个部分,j为gpu数量;

scatter-reduce,gpu交换j-1次数据,使每个gpu可得到模型一部分的最终结果;

all-gather,gpu将各自得到的部分最终结果再进行j-1次交换,最后所有gpu得到完整的最终结果;

各gpu中存储参数进行平均,完成本次步长的模型参数更新。
12.本发明的有益效果是:本发明的分析方法在数据并行和通信方面的策略和原理,指出其在数据调用方面存在的瓶颈。然后以horovod高级并行框架为基础,参照mpi消息传递模型,为每个mpi进程绑定一块显卡,首先把随机打乱后的全部训练数据抽象化为一个为各进程(单个显卡)不断提供训练数据的中央数据池,同时结合lmdb数据库内存映射数据技术,并将数据池顺序划分成编号数据块,通过构建中央数据池和数据编号,重定义进程的数据读取传输过程,每个进程结合编号和当前训练批次数从中央数据池中取得与自己唯一匹配得数据进行训练,达到节约内存资源目的,实现了大规模数据下的多节点多显卡高效稳定计算。
附图说明
13.图1为本发明试验的huiji道路数据集示例图像和相应标签;图2为本发明的mpi程序编写过程;图3为本发明的分布式训练程序启动流程图;图4为本发明的中央数据池构造示意图;图5为本发明的中央数据池分布式训练算法伪代码;图6为本发明的全规约通信模式图;图7为本发明的全规约梯度更新模式图;图8为本发明的算法架构图。
具体实施方式
14.以下结合附图和实施例对本发明作进一步说明。
15.基于中央数据池的遥感信息提取模型分布式训练方法,如图1所示为tif格式的遥感影像,即为s1步骤中lmdb数据原始影像。首先为了提高降低模型训练对硬件的要求,需要将影像裁剪至较小边长的影像块,并同时按照文件名_行号_列号的规则对其进行重命名。然后使用如下所示的数据库操作原语将影像数据转化为lmdb格式的样本数据文件。env=lmdb.open():创建lmdb环境txn=env.begin():建立事务txn.put(key,value):进行插入和修改txn.delete(key):进行删除txn.get(key):进行查询txn.cursor():进行遍历txn.commit():提交更改lmdb格式数据中的每条记录即为set《key,value》形式,其中key即为样本名(地址值),value为样本值。set《key,value》键值对的关系给每块影像赋予唯一的地址值,影像本身数值(value)和地址值(key)呈现出一一对应的关系,最终得到整个影像样本数据集,每个set变量构成单个影响块实体,数据集整体即为set集合。
16.set集合:{set1,set2,
……
set
n-1
,setn},其中n代表第n块影像的编号。
17.得到set影像集合后,需要对影像进行标准化,图像标准化是将数据通过去均值实
现中心化的处理,根据凸优化理论与数据概率分布相关知识,数据中心化符合数据分布规律,以提高数据对特征的表达能力,加快模型的收敛速度。标准化公式如下式所示:标准化公式如下式所示:标准化公式如下式所示:上式所示即为m块影像背景下的数据标准化过程,其中,μ
β
为的均值,σ
β
为方差,即为影像正态标准化结果。
18.如图2所示,得到lmdb样本数据集后开始编写mpi程序。然后将mpi命令嵌入至调试好的单机程序中通过mpi4y库操作实现计算节点全自动化启动或监听。最后通过bash脚本启动分布式深度学习训练。
19.bash脚本如下所示bash脚本如下所示
20.如图3所示即为分布式训练任务成功启动的结果。
21.任务启动成功后,各计算节点需要分布式加载数据进行分布式训练,首先依据步骤s2生成乱序样本影像数据块地址集,然后各gpu依据步骤s3所示规则,通过影像块地址获取数据进行模型训练。步骤s3的核心思想如图4所示,首先将训练所用的全部数据抽象化为集群中的中央数据池,集群中的各个计算节点本地内存不再保存数据副本,而是根据训练进度从全局唯一的中央数据池中即时取出分配给自己的数据块,这种数据加载思想虽然极大程度上解放了计算节点的内存,但过多的数据块传输会带来不菲的额外时间开销,而lmdb技术的内存映射文件技术则可以降低这种损耗。
22.本发明忽略集群中节点的存在,将每个gpu看作一个在分布式系统中能够独立训练的进程,首先将每个进程独立编号,然后将训练数据按照每块gpu负责训练的既定的批数据长度(mini-batch)进行切分,并打乱切分后数据块的排列顺序,与此同时在训练初始化时根据集群每次固定使用的数据块总长度计算模型全局参数梯度的更新步长,这样便能通过步长和进程号将中央数据池的数据块和训练进程一一对应起来。而每个lmdb数据块都存有相应的指针,各个gpu通过指针地址,利用内存映射技术直接快速将数据块从中央数据池数据所在的磁盘去读入内存。最后以各个gpu为基本单位组成全规约结构进行梯度的发散和聚集,完成模型训练。
23.更进一步的,数据加载时抽取set集合中的key值,形成key值集合,然后将其随机打乱,构成乱序key值集合。乱序数据能有效提升模型的训练精度。
24.乱序key集合:{key3,key1,key4,
……
keyn,key
n-1
},其中n代表第n块影像的编号。
25.基于s2步骤生成的乱序key值集合,各mpi进程使用如图5所示的算法进行分布式训练。
26.更进一步的,各gpu在进行分布式训练时梯度交换遵循如图6所示的全归约(all-reduce)模型参数更新方法进行训练。
27.all-reduce方法中每块gpu的通信数据量下式所示:data transferred=2(k-1)n/k通信分为两个阶段:scatter-reduce和all-gather。k个gpu中的每一个都将发送和接收k-1次scatter-reduce,k-1次all-gather。每次,gpu都会发送n/k值,其中n是数组中不同gpu上相加的值总数(n为每个gpu上所需存储数组的总大小)。
28.更进一步的,all-reduce方法的通信拓扑是去中心化节点的,它舍去参数服务器,将通信负载平均分配到每个计算节点中,保证所有节点的负载均衡,所以全归约方法不存在参数服务器的中心瓶颈问题。如图7所示,其中(0≤i<n)表示深度神经网络的第i层。反向传播计算与梯度同步通信串行进行,因此全归约梯度同步通信将等待深度神经网络所有网络层(l0,...,l
(n-1)
)都完成梯度计算之后再开始执行。
29.更进一步的,具体到梯度更新理念。对于给定数据集d,f(x,w)代表输入为x参数为w的神经网络的输出,定义l(
·
)为损失函数,训练的最终目的是最小化损失函数l(f(x,w),y),其中y为标签。神经网络权值的更新公式如式所示。其中k是批量化训练中每个批量(batch)的样本数量,在本方法中即为gpu的数量,η是学习率,是第i个样本的梯度。
30.本算法的架构如图8所示。首先通过horovod命令编写基于纯keras语义的单个分布式训练程序,然后用mpi命令参照集群配置文件启动各个训练进程。

技术特征:
1.基于中央数据池的遥感信息提取模型分布式训练方法,其特征在于:包括以下步骤:步骤s1、建立lmdb数据集:引入lmdb数据进行分布式深度学习模型训练,其中lmdb数据为原始数据并通过lmdb数据库原语制作而成,为数据并行提供数据源;步骤s2、生成数据块指针集:基于s1步骤建立的lmdb数据集,通过基于构建中央数据池的数据切分方法在训练初始化时对其进行实时切割,生成供网络训练的数据块指针集,为朴素分布式训练提供训练数据地址;步骤s3、进行朴素分布式训练:基于s2步骤生成的数据块指针集,通过中央数据池数据加载方法将训练数据从磁盘映射至内存,而后集群据此映射数据对模型进行朴素梯度下降情况下的多机分布式深度学习训练。2.根据权利要求1所述的基于中央数据池的遥感信息提取模型分布式训练方法,其特征在于:所述步骤s1的具体步骤如下:将图像数据裁剪至多个小块数据并对其进行标准化,然后使用原语操作对所述每块数据进行编号并通过set<key,value>键值对的关系给每块数据赋予唯一的地址值,数据块(value)和地址值(key)呈现出一一对应的关系,最终得到整个数据集,每个set变量构成单个数据块实体,数据集整体即为set集合;set集合:{set1,set2,
……
setn-1,setn},其中n代表第n块数据的编号。3.根据权利要求1所述的基于中央数据池的遥感信息提取模型分布式训练方法,其特征在于:所述步骤s2的具体步骤如下:基于s1步骤生成的set集合,抽取set集合中的key值,形成key值集合,然后将其随机打乱,构成乱序key值集合,乱序数据有效提升模型的训练精度;乱序key集合:{key3,key1,key4,
……
keyn,keyn-1},其中n代表第n块数据的编号。4.根据权利要求1所述的基于中央数据池的遥感信息提取模型分布式训练方法,其特征在于:所述步骤s3的具体步骤如下:步骤s3.1将训练样本数据从文件系统中映射至内存空间:基于步骤s2生成的乱序key值集合,设有方法getvalue(key)可以通过地址值获得数据块,则有getvalue(keyn)=dn,又有批训练样本集合其中xp指训练数据,yp指标签,m指显卡数量,p指当前样本数据块所在显卡的进程编号;设置数据集迭代次数为n,小批量mini-batch的大小b,当前步长为s,全局步长step_per_epoch,步长计算为key集合长度除以批大小,即为len(keys)/b,进程号为rank,进程(gpu)总数为j,数据块指针地址(key)为pointer,训练过程和步骤如下所示:首先cpu端初始化模型参数w;对于每一次迭代中:

每个gpu训练任务进程获得的数据块指针为pointer=rank+(j
×
s),然后通过getvalue(keyn)即可获得对应样本;

j块gpu进行并行训练;

训练完毕后gpu在各自计算节点基于分得数据块内完成神经网络的前向后向传播,并通小批量随机梯度下降法完成梯度下降,最终得到模型更新后的参数w,其过程如下式所示:
其中,w
s-1
代表上一步长的全局模型参数,d
rank
表示当前步长模型变量的梯度,表示当前步长下rank号显卡进程所负责的模型更新参数;步骤s3.2各gpu通过全规约通信架构完成模型参数更新:各gpu基于步骤s3.1的

步中的结果,通过全规约通信架构进行全局模型参数更新。5.根据权利要求4所述的基于中央数据池的遥感信息提取模型分布式训练方法,其特征在于:所述步骤s3.2中的全规约具体步骤如下:

将模型参数等分为j个部分,j为gpu数量;

scatter-reduce,gpu交换j-1次数据,使每个gpu可得到模型一部分的最终结果;

all-gather,gpu将各自得到的部分最终结果再进行j-1次交换,最后所有gpu得到完整的最终结果;

各gpu中存储参数进行平均,完成本次步长的模型参数更新。

技术总结
本发明公开了基于中央数据池的遥感信息提取模型分布式训练方法,本发明弃用TensorFlow的分布式训练方法,使用Horovod分布式训练框架对TensorFlow单机程序进行ring-all-reduce同步梯度更新全归约分布式训练,同时结合MPI跨主机通信技术和LMDB数据库数据映射技术,设计了基于构建中央数据池的数据加载优化算法,通过对数据分片并控制进程动态对从磁盘加载数据至内存的方式解决分布式训练框架各进程占用的内存资源过多的问题,提升分布式训练算法的空间效率。式训练算法的空间效率。式训练算法的空间效率。


技术研发人员:赫晓慧 李盼乐 程淅杰 乔梦佳 高亚军 李加冕 周涛 赵辉杰
受保护的技术使用者:郑州大学
技术研发日:2023.04.18
技术公布日:2023/7/20
版权声明

本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

飞行汽车 https://www.autovtol.com/

分享:

扫一扫在手机阅读、分享本文

相关推荐