面向训练阶段的神经网络性能分析
2018-10-12李景军
李景军,张 宸,曹 强
华中科技大学 武汉光电国家研究中心,武汉 430074
1 引言
随着深度学习技术的发展,卷积神经网络(convolutional neural network,CNN)被广泛应用到人脸识别、物体检测等领域。另外,处理器计算能力的增强,不仅缩短了模型训练的时间,而且也使得CNN技术得到了进一步的研究和开发。例如,Google公司开发的FaceNet网络模型人脸识别精度可以达到99.63%[1]。微软开发的Optasia,在大城市交通摄像机的关联查询方面,也表现出很高的精度和性能[2]。
虽然CNN取得了很高的精度,但是复杂的网络模型给处理器带来了极大的挑战。例如,为了达到57.1%的top-1精度和80.2%的top-5精度,AlexNet[3]需要迭代358000次[4]。VGG-16[5]拥有13800万个权值参数,一次迭代需要155亿次浮点操作[6]。对于大型网络模型(例如ResNet[7]),常常由几十或者几百层组成,模型具有更多的参数,迭代计算需要更多的浮点操作。由于CPU采用复杂的控制逻辑和分支预测,利用CPU训练大型神经网络模型时间很长,完成一次训练往往需要几天甚至十几天。
为了加速训练过程,FPGA、GPU和一些专用加速器[8-13]被相继开发,通过优化并行计算、流水线或近数据处理等方式,加快神经网络的执行速度。GPU具有强大的并行处理能力,因此深度学习工作者大多使用GPU训练神经网络模型。Song等人[14]通过对任务进行分类,动态调度GPU的内部资源,在mobile GPU上实现了不同任务在延时、能耗和精度方面的权衡。Rhu等人[15]同时利用显存和内存存储特征图和参数,实现了GPU训练更大的网络模型。此外,cuDNN[16]、cuBLAS[17]等GPU加速库和一些并行算法的出现,从算法上优化了矩阵乘法,缩短了矩阵运算的时间。……