深度学习模型训练阶段的加速与优化


深度:从输入层到输出层所经历的隐藏层层数越多,深度越深。越复杂的选择问题,越需要深度的层次的多。每层神经元也越多,即多层次的分析和计算手段,得到结果的一种方法。

目的:训练加速就可以在同样的时间多尝试idea,多调试参数,提升工作效率。对于大规模的训练数据和模型,可以将任务由不可能->可能。

方法:
1.GPU加速
矢量化编程可提高算法速度。强调单一指令并行操作多条相似数据,形成单指令流多数据流(SIMD)的编程泛型。
深层模型的算法,如BP,Auto-Encoder,CNN等,都可以写成矢量化的形式。
单个CPU上执行时,矢量运算会被展开成循环的形式,本质上还是串行执行。

GPU(图形处理器)的众核体系结构包含几千个流处理器,可将矢量运算并行化执行,大幅缩短计算时间。
随NVIDIA、AMD等公司不断推进其GPU的大规模并行架构支持,面向通用计算的GPU(GPGPU)成为加速可并行应用程序的重要手段。
得益于GPU众核(many-core)体系结构,程序在GPU系统上的运行速度相较于单核CPU提升几十倍乃至上千倍。
科学计算领域由此受益(如多体问题(N-Body Problem))

利用GPU来训练深度神经网络,可以充分发挥其数以千计计算核心的高效并行计算能力。
在使用海量训练数据的场景下,缩短耗费的时间,减少占用服务器。
如果对适当的深度神经网络进行合理优化,一块GPU卡可相当于数十甚至上百台CPU服务器的计算能力。
因此GPU已经成为业界在深度学习模型训练方面的首选解决方案。

2.数据并行
指对训练数据做切分,同时采用多个模型实例,对多个分片的数据并行训练。
需要参数交换,通常由一个服务器(Parameter Server)帮助完成。多个训练过程相互独立训练的结果,即模型的变化量ΔW需要汇报给参数服务器,由参数服务器负责更新为最新的模型W’=W–ηΔW,再将新的模型W’分发给训练程序,从新的起点开始训练。
有同步模式和异步模式之分。
前者所有训练模式同时训练一个批次的训练数据,完成后经过同步,再同时交换参数。参数交换完成后所有的训练程序有了共同的新模型作起点训练下一个批次。
后者训练模式完成一个批次的训练数据,立即和参数服务器交换参数,不考虑其他训练程序的状态。一个训练批次的最新结果不会立刻体现在其他训练程序中,直到他们下次参数交换。

3.模型并行
指将模型拆分成几个分片,由几个训练单元分别持有,共同协作完成训练。
当一个神经元的输入来自另一个训练单元上神经元的输出时,产生通信开销。

相关