FPGA不适合做DNN训练的原因分析

目前FPGA厂商把FPGA定位在DNN的推理上的应用,特别是低延迟,Batch很小的应用,还有像微软的brainwave也是把FPGA定位在推理上的应用,既然FPGA推理过程有宣称的各种低功耗低延迟的好处,为什么不把他应用在训练过程中呢?从算法加速上看,FPGA如果应用在训练上至少要克服两个缺点。

       第一个就是精度问题。

训练与推理一个很大的区别就是需要多次迭代进行BP计算,更新W参数,我们先盗个图,放上几个公式(出自吴恩达的深度学习微课程):

 

FPGA不适合做DNN训练的原因分析_第1张图片 

  FPGA不适合做DNN训练的原因分析_第2张图片

 

 

从上面的W与b的更新可知,需要多次迭代才能学习到最终的W和b,而FPGA内部主要用作运算的是DSP单元,他比较适合做定点运算,因此在多次迭代过程,如果精度不够进行小数截取,特别是网络层数很深时,定点计算引起的误差可能导致代价函数无法收敛。而推理过程,模型已经学习好了,降低精度后可以直接对比效果,看是否满足要求。

第2个是反向传播过程计算的转置问题。

FPGA内部有大量的分布式RAM,这是一把双刃剑,当只做推理时,可以把W参数存在多片的RAM中,一个周期可以取出第L层的第i个节点的大量参数进行运算,从而利用FPGA分布式RAM的高带宽。而训练过程的dW和dA的计算需要对A和参数W进行转置(无论是写入还是读出,总需要一个阶段需要做一次转置)

FPGA不适合做DNN训练的原因分析_第3张图片

这就悲催了,因为转置完,发现一次运算的参数都集中在某几片RAM中,而不是分散开,而FPGA的主频并不高,因此运算效率就不高了。

网上有看到一些说法,这个可以用benes网络解决转置问题,不过还没具体去研究过,抽空研究下是否能解决。

这两个问题是目前能想到的FPGA做训练的缺点,不过随着技术的发展可能也可以解决,毕竟技术与问题都是动态发展的。

你可能感兴趣的:(新技能,FPGA应用)