deep cnns网络的层次模型实际上是一张有向无环图(dag图),分配到每个模型并行worker上的层集合,是有向无环图的拓扑排序子集,所有子集组成整个网络的1组模型。
5.2. “十字形”模型划分方法
考虑极端情景:需要训练超大规模deep cnns模型,或者使用计算能力相对较强、显存较小(一般在1gb~3gb)的桌面级geforce系列gpu,则利用模型本身的并行性这种基本的模型划分方法将不再适用。需要将模型再做拆分以保证单个gpu都能存储下对应的子模型。
如图7所示,描述了将模型按“十字形”划分到4 worker上训练的情景,不仅拆分了模型的可并行部分,也虽然这样的划分在worker 0和worker2之间,worker 1和worker 3之间达到并行加速效果,却能使得整个模型得以存储在4 gpu上。这种模型划分方法能够适用于训练超大规模网络等特殊模型的需求。
图7 “十字形”模型划分方案示意
6. cnns网络的模型并行工作引擎
每个模型并行worker上以一个模型并行执行引擎负责调度本worker上子模型的执行过程。执行引擎控制所有worker上的子模型完成前向和后向计算,各自对子模型完成参数更新后,到达主线程同步点,开始下一mini-batch训练。
多gpu模型并行和数据并行的deep cnns模型replicas及划分结构如图8所示,在使用4 gpu的场景下,划分了2组worker group用于数据并行;每个worker group内划分2个worker用于模型并行。
图8对imagenet网络的模型并行和数据并行划分
7. 在图像识别上的应用
7.1. 模型训练实验性能
实验环境为一台搭载8核心intel(r) xeon(r) cpu e5-2640 v2 @ 2.00ghz的服务器,内存为48gb,服务器安装了4块nvidia tesla k20c gpu,单gpu显存大小为4.8gb。
训练同样的deep cnns模型,相比于单gpu,使用多gpu结合不同并行模式的加速效果如下表所示:
表2不同并行配置的加速比
配置 对单gpu的加速比
2 gpus 模型并行 1.71
2 gpus 数据并行 1.85
4 gpus 模型并行 数据并行 2.52
4 gpus 数据并行 2.67
7.2. 模型收敛性
对于目标deep cnns模型,在单gpu训练时(对照实验)显存占用量为3.99gb;使用2 gpu模型并行训练时单个gpu上显存占用量为2.15gb,并且在训练相同迭代时训练集、测试集错误率效果都与对照实验完全相同;抽样比照参数一致性,被抽样的参数(同对照实验相比)也都是一样。
尝试更改deep cnns模型,训练一个更大的网络,增加滤波器数目,减小步长,增加中间卷积层feature map数目,训练时所需显存将达到9gb以上,使用单个tesla k20c gpu(4.8gb显存)无法开展训练实验;而多gpu模型并行训练实验中该模型的错误率对比图1模型降低2%。
7.3. 效果展示
图9为图像标签识别的示例,通过对两千多类物体的图像进行训练,可实现对常见物体的自动识别。
图9应用效果展示
8. 结论与展望
本文描述了深度卷积神经网络deep cnns的多gpu模型并行和数据并行框架,通过多个worker group实现了数据并行,同一worker group内多个worker实现模型并行。框架中实现了三阶段并行流水线掩盖i/o、cpu处理时间;设计并实现了模型并行引擎,提升了模型并行计算执行效率;通过transfer layer解决了数据存储访问效率问题。此框架显著提升了深度卷积神经网络训练速度,解决了当前硬件条件下训练大模型的难题。




热门文章

