当前位置:   article > 正文

FPGA实现神经网络加速的Hello World_神经网络fpga加速

神经网络fpga加速

       听完很多大咖的观点,对于工程师,未来十年应该有两个技术可以做,一个是AI,提升生产力,一个是区块链,厘清生产关系。个人觉得还是AI好玩些,希望可以挤进去折腾下。对于AI应用落地,其实判断标准就两个,是否可以提升生产力(当然有时不是直接的,产生的数据可能在其他地方提高效率),一个是能否降低交易成本,把实惠给老百姓。

       好像有点扯远了,我们还是聊技术吧。FPGA工程师如果想进这个行业,首先要先明白神经网络部署的一些基本步骤。FPGA工程师我们总不能只做翻译的活吧。

定义网络的结构:最基本的就是层数、维度、激活函数,对一般工程师其实是使用,而不是发明。

一个模型一般由以下这些函数构成

  1. initialize_parameter(根据网络结构初始化参数,这个学问很多,初始化不好,收敛不好。
  2. sigmoid, relu(激活函数),如果都用线性的,那深度网络就没用了,自己代入公司就知道了,最后相当于单层网络。
  3. forward_propagation 正向传播,最简单就是点积,然后激活函数
  4. compute_cost 计算代价函数
  5. backward_propagation,反向传播时这个梯度下降也是很多算法滴。其实反向跟正向计算差不多,只不过反向输出层先求导,然后一级一级往回求梯度。。。
  6. update_parameters 更新参数,有个挺重要的超参数,学习率,尝试多个学习率时也是有技巧滴,不是平均,可能指数平均更容易赚大运。

这些模型需要的函数设计好了,接下来就开始训练,一般分训练集(训练用)、开发集(选择一组好的超参数用)、测试集(测试用)。

训练好的模型就拿去做推理,推理其实就是一个正向传播算法,他的参数是训练好的。

搭建模型时给tensorflow做个广告,真的比自己用numpy做简单啊,好处是设计好正向传播,反向传播不用写代码,只要告诉他怎么优化代价函数就好,其他交给框架了。当然如果你要做硬件加速器,那还是要理解计算过程的。

 

FPGA在这一过程中能干啥呢,当然是加速了,深度神经网络里面最多的计算就是乘加运算。当然如果你认为只是乘加,那就说明层次不够啊。。。

一般要解决几个主要问题:

  1. RAM如何设计,FPGA适合干这个,很大一部分原因是内部RAM分布式的,天生用来保存权重的。
  2. 哪些层放在FPGA中加速,哪些放在CPU中。
  3. 软硬件调度如何设计
  4. 数据与参数如何“流进”这个网络才能最优。
  5. 内部RAM放不下时咋整?

 

这些都设计出来,针对某个特定网络的加速器就设计完了,剩下的就是动手开干,实现你的想法吧。当然这种做法与传统的算法加速,比如实现加密算法,流程上没太大区别。其实还有很多更先进的东西,那就好好去读下相关论文及资料,比如微软的brainwave。。。

最后提两个问题哈:

  1. 为什么大家都说FPGA适合做推理,做训练不如GPU?理解算法以及FPGA结构,应该可以找到1,2个原因。欢迎大家分享想法。
  2. 微软的Bing为什么选择FPGA部署推理算法?
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/473776
推荐阅读
相关标签
  

闽ICP备14008679号