欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld。

技术交流QQ群:433250724,欢迎对算法、机器学习技术感兴趣的同学加入。


后面陆续写一些关于神经网络加速芯片设计的paper,前面已经写了ISSCC2017,当然,因为只有利用不加班的下班时间来看和写,可能周期会比较长…不过呢,多学习一些总是好的。最近有点忙,没有保持写的节奏,后面加油吧!)。下一篇会开始写ISCA 2017的论文。


作者与单位:

国内知名的深鉴科技的几位初创写的一篇,拿了今年FPGA会议的best paper,今天来看一看到底有些什么内容。文章围绕在FPGA下设计LSTM执行引擎,主要考虑的点是稀疏的计算架构。说实话,稀疏计算已经说的快熟(lan)了,关键还是这样的架构要在牺牲通用性下,得到足够强劲的收益;在一些专用的计算场景下,确实可以做到很好的效果,但也并不是一个免费的午餐。

背景介绍

先介绍一下语音识别和LSTM的简单背景。本文关注的应用场景是语音识别,当前一个基本的语音识别模型的流程是:

其中,现在非常常用的用于建模声学模型的是LSTM网络模型,它用于得到acoustic output probabilities(音节的输出概率),而且很有可能会占据整个系统中的90%以上的执行时间。所以作者认为要加速LSTM计算。

LSTM的结构如下图所示:

一个LSTM层里面,实际上是对一个序列x_1 … x_T的递归计算,其中最重要的是有i,f,o三个门控单元,分别叫做input,forget,output gate;一种比较流行的计算模式如下公式所示,也就是Figure 4所代表的含义。更详细的介绍本篇不写了,如果读者有兴趣可以看下[1],我后面也打算在深度学习系列中写一篇RNN/LSRM的博文。

模型压缩

主要是Pruning和Conpression几步,具体下面会讲。

  1. 剪枝pruning与负载均衡Load Balance

    基本的剪枝方法和Deep Compression [2]方法是一致的——将最小数值的Weight稀疏掉,然后再用retraining的方法保持原来的模型精度;retraining的时候胡保持已经被稀疏掉的参数不更新(一直是0)。但是作者提出,如果只是这样简单的稀疏,会有严重的负载不均衡现象,尤其是在硬件计算中,如果需要一个批次的计算全部完成,就会因为非零参数严重不均匀,出现快的计算单元等待慢的计算单元执行的情况,造成性能的浪费。

方法很简单,就是将分组了的参数按照一致的比例去稀疏,而不是原来那样全局稀疏;并通过retraining把损失的精度补回来。这样就做到了负载均衡的稀疏参数了。

  1. 量化Quantizaiton

    参数和数据最低可以做到12bit量化;参数和数据的动态区间不同:



  2. 编码Encoding

    属于CSC的编码,因为DDR位宽是512bit,所以需要512b对齐,PCIE接口位宽是128bit,所以有128bit对齐的要求。一个weight包含了12bit数据本身+4bit offset,offset表示距离上一个非0值的中间有几个0;

下面这张图是想表示在本文的设计中,一个input data读一次会被计算多次(吐槽一下,作者在画图以及后面文字解释的时候对于column的使用非常随意,有的时候是图上的一行,有的时候又是一列,看起来很费劲。FPGA会议的最佳论文…建议再严谨易读一点比较好。当然,也有可能是我没理解…)

下面是整个系统的架构图,可以看到,有多个channel,每个channel独立计算一个voice vector;在一个channel内部,见右图,有很多个PE,每个PE独立占有一个数据FIFO,而PE的数据来源都是共享的。大概的执行流程如下:参数会通过指针buffer和weight buffer先把参数连续存在片上RAM中,在解码中,因为知道了某个参数的位置index(通过offset,就可以知道它要和哪个数据相乘),就把需要的数据按序取到FIFO中,在计算的时候就不需要管序号了,只要FIFO和weight buffer中取出来的数据对的上;临时sum结果存在act buffer中,然后每一次乘完后再由Accu累加器把之前的结果和当前结果累加起来;这里有一点,因为一个PE可能需要处理参数矩阵中的多列,所以我猜测act buffer是可以存多个临时结果的。另外剩下的部分就是向量点乘,然后是加法,激活函数这些,完成LSTM整个过程,就不说了。整个ESE有32个channel,每个channel有32个PE。

这样看来,处理一个voice数据只有32个PE,也就是32个MAC,需要同时处理32个voice数据才能用满引擎。其实也折射了另外一个问题,sparse计算架构,单个数据处理时很难把并行的PE数量做大(为什么呢?因为目前看到的方案,在sparse计算中,要么就是用参数索引数据,要么用数据索引参数,索引取数据开销比较大;还有一个问题是,一个weight column可以做local reduction,以减少中间计算结果,但是data利用率低,要想data利用率高,中间计算结果就很大,这也是一个矛盾。),还是需要批处理才能提高总的性能。如果有更好的sparse计算架构,希望可以推荐给我学习。

OK,本篇就记录到此,后面会写一下今年ISCA的paper学习笔记。

参考资料

[1] http://www.jianshu.com/p/9dc9f41f0b29

[2] Deep Compression: Compressing Deep Neural Networks with Pruning, Trained Quantization and Huffman Coding

[3] ESE: Efficient Speech Recognition Engine with Compressed LSTM on FPGA

FPGA 17最佳论文导读 ESE: Efficient Speech Recognition Engine with Compressed LSTM on FPGA的更多相关文章

  1. [置顶] 人工智能(深度学习)加速芯片论文阅读笔记 (已添加ISSCC17,FPGA17...ISCA17...)

    这是一个导读,可以快速找到我记录的关于人工智能(深度学习)加速芯片论文阅读笔记. ISSCC 2017 Session14 Deep Learning Processors: ISSCC 2017关于 ...

  2. InfoQ一波文章:AdaSearch/JAX/TF_Serving/leon.bottou.org/Neural_ODE/NeurIPS_2018最佳论文

    和 Nested Partition 有相通之处? 伯克利提出 AdaSearch:一种用于自适应搜索的逐步消除方法 在机器学习领域的诸多任务当中,我们通常希望能够立足预先给定的固定数据集找出问题的答 ...

  3. 论文翻译:2015_DNN-Based Speech Bandwidth Expansion and Its Application to Adding High-Frequency Missing Features for Automatic Speech Recognition of Narrowband Speech

    论文地址:基于DNN的语音带宽扩展及其在窄带语音自动识别中加入高频缺失特征的应用 论文代码:github 博客作者:凌逆战 博客地址:https://www.cnblogs.com/LXP-Never ...

  4. AAAI 2021 最佳论文公布

    ​ 作者:Synced 翻译:仿佛若有光 第三十五届 AAAI 人工智能会议 (AAAI-21) 以虚拟会议的形式拉开帷幕.组委会在开幕式上公布了最佳论文奖和亚军.三篇论文获得了最佳论文奖,三篇被评为 ...

  5. 论文翻译:2021_Low-Delay Speech Enhancement Using Perceptually Motivated Target and Loss

    论文地址:使用感知动机目标和损失的低延迟语音增强 引用格式:Zhang X, Ren X, Zheng X, et al. Low-Delay Speech Enhancement Using Per ...

  6. USENIX 最佳论文奖:擦除 Windows Azure 存储编码

     我们发表了一篇介绍Windows Azure 存储如何用编码方式擦除数据的论文,此论文在 2012 年 6 月的 USENIX 技术年会上荣获最佳论文奖.这是 MicrosoftResearch ...

  7. Acceleration for ML 论文导读

    Energy efficient parallel neuromorphic architectures with approximate arithmetic on FPGA Motivation ...

  8. KDD 2018 | 最佳论文:首个面向Facebook、arXiv网络图类的对抗攻击研究

    8 月 19 日至 23 日,数据挖掘顶会 KDD 2018 在英国伦敦举行,昨日大会公布了最佳论文等奖项.最佳论文来自慕尼黑工业大学的研究者,他们提出了针对图深度学习模型的对抗攻击方法,是首个在属性 ...

  9. ACM TOMM 2017最佳论文:让AI接手繁杂专业的图文排版设计工作

    编者按:你是否曾经为如何创作和编辑一篇图文并茂.排版精美的文章而烦恼?或是为缺乏艺术灵感和设计思路而痛苦?AI技术能否在艺术设计中帮助到我们?今天我们为大家介绍的这篇论文,“Automatic Gen ...

随机推荐

  1. LCA的倍增算法

    LCA,即树上两点之间的公共祖先,求这样一个公共祖先有很多种方法: 暴力向上:O(n) 每次将深度大的点往上移动,直至二者相遇 树剖:O(logn) 在O(2n)预处理重链之后,每次就将深度大的沿重链 ...

  2. CF1100E

    i207M给的题 省选前-小题解合集 给定一张有向图,每条边有边权.你可以花费边权的代价反转一条边,使得原图中没有环.最小化反转的边权的最大值. 首先二分,然后考虑判定. 转化为有些边可以翻转,有些边 ...

  3. Linux用户创建及权限管理

    作业一: 1,新建用户natasha,uid为1000,gid为555,备注信息为“master” useradd natasha            vim /etc/passwd         ...

  4. Spring MVC入门示例

    1.新建一个Java Web项目 2.导入jar包 3.在WEB-INF下面建一个hello.jsp页面. <%@ page language="java" import=& ...

  5. grafana模板

    1.安静了这么久,换了一家公司,还有过年,去了上海,去了苏州,去了杭州,认识了一个人,跟老司机他们一起学k8s,所以很累很累,这是监控,也是在老司机的帮助下熟悉使用,3q!

  6. 「Python实践」学习之路

    一.列表内容对比 方式一: import operatorl1 = ['a','b','c']l2 = ['a','d','e']print(operator.lt(l1,l2))运行结果为True ...

  7. spring boot 2.0.3+spring cloud (Finchley)4、熔断器Hystrix

    在分布式系统中服务与服务之间的依赖错综复杂,一种不可避免的情况就是某些服务会出现故障,导致依赖于他们的其他服务出现远程调度的线程阻塞.某个服务的单个点的请求故障会导致用户的请求处于阻塞状态,最终的结果 ...

  8. 解决Ubuntu终端里面显示路径名称太长

    方法/步骤 找到配置文件先进行备份:  cp  ~/.bashrc  ~/.bashrc-bak 找到配置文件修改: vi  ~/.bashrc 备份是为了防止配置修改出错,可以还原: 下面是我的/h ...

  9. 【CodeForces】913 F. Strongly Connected Tournament 概率和期望DP

    [题目]F. Strongly Connected Tournament [题意]给定n个点(游戏者),每轮游戏进行下列操作: 1.每对游戏者i和j(i<j)进行一场游戏,有p的概率i赢j(反之 ...

  10. 判断是否引入jquery

    主要使用typeof检验 <script language="javascript"> if(typeof jQuery == 'undefined'){ window ...