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

论文精读-基于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.xdnf.cn/news/1409726.html

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

相关文章

【開山安全笔记】WAF略知一二

在工作或面试中,网安从业者经常遇到关于各类安全设备的问题。然而,初学者对于安全设备的工作原理,功能和作用大都没有很深入的了解。基于此背景,開山安全笔记将发表关于安全设备的系列文章。 本篇主要论述防火墙的概念、原理和作…

Java项目:88 springboot104学生网上请假系统设计与实现

作者主页:舒克日记 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 本学生网上请假系统管理员,教师,学生。 管理员功能有个人中心,学生管理,教师管理,班级信息…

virtualbox kafka nat + host-only集群 + windows 外网 多网卡

virtualbox kafka nat + host-only集群 + windows 映射访问 kafka集群搭建背景kafka集群搭建 背景 使用virtualbox搭建kafka集群,涉及到不同网络策略的取舍 首先 桥接 网络虽说 啥都可以,但是涉及到过多ip的时候,而且还不能保证使用的ip不被占用,所以个人选择kafka虚拟机…

手撕spring框架(3)

手撕spring框架(3) 相关系列 手撕spring框架(1) 手撕spring框架(2) InitializingBean 接口详解 什么是 InitializingBean 接口? InitializingBean 接口是 Spring 框架中的一个接口&#xff0c…

服务器远程连接jupyter notebook

目录 服务器远程连接jupyter notebook1、在服务器端安装notebook2、在服务器端的设置Step 1:Step 2:Step 3: 3. 在服务器端运行jupyter4、在windows 上连接远程服务器 参考资料 服务器远程连接jupyter notebook 1、在服务器端安装notebook conda install jupyter notebook 2…

一个C++小程序调试过程记录

Top 20 C Projects With Source Code [2024 Update]https://www.interviewbit.com/blog/cpp-projects/ 这个网页有一些简单的C程序的源码,闲来无事,把第一个程序(Bookshop Management System Using C)的源码下载了下来。 源文件…

面试:Spring(IOC、AOP、事务失效、循环引用、SpringMVC、SpringBoot的自动配置原理、Spring框架常见注解)

目录 一、Spring的单例Bean是否是线程安全的? 二、什么是AOP 1、介绍 (1)记录操作日志 (2)实现Spring中的事务 三、spring中事务失效的场景有哪些? 1、异常捕获处理 2、抛出检查异常 3、非public方…

jupyter notebook导出pdf文件显示不了中文

找到文件index.tex.j2,我的在 C:\Users\Administrator\miniconda3\envs\opencv2\share\jupyter\nbconvert\templates\latex 我安装miniconda3并配置opencv2所需要的环境, 配置前 最后:用文本编辑器打开,修改图中article为ctexart&#xf…

计算机网络 —— 网络层

IP 1. 基本介绍2. IP地址定义3. IP地址分类4. 子网掩码5. 全局地址与私有地址 1. 基本介绍 TCP/IP 协议的心脏是网络层,主要“实现节点之间的通信”,即“点对点(end-to-end)通信”。 网络层包含IP(Internet Protocol)及DNS(Domain Name Sys…

设计模式之空对象模式

空对象模式(Null Object Pattern)也称为零对象模式,是一种设计模式,用于代表空值的对象,而不是返回null。它的目的是让空对象能够像任何其他非空对象一样被使用,从而避免在代码中进行空值检查,提…

Meditron:基于 Llama 完全开源的医学大语言模型

健康危机就在眼前,当医疗资源有限时,每一秒钟都至关重要!Meditron 就像一位忠实的医疗助手,提供基于证据的护理建议和情境意识的推荐,帮助医疗工作者在诊断和治疗过程中做出更准确的决策。 在资源有限的医疗环境中&am…

06_电子设计教程基础篇(学习视频推荐)

文章目录 前言一、基础视频1、电路原理3、模电4、高频电子线路5、电力电子技术6、数学物理方法7、电磁场与电磁波8、信号系统9、自动控制原理10、通信原理11、单片机原理 二、科普视频1、工科男孙老师2、达尔闻3、爱上半导体4、华秋商城5、JT硬件乐趣6、洋桃电子 三、教学视频1…

Text-to-SQL小白入门(12)Awesome-Text2SQL开源项目star破1000

项目介绍 项目地址 23年9月份刚开源这个项目,大半年过去了,star数终于破1000啦,决定在知乎更新一下内容,看看内容变化,知乎有上当时项目介绍的链接:追光者:Text-to-SQL小白入门(六&…

用LM Studio搭建微软的PHI3小型语言模型

什么是 Microsoft Phi-3 小语言模型? 微软Phi-3 模型是目前功能最强大、最具成本效益的小型语言模型 (SLM),在各种语言、推理、编码和数学基准测试中优于相同大小和更高大小的模型。此版本扩展了客户高质量模型的选择范围&#x…

【计算机网络】网络层总结

目录 知识梗概 IP地址 子网划分 IP包头格式 路由 网络层协议 ARP病毒/ARP欺骗 知识梗概 IP地址 IP相关介绍:机器之间需要交流,必须要一个地址才能找到对应的主机,IP地址是主机的一种表示,保证主机之间的正常通信&#xff…

【Mac】Mac安装软件常见问题解决办法

前言 刚开始用Mac系统的小伙伴或者在更新系统版本后运行App的朋友会经常碰到弹窗提示「xxx已损坏,无法打开,您应该将它移到废纸篓」、「打不开xxx,因为Apple无法检查其是否包含恶意软件」、「打不开xxx,因为它来自身份不明的开发…

计算机408备考-数据结构重要知识点-数据结构的定义

【计算机408备考-数据结构重要知识点-数据结构的定义-哔哩哔哩】 https://b23.tv/x7shjNf 数据是信息的载体。数据元素是数据的基本单位。一个数据元素可由若干数据项组成,数据项是构成数据元素的不可分割的最小单位。数据对象是具有相同性质的数据元素的集合&…

cAdvisor-Docker容器性能分析工具

cAdvisor-Docker容器性能分析工具 软件简介 cAdvisor 是谷歌公司用来分析运行中的Docker容器的资源占用以及性能特性的工具。 cAdvisor 是一个运行中的守护进程用来收集、聚合、处理和导出运行容器相关的信息,每个容器保持独立的参数、历史资源使用情况和完整的资…

【数据结构与算法】力扣 239. 滑动窗口最大值

题干描述 给你一个整数数组 nums,有一个大小为 k **的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 示例 1: 输入: nums [1,3,-1,-3,5,3…

树莓派点亮LED灯

简介 使用GPIO Zero library 的 Python库实现点亮LED灯。接线 树莓派引脚参考图如下: LED正极 接GPIO17 LED负极 接GND 权限 将你的用户加到gpio组中, 否则无法控制GPIO sudo usermod -a -G gpio 代码 from gpiozero import LED from time impor…