论文精读-基于FPGA的卷积神经网络和视觉Transformer通用加速器

news2024/12/24 0:06:08

论文精读-基于FPGA的卷积神经网络和视觉Transformer通用加速器

优势:

1.针对CNN和Transformer提出了通用的计算映射(共用计算单元,通过不同的映射指令,指导数据通路和并行计算)

2.非线性与归一化加速单元(支持softmax,gelu,层归一化函数,共用加速单元)

3.计算空间探索,通过片上模型计算量穷举(profiling),得到最佳计算量配置参数。同理在进行e^x函数近似时,也进行相同操作。

4.使用分布式存储复用权重,减少片外访问(多级存储降低延迟)+ 非线性与归一化单元使用低精度计算(fp16),PE计算阵列使用DSP时钟倍频和INT8乘法并行计算方法共享DSP资源,减少资源消耗。

概述

针对计算机视觉领域中基于现场可编程逻辑门阵列(FPGA)的传统卷积神经网(CNN)络加速器不适配视 觉Transformer网络的问题,该文提出一种面向卷积神经网络和Transformer的通用FPGA加速器。首先,根据卷 积和注意力机制的计算特征,提出一种面向FPGA的通用计算映射方法;其次,提出一种非线性与归一化加速单 元,为计算机视觉神经网络模型中的多种非线性和归一化操作提供加速支持;然后,在Xilinx XCVU37P FP- GA上实现了加速器设计。实验结果表明,所提出的非线性与归一化加速单元在提高吞吐量的同时仅造成很小的 精度损失,ResNet-50和ViT-B/16在所提FPGA加速器上的性能分别达到了589.94 GOPS和564.76 GOPS。与 GPU实现相比,能效比分别提高了5.19倍和7.17倍;与其他基于FPGA的大规模加速器设计相比,能效比有明显 提高,同时计算效率较对比FPGA加速器提高了8.02%~177.53%。

研究背景

卷积和注意力机制概述

卷积是传统CNN最核心的组成部件,同时也是CNN模型中计算量最大的操作,卷积计算过程 如图1所示。卷积使用卷积核在输入特征图的2维空 间上滑动计算每个像素点及其相邻像素点与卷积核 的点积,最终得到一张输出特征图。图1中的Cin 和 Cout 分别表示卷积操作的输入通道数和输出通道 数。K 表示卷积核大小。Hin 和Win 表示输入特征图 的高度和宽度。Hout 和Wout 表示输入特征图的高度 和宽度。

注意力机制最关键的部分是自注意力操作,自 注意力计算流程如图2(a)所示。Xin 是自注意力操 作的输入,分别与权重WQ , WK 和WV 作线性矩阵

image-20240501122625250

image-20240501122637038

乘法得到Q, K 和V 。为避免Softmax函数的输入 绝对值过大,导致函数的梯度过小进而影响到梯度下降。将Q除以
sqrt(dk)。缩放后的Q与K 的转置KT 相乘,然后进行 Softmax操作,结果与V 相乘得到自注意力最终结 果Oattn 。现有的基于注意力机制的Transformer模 型大多数使用多头自注意力,由多个自注意力操作 组成,数量用Head(h)表示。图2(b)展示了Trans- former中多头自注意力的计算过程。每个头使用不 同的权重WQi , WKi 和WVi 来分别得到Qi , Ki 和 Vi。最后将h个自注意力输出拼接为Omulti−attn作为 多头自注意力的最终结果。

计算方式差异

由上述可知,卷积和注意力机制遵循着不同的 设计范式。卷积使用卷积核在感受野上计算得到 输出值,感受野是指输出特征图上的像素点在原始 图像上映射的区域。相比之下,注意力机制则是 对输入特征图及其中间结果进行操作,专注于不同 的区域,捕捉更多的特征信息。在推理过程中,卷 积计算过程中只涉及输入数据和训练后的模型 参数,而注意力计算过程还包括对当前输入的中间结 果进行操作,如Q, K , V 等。另外,与注意力中 的单通道2维矩阵乘法不同,卷积计算通常是多通 道的。

非线性与归一化操作差异

CNN和Transformer模型除了计算密集的线性操作,还包括激活和归一化函数。CNN通常采用 批归一化,由于批归一化在推理时可以作为固定权 重叠加进卷积层,同时CNN频繁使用的激活函数 ReLU可以在FPGA上使用简单的查找表实现,其 他非线性操作通常只在输出层进行,因此CNN中 的非线性与归一化操作基本不会影响其在FPGA上 推理的计算效率。Transformer通常采用层归一 化,层归一化的对象是单个样本,它对该样本的所 有维度的特征进行操作。层归一化使用输入数据的 均值和方差作为参数,与输入数据强相关。除了层 归一化,Transformer还包括频繁使用的Softmax和 GELU激活函数,这些操作在推理时引入了大量时间成本,在CPU上推理一张图像的运行时间占比 如图3所示。

image-20240501122937332

问题小结

由于CNN和Transformer在计算方式和非线性 与归一化操作上存在着以上差异,给当前的计算机 视觉神经网络FPGA加速器设计带来了以下挑战。

(1) 如何在FPGA计算资源上同时映射计算方 式不同的卷积和注意力机制;

(2) 如何在保证精度的前提下设计非线性与归 一化加速单元以支持Transformer中的层归一化, Softmax和GELU激活函数加速;

(3) 基于上述两个挑战,如何将基于CNN和Trans- former的算法模型映射到FPGA上进行加速。

加速器设计

乘法单元探索

image-20240501123038835

本文将(Ni,No)与(dic,doc,dow,doh) 和(diw, dow, doh)前两个维度对应。对于卷积,对划 分块逐通道计算,Ni 对应dic ,No 对应doc 。对于注 意力机制中的矩阵乘法,对划分块逐行计算, Ni 对应diw ,No 对应dow 。

为了探索计算阵列配置(Ni, No),本文以计算 量最小化为目标,提出了片上模型计算量穷举法。

image-20240501123116180

结果如下:

image-20240501123133124

非线性与归一化加速单元

image-20240501123238064

image-20240501123248054

image-20240501123256056

image-20240501123305455

image-20240501123322535

=> g(x) = (1 + x/128)^128

image-20240501123335172

image-20240501123413943

在FPGA上计算方差 σi2 的倒数平方根会导致较大的硬件开销,因此本 文使用快速倒数平方根算法(Fast Inverse Square Root, FISR)

image-20240501123451827

(2组32路输入的乘法 器,1组32路输入的加法器和1组32路输入的除法 器,2组32路输入的加法树)

fp32用于计算方差倒数

其他单元都使用fp16

加速器架构

image-20240501123604809

其他资源优化:

基于DSP时钟倍频和INT8乘法并行计算方法,1个DSP可以在每个系统时钟周期内完成4次乘法操 作。因此当(Ni, No)配置为(32, 64)时,计算阵列的 乘加器只需消耗512个DSP,每个DSP负责4个输出 通道方向上的计算。在计算阵列中嵌入了分布式存 储(Look-Up-Table Random Access Memory, LUTRAM)来尽可能地复用权重,减少片外访存量。

执行过程:

通过主机解析网络结 构描述文件,对神经网络模型进行划分,确定调度 顺序,并生成映射指令。预编译的映射指令、预处 理的划分块在运行前通过基于高速串行计算机扩展 总线标准(Peripheral Component Interface experss, PCIe)的直接内存访问(Direct Memory Access, DMA)存储在片外动态随机存取存储器 (Dynamic Random Access Memory, DRAM)。全 局控制器接收预编译的映射指令来驱动加速器,将 指令发送到片上存储和计算阵列等模块控制数据处 理,或将数据请求发送到DRAM读写数据。

数据流动:

预处理的划分块在运行时从DRAM中提取到 输入缓存或参数缓存。计算阵列从这些缓存读取数 据和参数进行计算。结果缓存负责存储中间或最终 结果。当该层包括非线性或归一化或池化操作时, 计算结果从结果缓存读入非线性与归一化加速单元 或池化单元进行处理,完成后写入DRAM或写回 输入缓存或参数缓存进行下一步计算。

实验结果

image-20240501124327220

image-20240501124334659

image-20240501124343787

QA

Q:全流水线设计?

A:在IC(集成电路)设计中,全流水线设计是指采用流水线架构来设计和制造集成电路。通过将IC设计成流水线结构,可以提高处理速度、降低功耗,并且可以更好地利用硬件资源。

Q:批归一化与层归一化区别与作用,应用场景?

A:

  1. 区别:

    • 批归一化(BN):在神经网络的每一层中,对每个训练小批量数据的输入进行归一化处理,即对每个特征维度进行归一化,然后再应用缩放和平移操作。
    • 层归一化(LN):在神经网络的每一层中,对每个训练样本的所有特征进行归一化处理,即对每个样本的所有特征维度进行归一化,然后再应用缩放和平移操作。
  2. 作用:

    • 批归一化(BN):通过减少训练过程中内部协变量偏移(Internal Covariate Shift),加速了模型训练过程,有助于梯度传播,提高了模型的泛化能力。同时,BN还有一定的正则化效果,可以缓解过拟合。
    • 层归一化(LN):与批归一化类似,层归一化也有助于减少内部协变量偏移,但它在处理不同样本时更加独立,因此在处理小样本或序列数据(如自然语言处理中的序列数据)时可能更有效。此外,层归一化还可以在训练和推理时提供一致的输出,而不受批量大小的影响。
  3. 批归一化的应用场景:

    • 大规模数据集:在大规模数据集上进行训练时,批归一化通常能够提供较好的性能。因为在大规模数据集上,对每个小批量数据进行归一化可以更好地估计每个特征的统计信息,有助于模型训练的稳定性和收敛速度。
    • 图像处理和计算机视觉:批归一化在图像处理和计算机视觉任务中广泛应用,例如图像分类、目标检测和语义分割等任务。
    • 深度卷积神经网络(CNN):对于深度的卷积神经网络,批归一化可以加速训练过程,提高模型的泛化能力,并且有助于解决梯度消失或梯度爆炸的问题。
  4. 层归一化的应用场景:

    • 小样本数据集:在小样本数据集上进行训练时,由于批归一化受限于批量大小,可能会引入额外的噪声,而层归一化则能够提供更稳定的表现。
    • 序列数据:层归一化在处理序列数据(如自然语言处理中的文本数据)时通常表现较好,因为它对不同样本的特征进行归一化处理,而不受序列长度的影响。
    • 生成模型:在生成模型中,如生成对抗网络(GAN)和变分自编码器(VAE)等,层归一化通常比批归一化更适用,因为它提供了更稳定的训练和更一致的生成结果。

Q:快速倒数平方根算法?

A:主要思想是通过近似计算倒数的平方根,以减少计算开销。常见的快速倒数平方根算法,即牛顿迭代法(Newton’s method):

给定一个实数 x,我们希望求它的倒数的平方根,即 1/√x。

  1. 初始化一个初始近似值 y。
  2. 迭代计算新的近似值:y = y * (1.5 - 0.5 * x * y * y),重复这个过程直到收敛(通常通过设定迭代次数或者设定一个收敛条件来判断)。
  3. 最终得到的 y 就是 x 的倒数的平方根的近似值。

这个算法的关键在于,它通过迭代逼近来计算倒数的平方根,而不是直接进行精确的计算。牛顿迭代法的优点在于它的收敛速度通常很快,尤其是对于简单的函数形式而言。

Q:GELU与RELU?

A:神经网络中常见的激活函数,用于神经网络的非线性变换。

  1. ReLU(修正线性单元):
    • ReLU函数定义为 f(x) = max(0, x)。即当输入大于0时,输出为输入值;当输入小于等于0时,输出为0。
    • ReLU的优点包括简单、计算高效,且能够缓解梯度消失问题,使神经网络更易于训练。
    • 但是,ReLU存在一个称为“神经元死亡”问题的缺点,即当输入小于等于0时,对应的神经元的梯度为0,导致这些神经元在后续训练中无法更新权重。
  2. GELU(高斯误差线性单元):
    • GELU函数定义为 f(x) = 0.5 * x * (1 + tanh(sqrt(2/pi) * (x + 0.044715 * x^3)))。GELU在ReLU的基础上引入了高斯误差函数的形式,使其近似一个非线性激活函数。
    • GELU的优点是在一些任务上表现更好,尤其是在自然语言处理等领域,它的光滑性和非饱和性使得在训练中更加稳定,有时候可以获得更好的性能。
    • 但是,GELU相对于ReLU来说计算量更大,可能会增加训练和推理的时间成本。

DSP时钟倍频与INT8乘法并行计算方法?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1636748.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

windows和mac 电脑 部署Ollama

官网地址:https://ollama.com/ github地址:https://github.com/ollama/ollama 一、windows下 https://github.com/ollama/ollama 安装大模型 ollama run llama3 下载的大模型地址: C:\Users\dengg\.ollama 4.34G

数据结构––队列

1.队列的定义 2.队列的分类 2.1循环队 2.2链式队 3.队列的实现 3.1循环队 3.1.1声明 typedef int QDataType; #define MAXSIZE 50 //定义元素的最大个数 /*循环队列的顺序存储结构*/ typedef struct {QDataType *data;int front; //头指针int rear; //尾指针 }Queue;…

YOLOv5入门(二)处理自己数据集(标签统计、数据集划分、数据增强)

上一节中我们讲到如何使用Labelimg工具标注自己的数据集,链接:YOLOv5利用Labelimg标注自己数据集,完成1658张数据集的预处理,接下来将进一步处理这批数据,通常是先划分再做数据增强。 目录 一、统计txt文件各标签类型…

第49期|GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区,集成了生成预训练Transformer(GPT)、人工智能生成内容(AIGC)以及大语言模型(LLM)等安全领域应用的知识。在这里,您可以找…

【华为 ICT HCIA eNSP 习题汇总】——题目集19

1、(多选)以下选项中,FTP 常用文件传输类型有()。 A、ASCII 码类型 B、二进制类型 C、EBCDIC 类型 D、本地类型 考点:应用层 解析:(AB) 文件传输协议(FTP&…

Redis源码学习记录:列表 (ziplist)

ziplist redis 源码版本&#xff1a;6.0.9。ziplist 的代码均在 ziplist.c / ziplist.h 文件中。 定义 ziplist总体布局如下&#xff1a; <zlbytes> <zltail> <zllen> <entry> <entry> ... <entry> <zlend> zlbytes&#xff1a;uin…

Linux 的静态库和动态库

本文目录 一、静态库1. 创建静态库2. 静态库的使用 二、动态库1. 为什么要引入动态库呢&#xff1f;2. 创建动态库3. 动态库的使用4. 查看可执行文件依赖的动态库 一、静态库 在编译程序的链接阶段&#xff0c;会将源码汇编生成的目标文件.o与引用到的库&#xff08;包括静态库…

2024小米SU7首批锁单用户调研报告

来源&#xff1a;电动汽车用户联盟 80%的锁单用户认为自己是米粉&#xff0c;64%的用户拥有10个以上米家生态产品&#xff0c; 使用小米手机的比例为67%&#xff0c;使用苹果手机的比例为47% 2. 81%的用户为90后&#xff0c;均龄31岁&#xff0c;未婚者和已婚无孩者占比63%&am…

接口测试 - postman

文章目录 一、接口1.接口的类型2. 接口测试3. 接口测试流程4. 接口测试用例1. 测试用例单接口测试用例-登录案例 二、HTTP协议1. HTTP请求2. HTTP响应 三、postman1. 界面导航说明导入 导出用例集 Get请求和Post请求的区别:2.postman环境变量和全局变量3. postman 请求前置脚本…

Java微服务分布式分库分表ShardingSphere - ShardingSphere-JDBC

&#x1f339;作者主页&#xff1a;青花锁 &#x1f339;简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java微服务架构公号作者&#x1f604; &#x1f339;简历模板、学习资料、面试题库、技术互助 &#x1f339;文末获取联系方式 &#x1f4dd; 往期热门专栏回顾 专栏…

【算法刷题 | 贪心算法05】4.27(K次取反后最大化的数组和、加油站)

文章目录 8.K次取反后最大化的数组和8.1题目8.2解法&#xff1a;贪心8.2.1贪心思路8.2.2代码实现 9.加油站9.1题目9.2解法&#xff1a;贪心9.2.1贪心思路9.2.2代码实现 8.K次取反后最大化的数组和 8.1题目 给你一个整数数组 nums 和一个整数 k &#xff0c;按以下方法修改该数…

基于EBAZ4205矿板的图像处理:03使用VIO调试输出HDMI视频图像

基于EBAZ4205矿板的图像处理&#xff1a;03使用VIO调试输出HDMI视频图像 在zynq调试时VIO是真的方便&#xff0c;特此写一篇博客记录一下 先看效果 项目简介 下面是我的BD设计&#xff0c;vtc用于生成时序&#xff0c;注意&#xff0c;2021.2的vivado的vtcIP是v6.2版本&…

【算法】【贪心算法】【leetcode】870. 优势洗牌

题目地址&#xff1a;https://leetcode.cn/problems/advantage-shuffle/description/ 题目描述&#xff1a; 给定两个长度相等的数组 nums1 和 nums2&#xff0c;nums1 相对于 nums2 的优势可以用满足 nums1[i] > nums2[i] 的索引 i 的数目来描述。 返回 nums1 的任意排列&…

C++入门基础(二)

目录 缺省参数缺省参数概念缺省参数分类全缺省参数半缺省参数声明与定义分离 缺省参数的应用 函数重载函数重载概念例子1 参数类型不同例子2 参数的个数不同例子3 参数的顺序不同 C支持函数重载的原理--名字修饰(name Mangling) 感谢各位大佬对我的支持,如果我的文章对你有用,欢…

nginx+Tomcat动静分离

本⽂的动静分离主要是通过nginxtomcat来实现&#xff0c;其中nginx处理图⽚、html等静态的⽂ 件&#xff0c;tomcat处理jsp、do等动态⽂件. 实验环境 192.168.200.133 nginx反向代理 192.168.200.129 static 192.168.200.130 dynamic 步骤 修改三台主机名 [rootadmin ~]#…

《Redis使用手册之列表》

《Redis使用手册之列表》 目录 **《Redis使用手册之列表》****LPUSH&#xff1a;将元素推入列表左端****LPUSHX、RPUSHX&#xff1a;只对已存在的列表执行推入操作****LPOP&#xff1a;弹出列表最左端的元素****RPOP&#xff1a;弹出列表最右端的元素****RPOPLPUSH&#xff1a;…

【C语言刷题系列】删除公共元素

目录 一、问题描述 二、解题思路 三、源代码实现 解决方案一&#xff1a;拷贝到临时数组 解决方案二&#xff1a;直接打印 个人主页&#xff1a; 倔强的石头的博客 系列专栏 &#xff1a;C语言指南 C语言刷题系列 一、问题描述 二、解题思路 第一种方法&…

线上告警炸锅!FastJson 又立功了。。

前段时间新增一个特别简单的功能&#xff0c;晚上上线前review代码时想到公司拼搏进取的价值观临时加一行log日志&#xff0c;觉得就一行简单的日志基本上没啥问题&#xff0c;结果刚上完线后一堆报警&#xff0c;赶紧回滚了代码&#xff0c;找到问题删除了添加日志的代码&…

3.C++动态内存管理(超全)

目录 1 .C/C 内存分布 2. C语言中动态内存管理方式&#xff1a;malloc/calloc/realloc/free 3. C内存管理方式 3.1 new/delete操作内置类型 3.2 new和delete操作自定义类型 3.3 operator new函数 3.4 定位new表达式(placement-new) &#xff08;了解&#xff09; 4. 常…

iA Writer for Mac:简洁强大的写作软件

在追求高效写作的今天&#xff0c;iA Writer for Mac凭借其简洁而强大的功能&#xff0c;成为了许多作家、记者和学生的首选工具。这款专为Mac用户打造的写作软件&#xff0c;以其独特的设计理念和实用功能&#xff0c;助你轻松打造高质量的文章。 iA Writer for Mac v7.1.2中文…