摘要
提出一种适用于大规模异构计算平台训练MiniGo智能体的高效多级并行训练方法,包括节点间任务级并行、中央处理器-数字信号处理器(central processing unit-digital signal processor, CPU-DSP)异构并行、DSP核内并行。实现了高效的输入/输出部署,消除网络通信瓶颈。提出了面向CPU-DSP共享内存结构的异构计算内存管理,减少异构设备间的数据搬运。实现了共享内存编程优化,并利用DSP实现密集卷积计算算子加速优化。结果表明,与16核CPU计算相比,单核DSP算子加速最大加速比达16.44;该方法实现计算节点规模从1067扩展至4139,得到达到给定终止条件所需时间从43.02 h降至16.05 h,可扩展效率为69.1%。评估表明,该方法能够实现MiniGo在大规模异构计算平台的高效并行训练。
Abstract
An efficient multi-level parallel training method suitable for training MiniGo agents on large-scale heterogeneous computing platforms was proposed, including task level parallelism between nodes, CPU-DSP(central processing unit-digital signal process) heterogeneous parallelism and DSP core parallelism. Efficient input/output deployment and eliminated the bottleneck of network communication were realized. A heterogeneous computing memory management oriented to CPU-DSP shared memory structure was proposed to reduce the data handling between heterogeneous devices. Shared memory programming optimization was realized, and the dense convolution calculation operator acceleration optimization was realized by DSP. Results show that compared with 16 core CPU calculation, the maximum acceleration ratio of single core DSP operator acceleration is 16.44. In this method, the scale of computing nodes is expanded from 1067 to 4139, the time required to reach the given termination condition is reduced from 43.02 h to 16.05 h, and the expansion efficiency is 69.1%. Evaluation shows that this method can realize the efficient parallel training of MiniGo on large-scale heterogeneous computing platforms.
Keywords
强化学习(reinforcement learning,RL)是处理决策问题的有效方法之一。强化学习中,智能体通过策略做出动作,在和环境的交互中收集样本,最大化长期回报,从而逐渐适应环境。借助深度神经网络(deep neural networks,DNNs)技术,AlphaGo[1]、AlphaStar[2]等深度强化学习(deep reinforcement learning,DRL)智能体在围棋、星际争霸等比赛中打败了人类职业选手。DRL成为当前机器学习领域的研究热点之一,被广泛应用于机器人控制、资源调度、自动驾驶等领域[3-8]。
为了优化提升智能体的决策能力,DRL方法需要收集大量任务相关的样本数据来训练。以Atari中的深度Q学习网络[9](deep Q-learning network,DQN)训练为例,为了复现论文中智能体的水平,需要智能体与游戏交互千万步。同时,巨大的状态空间、动作空间和长期稀疏的奖励导致DRL智能体训练对算力需求高。OpenAI Five[10]使用了256块P100显卡,持续训练了10个月。正是由于DRL算法计算模式复杂、对算力需求高的特点,使得其适合作为大规模计算平台的系统性能评测应用。如何根据系统结构特性,提高训练速度和智能体能力成为研究热点之一。
MLPerf[11]中强化学习测试程序选型为MiniGo。MiniGo涉及对弈仿真模拟、深度神经网络的推理以及训练,计算过程复杂,需要面向系统结构进行定制化适配。当前,MiniGo在超算平台适配研究中通常采用通用中央处理器(central processing unit,CPU)或者图形处理器(graphic processing unit,GPU)的硬件平台,针对第三方芯片的适配处于空白。同时,当前MiniGo超算适配优化工作中,存在没有对算子进行定制化汇编优化、冗余操作导致读写频繁、计算节点间通信开销大、未针对异构设备特点进行针对性并行优化等问题,出现训练效率低、可扩展效率低的现象。针对以上问题,本文提出了一种高效的多层并行策略,实现MiniGo训练中计算任务的高效并行。结合原型系统结构特点和MiniGo训练计算模式,包含节点间任务级并行、中央处理器-数字信号处理器(central processing unit-digital signal processor,CPU-DSP)异构并行、DSP核内并行。结合MiniGo训练中对文件系统的操作和原型系统共享文件系统的特性,实现了一种高效输入/输出(input/output,I/O)模块。通过优化样本文件、模型文件的读写特性和改写训练中数据的读写行为,有效减少了大规模分布式计算的I/O开销。面向CPU-DSP共享内存结构的异构计算内存管理,有效降低CPU-DSP异构计算中的数据搬运,实现CPU和DSP之间的流水并行优化。同时将算子计算卸载到DSP,CPU负责进行蒙特卡罗树搜索(Mento Carlo tree search,MCTS)、网络通信、调度等任务。针对各算子计算-访存特性,设计了MiniGo应用中典型算子并行优化方案,实现了典型算子的高效计算。
1 相关工作
1.1 相关应用
2013年DeepMind提出DQN,融合深度学习与传统强化学习Q-learning方法,在以Atari为代表的决策类应用中取得了突破性进步。随后DRL在围棋、即时战略游戏等领域取得里程碑式的突破。MLPerf选择MiniGo为强化学习基准测试应用。
MiniGo是根据AlphaGo Zero论文编写的开源围棋智能体训练代码。MLPerf封闭模型分区的强化学习基准测试应用MiniGo提供的是单节点执行版本,其流程如算法1伪代码所示。主要分为两个阶段:训练模型和评估模型。阶段1又可分为训练和自我博弈。从当前模型前5个模型产生样本中随机采样作为数据集。迭代1个epoch得到新模型。新模型进行自我博弈,得到对应的样本集,加入下一次迭代。当最新模型产生指定对局数后,开启下一次训练。重复阶段1,得到100个模型。进入阶段2进行模型评估。训练得到模型依次与目标模型对弈,记录胜率。当胜率超过50%,认为当前模型足够智能,达到训练目标,输出训练该模型所需时间。
算法1 单节点版本的MiniGo算法
Alg.1 MiniGo algorithm of single node version

1.2 深度强化学习方法、分布式和并行化
DRL需要收集大量智能体和环境交互的数据。利用样本训练来提升智能体的决策能力。DRL相关工作中除了训练算法方面的改进外,还有围绕高效利用计算集群进行的研究。下面着重对高效利用计算集群方面的相关研究工作进行梳理。
Ong等[12]使用DistBelief[13]实现了DQN的多节点异步训练。2015年,DeepMind构建了第一个用于深度强化学习的大规模分布架构Gorila[14]。Mnih等提出的A3C[15]算法针对Gorila框架的限制,使用了1台机器的多个CPU线程作为多个异步actors-learners,挖掘并行探索样本多样性对加快训练收敛速度的影响。Ape-X[16]设计了分布式优先级经验回放策略,使智能体能够从比以前更多数量级的数据中有效地学习。IMPALA[17]提出了一种被称为V-trace的非策略校正方法,该方法保证了智能体在高吞吐量下的稳定学习。IMPALA框架也实现了扩展到数百台机器的分布式学习。除了结合具体DRL应用和算法的框架,研究人员也关注分布式训练框架。例如RLlib[18],一种基于Ray[19]开发的强化学习开发工具集。
1.3 MLPerf中MiniGo提交情况分析
MLPerf是一套测量机器学习性能的基准,在工业界和学界得到广泛的认可。强化学习应用分区的基准测试应用是MiniGo。MiniGo是根据AlphaGo Zero论文编写的开源围棋智能体训练代码。已向MLPerf榜单提交MiniGo项目实验结果的机构有:NVIDIA和Intel。对它们提交的代码和实验结果进行分析。NVIDIA以dgxa100_ngc20.06机器作为1个计算节点。每台dgxa100_ngc20.06拥有2个AMD EPYC 7742 CPU;8个A100-SXM4-40 GB GPU。计算节点规模分别为1个节点、2个节点、32个节点和224个节点。分析NVIDIA提交的代码,使用OPENMPI进行通信,调用Horovod框架[20]实现分布式训练。优化的重点是DNNs的推理训练,比如推理时数据格式为BF16等。分析NVIDIA提交的实验结果,单节点得到合格智能体需要训练18 770 s,节点规模增加至224个时需要训练1 100 s,可扩展效率约7.8%。达到终止条件,智能体所需迭代次数随着节点数增加而增加,从42次迭代增加到65次迭代。随着节点数增大,dgxa100_ngc20.06系统将面临的问题是:①迭代次数增大;②网络通信成为性能瓶颈。Intel提交的结果和优化代码也有类似的倾向。优化的重点是采用INT8的推理优化。
2 高效训练方法
2.1 系统架构
本文方法所依托的计算平台为如图1所示。原型系统硬件平台由高速网络、并行文件系统、异构计算芯片等构成。原型系统软件平台为计算任务池提供任务调度、任务分配、数据管理和负载均衡服务。原型系统的操作系统内核版本为Ubuntu 19.04,编译环境为gcc8.3.0,并行文件系统为Lustre,信息传递服务由TH Express提供。

图1大规模异构计算平台体系结构
Fig.1System architecture of large-scale heterogeneous computing platform
原型系统中,节点间通信使用的是自建高速网络,分为配置网络和数据网络,如图1中双实线②所示,通信带宽100 Gbit/s。节点间共享存储使用的是自研高速网络,如图1中单实线①所示,通信带宽100 Gbit/s。
图1中,每个计算节点③由CPU④和DSP⑤构成CPU-DSP异构计算节点。CPU和DSP簇之间共享双倍数据速率(double data rate,DDR)内存空间⑥。DDR和DSP端数据之间有多个直接存储访问(direct memory access,DMA)通道⑦,实现DDR和DSP端之间的高速数据访问,读写带宽42.6 GB/s。每个计算节点包含1个16核ARMv8 CPU和1个DSP簇。16核 CPU是裁剪版的Phytium FT-2000plus Processor。CPU核可以访问DSP所有共享资源,DSP核只能访问DSP核内私有的资源和DSP簇内共享的资源。DSP簇包含24个DSP核,1个6 MB的片上全局共享内存(global shared memory,GSM)⑪。DSP单核内拥有1个64 KB的私有标量内存(scalar memory,SM)⑧、1个768 KB的私有向量内存(array memory,AM)⑨、一个向量处理单元(vector processing unit,VPU)⑩。VPU由16个向量处理部件(vector processing element,VPE)组成,可以实现高吞吐单精度浮点计算。单核DSP在1.8 GHz下处理FP32的峰值性能是345.6 GFlops。
2.2 高效多级并行策略
MiniGo应用计算复杂,主要分为训练和自我博弈,如算法1所示。训练和自我博弈任务互相依赖,交替进行。为了充分发挥原型系统中计算节点多、加速卡计算速度快等优势,训练任务可按照多节点间数据并行、节点内CPU-DSP异构流水并行、DSP核间并行以及DSP指令集并行进行。同理,自我博弈任务也按照这三级并行对任务进行映射。
本文设计了一种高效的多级并行策略,如图2所示。该策略包括节点并行、节点内CPU-DSP异构流水并行和DSP核间并行以及DSP指令集并行。

图2高效多级并行策略示意图
Fig.2Schematic diagram of efficient multi-level parallel strategy
2.3 节点并行
算法1的训练任务、自我博弈任务的计算任务按照上述三级并行策略映射。使用原型系统Ntrain+Nsp个节点进行MiniGo训练任务,其中Ntrain是分布式训练新的模型的节点数量,Nsp是自我博弈产生训练样本的节点数量。
2.3.1 分布式计算
分布式训练任务使用Ntrain个节点。节点间执行数据并行,如图2的①训练所示。首先将当前模型的样本文件夹中的样本打乱混洗、均匀分为Ntrain个片段。然后将样本传输到各个训练节点。各个节点读取相同的最新模型参数值后开始计算。经过前向和反向计算得到各参数的梯度。各节点的梯度值归约得到参数的更新值,再广播给各个训练节点,更新各自模型参数。像这样迭代指定步数。其中,为减少节点间梯度值归约计算时受通信带宽的影响,采用Ring All-Reduce方法更新参数。
分布式自我博弈任务使用Nsp个节点。节点间进行任务级并行,如图2的①自我博弈所示。每个节点使用最新模型,进行自我博弈,从而得到训练样本。产生的样本保存在最新模型对应的样本文件夹下,作为下次训练的训练数据集。
2.3.2 高效I/O部署
不同于传统高性能计算(high performance computing,HPC)应用,在多节点分布式MiniGo训练中,节点间会频繁进行数据交换。随着节点规模增大,这种瞬时的并发跨节点通信将成为性能瓶颈。
本文方法根据系统结构特性进行了高效I/O部署,将大规模节点间的瞬时通信转换成离散的即时通信。在自我博弈中,Nsp个自我博弈节点完成1个对局即时写入共享存储中,将瞬时并发网络访问消峰,变成若干异步网络访问。在训练开始阶段,主训练节点从共享存储读取最近5个模型产生的所有对局文件,进行样本文件压缩再写回共享存储。Ntrain个训练节点从共享存储中读取对应样本文件,开始分布式训练。得到最新的模型后写入共享存储。自我博弈节点从共享存储读取最新模型进行自我博弈。如此循环,直到得到迭代足够多次的模型。通过更改MiniGo的文件读写行为完成瞬时并发网络消峰和冗余操作消除,实现了高效的I/O部署。
2.4 CPU-DSP异构协同计算
CPU-DSP异构协同计算可分为数据预取与流水并行、共享内存编码两个部分。
2.4.1 数据预取与流水并行
本节优化可分为数据预取操作和流水并行操作,如图2的②所示。
数据预取操作重叠了CPU数据准备和DSP算子计算时间。通过设置一个根据需求动态改变大小的缓冲池,多线程执行数据的入队到缓冲池中。训练开始时,模型直接从缓冲池提取数据。数据的加载和读取可以同时执行,没有阻塞,从而I/O的时间几乎可以忽略不计。
异构设备流水并行操作重叠了CPU数据处理和DSP算子计算时间。CPU数据处理包括网络构建、节点间通信、归约计算、MCTS。以自我博弈任务为例,智能体下一步行动根据MCTS结果确定。MCTS分为选择、扩展、推理、回溯,其中选择和推理需要训练模型的推理结果。因此,将复杂的计算任务分割,将网络算子计算卸载到DSP进行,其余在CPU进行,实现了异构设备间的流水并行。
2.4.2 共享内存编码
根据原型系统CPU和DSP有共享物理空间的特性设计了共享内存编程,同时提供了一个基于TensorFlow的共享内存编码模式下的算子异构计算库。
根据原型系统中存储管理硬件逻辑设计,修改TensorFlow等深度学习框架的算子内存管理,去掉CPU-DSP和DSP-CPU的2次数据传递操作,将数据存储在CPU-DSP共享存储段。变量、输入/输出等内存管理全周期都在共享物理地址空间,既无数据搬运的问题,也无须复杂的流水调度重叠通信和计算。同时,提供了易于使用的共享内存编码模式下的算子异构计算库。
2.5 DSP并行
实现DSP核间并行以及DSP指令集并行可以加速算子计算。结合性能分析工具,发现MiniGo应用的计算热点集中在神经网络推理和训练过程,具体而言是卷积、批归一化(batch normalization,BN)等典型算子。为了降低MiniGo应用执行时间,针对上述算子进行了汇编优化,将其卸载到DSP中高效执行。
如图2中
所示,将输入数据均匀划分,实现DSP核间数据并行计算。如图2中
所示,充分开发了向量处理器的标量、向量协同数据加载能力,多计算资源并行计算能力,实现紧凑的流水线并行。


以conv3×3的直接卷积过程为例,其计算过程如图3所示。其中,图3(a)为前向计算过程,图3(b)为反向计算过程。在前向计算中,输入feature大小为NHWC,卷积核大小为3×3×C×K,输出大小为NHWK。其中,N为批数据大小,H为高,W为宽,C为通道数,K为输出通道数。通过分析前向计算过程可知,其中N维度batch之间无计算相关性。可利用这个特点实现DSP簇内多核并行。对于每个batch为N/24的直接卷积,输出通道K维度之间无计算相关性,可实现DSP计算单元的硬件并行。在反向计算中,输入feature大小为NHWC,输入last_grad大小为NHWK,卷积核大小为3×3×C×K。输出是权重更新值和输入更新值,大小不变,分别是3×3×C×K和NHWC。根据对其计算过程进行拆分,可以分为两个部分:第一,batch之间无计算相关性的,利用DSP多核、核内多计算单元并行;第二,batch之间存在的数据交互,则使用直接累加归约和二分累加归约。

图3conv3×3的计算过程示意图
Fig.3Schematic diagram of calculation process of conv3×3
前向计算在核上的映射过程为:将特征图从DDR加载到核内SM中,卷积核从DDR加载到核内AM中。核心计算为特征图的1个数据广播为K份,和卷积核K个数据的向量乘,得到K个累加结果。循环核心计算,累加3×3×C次,得到1×1×K个结果。然后再H和W上循环。设计实现的卷积并行方案如图4。

图4conv3×3前向计算映射示意图
Fig.4Schematic diagram of conv3×3 forward calculation mapping
反向计算在核上的映射过程为:将特征图从DDR加载到核内SM中,卷积核和输入梯度值加载到核内AM中。核心计算是将一组输入梯度值放入向量寄存器(vector register,VR)中,特征图放入寄存器(register,R)中。将输入梯度值核特征图放入浮点乘累加操作器(float multiply accumulate,FMAC)中进行乘累加操作得到1×1×C×K的结果。如此平移循环9次,得到1组Hf×Wf×C×K的参数梯度矩阵。单个核内同时进行多组计算,得到多组参数梯度矩阵,将它们进行直接累加归约,然后放入GSM。核间进行二分累加,得到最后的结果。
3 实验分析
为了测试本文方法的性能,做了以下实验设置。实验的数据集来自智能体自我博弈,每一次模型迭代对弈8 192局作为样本。训练停止条件为智能体与目标智能体对弈胜率超过50%。如无特别说明,根据3.1.1实验分析选择Ntrain=43,batchsize取96。其他超参数设置与MLPerf默认参数一致。
3.1 核心技术
3.1.1 节点间优化
节点间的优化主要表现在I/O优化和实现分布式训练与自我博弈。
1)I/O 优化:在大规模并行训练开始阶段时,大量节点同时进行数据操作会对共享文件系统产生很大的瞬时读写需求。在本小节展示了高效I/O部署前后训练开始阶段数据传输耗时对比。实验内容为记录在训练开始阶段,共享文件系统中数据读写时间。实验分为优化前和优化后两组,每组实验重复3次。I/O性能对比如表1所示,重复实验得到的实验结果波动较大。这是由于在多租户场景下,受到了其他租户负载的影响。在优化前,最大耗时11 195 s,最小耗时2 730 s。在优化后,最大耗时779 s,最小耗时140 s。本文提出的高效I/O部署优化方法取得了显著效果。本文方法中的高效I/O部署优化有效支撑了MiniGo的大规模并行训练。
表1I/O性能对比
Tab.1 I/O performance comparison

2)分布式自我博弈:本小节讨论了I/O优化后,分布式自我博弈完成速度。表2展示了迭代1个模型,分布式自我博弈耗时随着节点数增加的变化。可以看到,1 024个节点平均耗时3 000 s。当节点数量翻1倍时,耗时为原来的一半,平均耗时约为1 400 s。从实验结果可知,经过I/O优化,节点数增加伴随的I/O操作增加没有影响自我博弈样本产生速度。自我博弈节点规模越大,自我博弈平均时间线性减少。
表2分布式自我博弈平均耗时分析
Tab.2 Average time-consuming analysis of distributed self game

3)分布式训练:在本节讨论了分布式训练的时间(通信时间、计算时间、归约时间)与节点数的关系,如图5所示。固定总的batchsize都为4 128,step数为241。当节点数减少,单节点batchsize增大,计算规模增大,计算时间随之增大。当节点数增大,通信量增大,多节点归约的通信时间随之增加。本文设置了4组实验。如图5所示,当训练节点数为86、单节点batchsize为48时,与其他实验设置相比,总的训练时间最短,但通信时间最长。当训练节点数为43、单节点batchsize为96时,网络开销小于其他参数设置实验。实验结果表明,节点数增加,step的通信时间变化不大。通信时间不变是因为将算子计算卸载到DSP进行,使得CPU足够完成除算子计算以外的其他操作。所以,在后续实验中batchsize设置为96,训练节点数量Ntrain=43。

图5网络开销与节点数的关系
Fig.5Relationship between network overhead and number of nodes
3.1.2 CPU-DSP异构计算优化
在本节中展示了CPU-DSP异构计算下的数据预取优化的性能提升,以及共享内存编码优化的性能提升。
1)数据预取:实验设置为使用单节点进行端到端的模型训练,顺序地加载和读取大小为13×19×19×96的FP32数据。数据预取优化性能对比如表3所示,CPU-DSP执行异构流水并行重叠的时间为54.55 ms。优化后加载和读取数据耗时从58.9 ms降至4.36 ms,加速比高达13.5。从实验结果可知,数据预取的优化折叠了大部分数据加载和读取时间。
表3数据预取优化性能对比
Tab.3 Performance comparison of data prefetching optimization

2)共享内存编码:通过训练时间来衡量共享内存编程模型带来的性能提升。共享内存编码优化前后计算时间对比如表4所示,共享内存编程模型优化对算子计算速度提升明显。卷积算子分为四种,分别是:conv3_initial,conv3_residual,conv1_policy,conv1_value。conv3_initial在反向计算优化前后加速比达7.22。conv_residual优化后,前向计算耗时从39.734 ms降到7.257 ms,反向计算耗时从66.565 ms降到13.284 ms。BN+ReLU算子在网络中被反复调用了13次,前向计算和后向计算的优化前后加速比分别是3.75和3.13。从整个训练过程来说,1个步长,前向计算总耗时从1 619.96 ms降至398.77 ms,后向计算总耗时从2 661.06 ms降至756.57 ms。优化前后,计算时间加速比为3.71,考虑到归约和训练启动开销,训练时间的加速比为2.39。
表4共享内存编码优化前后计算时间对比
Tab.4 Comparison of calculation time before and after shared memory coding optimization

3.1.3 DSP平台算子计算优化
在本节中,展示了DSP平台算子计算优化的性能提升。首先,分析了模型训练过程中各个算子所占用的训练时间。然后,将耗时占比大的算子计算卸载到DSP进行,并展示了算子计算优化效果。
1)计算热点分析:使用单核CPU进行训练时,各个算子的计算时间占比如图6所示。各算子占比有较大差异。特别地,卷积计算消耗了训练中计算耗时的绝大部分,在前向计算中耗时占比是90.88%,在反向计算中耗时占比是90.66%。BN计算时间占前向计算时间的7.78%,占反向计算时间的8.15%。ReLU和全连接的前向、反向计算时间分别占比不到1%。因此,本文优化了耗时占比大的算子计算。

图6当只使用CPU进行训练时,各个算子在前向计算和反向计算中的耗时
Fig.6When only CPU is used for training, the time consumption of each operator in forward and backward calculation
2)算子优化:算子优化前后实验的设置为使用1个DSP进行优化后算子的计算,16个CPU核进行未优化算子的计算。算子优化性能对比如表5所示,优化后的卷积算子计算速度都有不同程度的涨幅。对于conv3_residual的速度提升最为明显,在前向计算中加速比高达8.3,在反向计算中加速比高达16.44。BN+ReLU算子性能不理想,原因在于BN和ReLU的计算十分简单,计算过程中,待计算矩阵保存在共享内存上,申请空间和通信的操作耗时大于BN和ReLU的计算耗时,导致负优化的情况。从整体看,1个步长中,前向计算加速比为1.67,反向计算加速比为2.78,有明显的性能提升。在MiniGo模型训练中,算子计算发生在训练和自我博弈阶段。不同的是,在训练阶段前向计算和后向计算都要发生,在自我博弈阶段只发生前向计算进行推理。通过对算子进行优化,自我博弈中一次推理由666.27 ms降到398.77 ms,1个步长计算总耗时由2 766.98 ms降到1 155.34 ms。
表5算子优化性能对比
Tab.5 Comparison of operator optimization performance

3.2 总体优化效果
输入为训练模型、读模型样本窗口数、自我博弈阶段对弈局数、模型自我博弈产生样本、模型评估对局数以及目标模型,输出为与目标模型对弈超过50%胜率模型所需训练时间。本文完整地进行了连续训练,每次运行都超过10 000步。在每一次运行中,网络初始化参数来自同一训练模型。重复进行了多次实验。训练的单节点batchsize固定为96,训练节点固定为43,自我博弈节点数从1 024扩展至4 096。总体训练时间随节点数变化如表6所示,随着节点规模增大,迭代次数增大,训练时间减小。1 067节点训练时间约为43.02 h,4 139节点训练时间为16.05 h。
表6总体训练时间随节点数变化
Tab.6 Changes of overall training time with number of node

3.2.1 收敛性和稳定性分析
设置四组实验来对比多节点分布式训练的收敛性。四组对比实验中总的batchsize、自我博弈样本量等主要参数设置一致。V100-1实验在单个V100上进行训练。V100-4在4个V100上进行分布式训练。Ours-2091为本文方法在2 091个节点上进行训练。Ours-4139为本文方法在4 139个节点上进行训练。收敛表现和稳定性如图7所示。图7(a)展示损失值随训练迭代次数变化。可以看到,节点数增多,损失值波动较大。整体趋势都是随着迭代次数增加,损失值减小。当迭代到45次以后,V100-4持续波动,且损失值保持在3.1以上。相对应地,本文方法损失值逐渐稳定在3以下。图7(b)展示胜率随训练迭代次数变化。V100-1迭代训练43次达到目标,V100-4需要迭代74次,Ours-2091需要迭代45次,Ours-4139需要迭代47次。

图7性能对比随训练迭代次数变化
Fig.7Performance comparison changes with the number of training iterations
随着节点数增大,达到目标模型所需迭代次数逐渐增大。原因在于,强化学习中样本效率很难保证。分布式自我博弈和分布式训练,使得学习变得更加困难。当节点规模达到224时,NVIDIA方法的迭代次数为65。V100-4相较于V100-1滞后了31个模型。在本文方法中,节点规模达到4 139时,迭代次数为47。Ours-4139比V100-1仅仅滞后4次迭代,且节点规模翻倍对迭代次数几乎没有影响。本文方法在总体训练迭代次数上具有良好的稳定性。
3.2.2 可扩展性
参考强扩展性定义,将问题规模和迭代次数的关系进行归一化,即将达到MLPerf终止条件时的时间用迭代次数进行归一化,再计算随着节点规模增加时的可扩展效率。
选择固定训练节点数Ntrain=43,通过调整自我博弈节点数量来缩减计算时间。表7展示了本文方法的可扩展效率对比。以Ours-1067作为基准,扩展系数为1。当自我博弈节点规模增大1倍,总节点规模增大1.959倍时,训练所需时间是88 535 s。与Ours-1067相比,Ours-2091可扩展效率为89.2%。与Ours-1067相比,Ours-4139可扩展效率为69.1%。
表7可扩展效率对比
Tab.7 Comparison of the expanded efficiency

在MiniGo应用中,自我博弈节点数Nsp=8 192个能够完全展开任务级并行。因此,根据Nsp取1 000、2 000和4 000的实验数据,训练和自我博弈的可扩展性实验数据,分析得到自我博弈平均时间和节点规模呈现近似线性关系,同时训练平均时间近似不变。通过稳定性分析,当节点规模变大后自我博弈时间减少,随着其和训练时间接近,由于训练样本中旧样本占比的提升,收敛速度会受到一定影响,训练迭代次数呈现等差上升趋势。当节点规模达到8 235时,自我博弈平均时间约为350 s,迭代次数约为49次,训练所需时间约为43 120 s,可扩展效率估计为46.5%。
4 结论
本文提出了一种适用于大规模异构计算平台训练MiniGo智能体的高效多级并行训练方法。实现了MiniGo训练的充分并行,包括节点间任务级并行、CPU-DSP异构并行、DSP核内并行。根据MiniGo应用特点和原型系统特点设计了节点间任务级并行,同时也考虑到网络通信成为计算瓶颈的可能性,进行了高效的I/O部署。提出了面向CPU-DSP共享内存结构的异构计算内存管理,减少异构设备间的数据搬运。共享内存编程优化对算子计算速度提升明显,算子计算优化前后加速比最大是11.92。同时,将网络中计算密集的算子卸载到DSP计算,保留充足的CPU资源完成其他任务。结合DSP硬件特点,充分利用片上存储带宽实现算子的高效计算。与16核CPU计算相比,单核DSP计算算子最大加速比达16.44。从整个智能体训练过程来看,本文方法实现计算节点规模从1 067扩展至4 139,得到达到给定终止条件所需时间从43.02 h降至16.05 h,可扩展效率为69.1%。