FPGA 17最佳论文 ESE: Efficient Speech Recognition Engine with Compressed LSTM on FPGA

本文主要是介绍FPGA 17最佳论文 ESE: Efficient Speech Recognition Engine with Compressed LSTM on FPGA,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

深鉴科技的 ESE 语音识别引擎的论文在 FPGA 2017 获得了唯一的最佳论文

聚焦于使用 LSTM 进行语音识别的场景,结合深度压缩以及专用处理器架构,使得经过压缩的网络在 FPGA 能够实现超越 Pascal Titan X GPU 一个数量级的能效比。论文中所描述的 ESE 语音识别引擎也是深鉴科技 RNN 处理器产品的原型。

软件方面,我们提出了 Load-balance-aware pruning。除了在纯算法上追求压缩率,还会考虑到最终要多核运行并行加速的时候不同核心之间的负载均衡,这种加速差其实属于最优的方式。

EIE 只能运行卷积神经网络的 FC 层。我们考虑到 RNN 的状态机会整体非常复杂,因为里面会有非常多个矩阵要运转,不仅要支持多路用户,还有里面的非线性函数都有非常大的区别。所以说在整个硬件架构过程做了一个重新设计,能够支持多路用户,也能够支持 RNN,如 LSTM 内部多个矩阵的运转。这样整个系统运转的(速度)都是高得多的一个架构。

通常大家会用一些启发式的算法去发现里面不重要的权重,并将它去除,然后再使用数据来进行 re-train 时能够把它的精确度恢复起来。其中绝对的阈值,做 re-train 时权重增长的幅度均可用来作为启发式算法的判别准则。

由于神经网络中的特征表示比较稀疏,所以这样一种非规则稀疏模型压缩效果往往比大家设计一个小一些的模型效果更好:直接砍 channel 数量,或者一些数学上的分解方式。其他模型压缩的方法有 SVD、Winograd 分解、binary network 等,但相比而言 Deep Compression 整体的性价比会更高。

LSTM的结构

它用于得到acoustic output probabilities(音节的输出概率),而且很有可能会占据整个系统中的90%以上的执行时间。所以作者认为要加速LSTM计算。
一个LSTM层里面,实际上是对一个序列x_1 … x_T的递归计算,其中最重要的是有i,f,o三个门控单元,分别叫做input,forget,output gate;一种比较流行的计算模式如下公式所示,也就是Figure 4所代表的含义。
在这里插入图片描述

模型压缩

1剪枝pruning与负载均衡Load Balance

基本的剪枝方法和Deep Compression 方法是一致的,
问题:在硬件计算中,如果需要一个批次的计算全部完成,就会因为非零参数严重不均匀,出现快的计算单元等待慢的计算单元执行的情况,造成性能的浪费。

方法:很简单,就是将分组了的参数按照一致的比例去稀疏,而不是原来那样全局稀疏;并通过retraining把损失的精度补回来。这样就做到了负载均衡的稀疏参数了。
利于并行计算
在这里插入图片描述

编码Encoding

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

下面这张图是想表示在本文的设计中,一个input data读一次会被计算多次
在这里插入图片描述

整个系统的架构图
在这里插入图片描述
可以看到,有多个channel,每个channel独立计算一个voice vector;在一个channel内部,见右图,有很多个PE,每个PE独立占有一个数据FIFO,而PE的数据来源都是共享的。
整个ESE有32个channel,每个channel有32个PE。

参数会通过指针buffer和weight buffer先把参数连续存在片上RAM中,在解码中,因为知道了某个参数的位置index(通过offset,就可以知道它要和哪个数据相乘),就把需要的数据按序取到FIFO中,在计算的时候就不需要管序号了,只要FIFO和weight buffer中取出来的数据对的上;临时sum结果存在act buffer中,然后每一次乘完后再由Accu累加器把之前的结果和当前结果累加起来;这里有一点,因为一个PE可能需要处理参数矩阵中的多列,所以我猜测act buffer是可以存多个临时结果的。另外剩下的部分就是向量点乘,然后是加法,激活函数这些,完成LSTM整个过程,

在这里插入图片描述

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

ref:https://blog.csdn.net/xbinworld/article/details/74012394

这篇关于FPGA 17最佳论文 ESE: Efficient Speech Recognition Engine with Compressed LSTM on FPGA的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/301691

相关文章

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

SpringBoot项目中Maven剔除无用Jar引用的最佳实践

《SpringBoot项目中Maven剔除无用Jar引用的最佳实践》在SpringBoot项目开发中,Maven是最常用的构建工具之一,通过Maven,我们可以轻松地管理项目所需的依赖,而,... 目录1、引言2、Maven 依赖管理的基础概念2.1 什么是 Maven 依赖2.2 Maven 的依赖传递机

Java内存泄漏问题的排查、优化与最佳实践

《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J

AI hospital 论文Idea

一、Benchmarking Large Language Models on Communicative Medical Coaching: A Dataset and a Novel System论文地址含代码 大多数现有模型和工具主要迎合以患者为中心的服务。这项工作深入探讨了LLMs在提高医疗专业人员的沟通能力。目标是构建一个模拟实践环境,人类医生(即医学学习者)可以在其中与患者代理进行医学

论文翻译:arxiv-2024 Benchmark Data Contamination of Large Language Models: A Survey

Benchmark Data Contamination of Large Language Models: A Survey https://arxiv.org/abs/2406.04244 大规模语言模型的基准数据污染:一项综述 文章目录 大规模语言模型的基准数据污染:一项综述摘要1 引言 摘要 大规模语言模型(LLMs),如GPT-4、Claude-3和Gemini的快

论文阅读笔记: Segment Anything

文章目录 Segment Anything摘要引言任务模型数据引擎数据集负责任的人工智能 Segment Anything Model图像编码器提示编码器mask解码器解决歧义损失和训练 Segment Anything 论文地址: https://arxiv.org/abs/2304.02643 代码地址:https://github.com/facebookresear

如何确定 Go 语言中 HTTP 连接池的最佳参数?

确定 Go 语言中 HTTP 连接池的最佳参数可以通过以下几种方式: 一、分析应用场景和需求 并发请求量: 确定应用程序在特定时间段内可能同时发起的 HTTP 请求数量。如果并发请求量很高,需要设置较大的连接池参数以满足需求。例如,对于一个高并发的 Web 服务,可能同时有数百个请求在处理,此时需要较大的连接池大小。可以通过压力测试工具模拟高并发场景,观察系统在不同并发请求下的性能表现,从而

Prometheus与Grafana在DevOps中的应用与最佳实践

Prometheus 与 Grafana 在 DevOps 中的应用与最佳实践 随着 DevOps 文化和实践的普及,监控和可视化工具已成为 DevOps 工具链中不可或缺的部分。Prometheus 和 Grafana 是其中最受欢迎的开源监控解决方案之一,它们的结合能够为系统和应用程序提供全面的监控、告警和可视化展示。本篇文章将详细探讨 Prometheus 和 Grafana 在 DevO

springboot整合swagger2之最佳实践

来源:https://blog.lqdev.cn/2018/07/21/springboot/chapter-ten/ Swagger是一款RESTful接口的文档在线自动生成、功能测试功能框架。 一个规范和完整的框架,用于生成、描述、调用和可视化RESTful风格的Web服务,加上swagger-ui,可以有很好的呈现。 SpringBoot集成 pom <!--swagge

论文翻译:ICLR-2024 PROVING TEST SET CONTAMINATION IN BLACK BOX LANGUAGE MODELS

PROVING TEST SET CONTAMINATION IN BLACK BOX LANGUAGE MODELS https://openreview.net/forum?id=KS8mIvetg2 验证测试集污染在黑盒语言模型中 文章目录 验证测试集污染在黑盒语言模型中摘要1 引言 摘要 大型语言模型是在大量互联网数据上训练的,这引发了人们的担忧和猜测,即它们可能已